diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..bf5ea2d27bbdc6bd4c244ccaed5adfbf7706fdb5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,74 @@ +; see http://editorconfig.org/ for docs on this file + +root = true + +[*] +ignore_if_in_header = This code was generated by a tool| +indent_style = space +indent_size = 4 +; uncomment to help with sharing files across os's (i.e. network share or through local vm) +#end_of_line = lf +; avoid a bom, which causes endless problems with naive text tooling +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +; keeping auto-format enabled helps avoid merge hell for projects without CI-based format validation +#disable_auto_format = true + +[*.cs] +; uncomment to enable full formatting of c# files +formatters = generic, uncrustify + +[*.asmdef] +scrape_api = true + +[**/Tests/**.asmdef] +scrape_api = false + +[*.Tests.asmdef] +scrape_api = false + +[*.md] +indent_size = 2 +; trailing whitespace is unfortunately significant in markdown +trim_trailing_whitespace = false +; uncomment to enable basic formatting of markdown files +#formatters = generic + +[{Makefile,makefile}] +; tab characters are part of the Makefile format +indent_style = tab + +[*.asmdef] +indent_size = 4 + +[*.json] +indent_size = 2 + +[*.{vcproj,bat,cmd,xaml,tt,t4,ttinclude}] +end_of_line = crlf + +; this VS-specific stuff is based on experiments to see how VS will modify a file after it has been manually edited. +; the settings are meant to closely match what VS does to minimize unnecessary diffs. +[*.{vcxproj,vcxproj.filters}] +indent_style = space +indent_size = 2 +end_of_line = crlf +charset = utf-8-bom +trim_trailing_whitespace = true +insert_final_newline = false +; must be broken out because of 51-char bug (https://github.com/editorconfig/editorconfig-visualstudio/issues/21) +[*.{csproj,pyproj,props,targets}] +indent_style = space +indent_size = 2 +end_of_line = crlf +charset = utf-8-bom +trim_trailing_whitespace = true +insert_final_newline = false +[*.{sln,sln.template}] +indent_style = tab +indent_size = 4 +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..e32645fa4eda9e8cc5fbb6ce24c3cb806271be82 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,35 +1,88 @@ -*.7z filter=lfs diff=lfs merge=lfs -text -*.arrow filter=lfs diff=lfs merge=lfs -text -*.bin filter=lfs diff=lfs merge=lfs -text -*.bz2 filter=lfs diff=lfs merge=lfs -text -*.ckpt filter=lfs diff=lfs merge=lfs -text -*.ftz filter=lfs diff=lfs merge=lfs -text -*.gz filter=lfs diff=lfs merge=lfs -text -*.h5 filter=lfs diff=lfs merge=lfs -text -*.joblib filter=lfs diff=lfs merge=lfs -text -*.lfs.* filter=lfs diff=lfs merge=lfs -text -*.mlmodel filter=lfs diff=lfs merge=lfs -text -*.model filter=lfs diff=lfs merge=lfs -text -*.msgpack filter=lfs diff=lfs merge=lfs -text -*.npy filter=lfs diff=lfs merge=lfs -text -*.npz filter=lfs diff=lfs merge=lfs -text -*.onnx filter=lfs diff=lfs merge=lfs -text -*.ot filter=lfs diff=lfs merge=lfs -text -*.parquet filter=lfs diff=lfs merge=lfs -text -*.pb filter=lfs diff=lfs merge=lfs -text -*.pickle filter=lfs diff=lfs merge=lfs -text -*.pkl filter=lfs diff=lfs merge=lfs -text -*.pt filter=lfs diff=lfs merge=lfs -text -*.pth filter=lfs diff=lfs merge=lfs -text -*.rar filter=lfs diff=lfs merge=lfs -text -*.safetensors filter=lfs diff=lfs merge=lfs -text -saved_model/**/* filter=lfs diff=lfs merge=lfs -text -*.tar.* filter=lfs diff=lfs merge=lfs -text -*.tar filter=lfs diff=lfs merge=lfs -text -*.tflite filter=lfs diff=lfs merge=lfs -text -*.tgz filter=lfs diff=lfs merge=lfs -text -*.wasm filter=lfs diff=lfs merge=lfs -text -*.xz filter=lfs diff=lfs merge=lfs -text -*.zip filter=lfs diff=lfs merge=lfs -text -*.zst filter=lfs diff=lfs merge=lfs -text -*tfevents* filter=lfs diff=lfs merge=lfs -text +*.asset binary +*.unity binary +*.prefab binary +*.meta binary +*/CommunicatorObjects/* binary +*/communicator_objects/* binary +*.md text +Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx filter=lfs diff=lfs merge=lfs -text +Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn filter=lfs diff=lfs merge=lfs -text +Project/Recordings/movie.mp4 filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx filter=lfs diff=lfs merge=lfs -text +com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx filter=lfs diff=lfs merge=lfs -text +docs/images/image-banner.png filter=lfs diff=lfs merge=lfs -text +localized_docs/KR/docs/images/image-banner.png filter=lfs diff=lfs merge=lfs -text +results/Pyramids[[:space:]]Training/Pyramids/Pyramids-100064.onnx filter=lfs diff=lfs merge=lfs -text +results/Pyramids[[:space:]]Training/Pyramids/Pyramids-100064.pt filter=lfs diff=lfs merge=lfs -text +results/Pyramids[[:space:]]Training/Pyramids/checkpoint.pt filter=lfs diff=lfs merge=lfs -text +results/Pyramids[[:space:]]Training/Pyramids/events.out.tfevents.1692804545.f1fcbdb9d0a8.1697.0 filter=lfs diff=lfs merge=lfs -text +results/Pyramids[[:space:]]Training/Pyramids.onnx filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/System.Core.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/System.Data.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/System.Xml.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/System.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/Unity.InputSystem.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/UnityEngine.CoreModule.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/UnityEngine.UIElementsModule.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Managed/mscorlib.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/MonoBleedingEdge/x86_64/libmono-native.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/MonoBleedingEdge/x86_64/libmonobdwgc-2.0.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Plugins/lib_burst_generated.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Plugins/libgrpc_csharp_ext.x64.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/Resources/unity[[:space:]]default[[:space:]]resources filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/resources.assets filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/Pyramids_Data/sharedassets0.assets.resS filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids/UnityPlayer.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/Pyramids.zip filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/System.Core.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/System.Data.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/System.Xml.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/System.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/UnityEngine.CoreModule.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/UnityEngine.UIElementsModule.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed/mscorlib.dll filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/MonoBleedingEdge/x86_64/libmono-native.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/MonoBleedingEdge/x86_64/libmonobdwgc-2.0.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Plugins/libgrpc_csharp_ext.x64.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Resources/unity[[:space:]]default[[:space:]]resources filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/resources.assets filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/resources.assets.resS filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget/UnityPlayer.so filter=lfs diff=lfs merge=lfs -text +training-envs-executables/linux/SnowballTarget.zip filter=lfs diff=lfs merge=lfs -text diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000000000000000000000000000000000..e5fe730e6c571b22aff36a5899f2da307cf3db7b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Report a bug with ML-Agents +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Console logs / stack traces** +Please wrap in triple backticks (```) to make it easier to read. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment (please complete the following information):** +- Unity Version: [e.g. Unity 2022.3f1] +- OS + version: [e.g. Windows 10] +- _ML-Agents version_: (e.g. ML-Agents v0.8, or latest `develop` branch from source) +- _Torch version_: (you can run `pip3 show torch` to get this) +- _Environment_: (which example environment you used to reproduce the error) + +**NOTE:** We are unable to help reproduce bugs with custom environments. Please attempt to reproduce your issue with one of the example environments, or provide a minimal patch to one of the environments needed to reproduce the issue. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..2fa1c22dcf32935c676cfd872325a675c856bbeb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Discussion / General Questions + url: https://forum.unity.com/forums/ml-agents.453/ + about: Discussion about ML-Agents, RL algorithms, or game integrations. + - name: Installation / Setup + url: https://forum.unity.com/forums/ml-agents.453/ + about: Questions about python installation, initial connection between Unity and training, etc. + - name: ML-Agents Unity Forum + url: https://forum.unity.com/forums/ml-agents.453/ + about: Please ask other questions in the ML-Agents Unity Forum. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000000000000000000000000000000..3228bca0413373bb96794271a0a2278a73ee5bac --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: request +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000000000000000000000000000000000..47c73ebf07cf4a4a6313cb6f0ba6149d036624a9 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,24 @@ +### Proposed change(s) + +Describe the changes made in this PR. + +### Useful links (Github issues, JIRA tickets, ML-Agents forum threads etc.) + + + +### Types of change(s) + +- [ ] Bug fix +- [ ] New feature +- [ ] Code refactor +- [ ] Breaking change +- [ ] Documentation update +- [ ] Other (please describe) + +### Checklist +- [ ] Added tests that prove my fix is effective or that my feature works +- [ ] Updated the changelog (if applicable) +- [ ] Updated the documentation (if applicable) +- [ ] Updated the migration guide (if applicable) + +### Other comments diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000000000000000000000000000000000000..88e27662486b3e5338f987b2cfee4b939cd580fb --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,26 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# General configuration +# Label to use when marking as stale +staleLabel: stale + +# Only run on issues +only: issues + +# Issue specific configuration +issues: + limitPerRun: 5 + daysUntilStale: 90 + daysUntilClose: 30 + markComment: > + This issue has been automatically marked as stale because it has not had activity in the + last 90 days. It will be closed in the next 30 days if no further activity occurs. + Thank you for your contributions. + closeComment: > + This issue has been automatically closed because it has not had activity in the + last 120 days. If this issue is still valid, please ping a maintainer. + Thank you for your contributions. + exemptLabels: + - request + - help-wanted + - announcement diff --git a/.github/workflows/colab.yml b/.github/workflows/colab.yml new file mode 100644 index 0000000000000000000000000000000000000000..2af462ec9f20a29a5fd22f68f2bbc0af2164d2c1 --- /dev/null +++ b/.github/workflows/colab.yml @@ -0,0 +1,65 @@ +name: colab + +on: + pull_request: + paths: # This action will only run if the PR modifies a file in one of these directories + - 'ml-agents-envs/**' + - 'gym-unity/**' + - 'colab/**' + - '.github/workflows/colab.yml' + push: + branches: + - main + - develop + - 'release/**' + workflow_dispatch: + +jobs: + colab: + runs-on: ubuntu-latest + env: + COLAB_ALWAYS_INSTALL_XVFB: 1 + QLEARNING_NUM_TRAINING_STEPS: 5 + QLEARNING_NUM_NEW_EXP: 64 + QLEARNING_BUFFER_SIZE: 64 + strategy: + fail-fast: false + matrix: + notebook_path: [Colab_UnityEnvironment_1_Run.ipynb, Colab_UnityEnvironment_2_Train.ipynb, Colab_UnityEnvironment_3_SideChannel.ipynb] + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.9.x + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '6.0.x' + - name: Cache pip + uses: actions/cache@v2 + with: + # This path is specific to Ubuntu + path: ~/.cache/pip + # Look to see if there is a cache hit for the corresponding requirements file + key: ${{ runner.os }}-pip-${{ hashFiles('ml-agents/setup.py', 'ml-agents-envs/setup.py', 'gym-unity/setup.py', 'colab_requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade setuptools + # Install the local checkouts of ml-agents. This will prevent the colab notebooks from installing a released version. + python -m pip install --progress-bar=off -e ./ml-agents-envs + python -m pip install --progress-bar=off -e ./ml-agents + python -m pip install --progress-bar=off -r colab_requirements.txt + - name: Execute notebook + run: jupyter nbconvert --to notebook --execute --log-level=DEBUG --ExecutePreprocessor.kernel_name=python3 --output output-${{ matrix.notebook_path }} colab/${{ matrix.notebook_path }} + - name: Upload colab results + uses: actions/upload-artifact@v2 + with: + name: artifacts + path: | + colab/output-${{ matrix.notebook_path }} + # Use always() to always run this step to publish execution results when there are failures + if: ${{ always() }} diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml new file mode 100644 index 0000000000000000000000000000000000000000..6133cf8596e16cb14deec8dd3a9836635d0520c1 --- /dev/null +++ b/.github/workflows/lock.yml @@ -0,0 +1,23 @@ +name: 'Lock Threads' + +on: + schedule: + - cron: '0 0/4 * * *' + workflow_dispatch: + +jobs: + lock: + runs-on: ubuntu-latest + steps: + - uses: dessant/lock-threads@v2 + with: + github-token: ${{ github.token }} + issue-lock-inactive-days: '30' + issue-exclude-created-before: '' + issue-exclude-labels: '' + issue-lock-labels: '' + issue-lock-comment: > + This thread has been automatically locked since there has not been + any recent activity after it was closed. Please open a new issue for + related bugs. + issue-lock-reason: 'resolved' diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000000000000000000000000000000000000..d15b4415fd9de6097d6d9d30a8f7d61e7ddfff65 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,92 @@ +name: nightly + +on: + schedule: + - cron: '0 7 * * *' # run at 7 AM UTC == midnight PST + workflow_dispatch: + +jobs: + markdown-link-check-full: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - uses: actions/setup-node@v2 + with: + node-version: '12' + - name: Install manual dependencies + run: | + sudo npm install -g markdown-link-check@3.8.7 + python -m pip install pre-commit + pre-commit install + - name: Run markdown checker + run: | + pre-commit run --hook-stage manual markdown-link-check-full --all-files + full-pytest: + runs-on: ubuntu-latest +# TODO: Re-use pytest workflow once https://github.com/github/roadmap/issues/257 is done. +# steps: +# - uses: actions/checkout@v2 +# - uses: ./.github/workflows/pytest.yml +# with: +# # Run all tests. +# pytest_markers: "not slow or slow" + env: + TEST_ENFORCE_BUFFER_KEY_TYPES: 1 + strategy: + # If one test in the matrix fails we still want to run the others. + fail-fast: false + matrix: + python-version: [3.8.x, 3.9.x, 3.10.x] + include: + - python-version: 3.8.x + pip_constraints: test_constraints_min_version.txt + - python-version: 3.9.x + pip_constraints: test_constraints_mid_version.txt + - python-version: 3.10.x + pip_constraints: test_constraints_max_version.txt + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Cache pip + uses: actions/cache@v2 + with: + # This path is specific to Ubuntu + path: ~/.cache/pip + # Look to see if there is a cache hit for the corresponding requirements file + key: ${{ runner.os }}-pip-${{ hashFiles('ml-agents/setup.py', 'ml-agents-envs/setup.py', 'test_requirements.txt', matrix.pip_constraints) }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Display Python version + run: python -c "import sys; print(sys.version)" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade setuptools + python -m pip install --progress-bar=off -e ./ml-agents-envs -c ${{ matrix.pip_constraints }} + python -m pip install --progress-bar=off -e ./ml-agents -c ${{ matrix.pip_constraints }} + python -m pip install --progress-bar=off -r test_requirements.txt -c ${{ matrix.pip_constraints }} + python -m pip install --progress-bar=off -e ./ml-agents-plugin-examples -c ${{ matrix.pip_constraints }} + - name: Save python dependencies + run: | + pip freeze > pip_versions-${{ matrix.python-version }}.txt + cat pip_versions-${{ matrix.python-version }}.txt + - name: Run pytest + run: | + pytest --cov=ml-agents --cov=ml-agents-envs \ + --cov-report=html --junitxml=junit/test-results-${{ matrix.python-version }}.xml \ + -p no:warnings -v -n 8 + - name: Upload pytest test results + uses: actions/upload-artifact@v2 + with: + name: artifacts-${{ matrix.python-version }} + path: | + htmlcov + pip_versions-${{ matrix.python-version }}.txt + junit/test-results-${{ matrix.python-version }}.xml + # Use always() to always run this step to publish test results when there are test failures + if: ${{ always() }} diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000000000000000000000000000000000000..81677bb16e74ce0f37aa54075068590f91717467 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,57 @@ +name: pre-commit + +on: + pull_request: + push: + branches: + - main + - develop + - 'release/**' + workflow_dispatch: + +jobs: + pre-commit: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8.x + - uses: actions/setup-ruby@v1 + env: + ImageOS: ubuntu20 + with: + ruby-version: '2.6' + - uses: actions/setup-dotnet@v3 + with: + dotnet-version: '7.0.100' + - name: Install manual dependencies + run: | + python -m pip install pre-commit + pre-commit install + - name: Run pre-commit + run: | + pre-commit run --all-files + markdown-link-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - uses: actions/setup-node@v2 + with: + node-version: '12' + - name: Install manual dependencies + # pin markdown-link-check version to support multi-level reference link + run: | + sudo npm install -g markdown-link-check@3.8.7 + python -m pip install pre-commit + pre-commit install + - name: Run markdown checker + run: | + pre-commit run --hook-stage manual markdown-link-check --all-files + validate-meta-files: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - run: python utils/validate_meta_files.py diff --git a/.github/workflows/publish_docs.yaml b/.github/workflows/publish_docs.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d7139e3f639a2246d8092be8e98edf135dd300c1 --- /dev/null +++ b/.github/workflows/publish_docs.yaml @@ -0,0 +1,24 @@ +name: Publish HTML Docs + +on: + workflow_dispatch: + +jobs: + publish: + name: Publish Docs to GH Pages + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + token: ${{ secrets.PUBLIC_GH_TOKEN }} + - name: Setup Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Publish docs + run: | + pip install mkdocs + git remote add public git@github.com:Unity-Technologies/ml-agents.git + mkdocs gh-deploy --clean -r public + diff --git a/.github/workflows/publish_pypi.yaml b/.github/workflows/publish_pypi.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9ef3d0f31535281492561d0afad0456bc370f84e --- /dev/null +++ b/.github/workflows/publish_pypi.yaml @@ -0,0 +1,48 @@ +# Adapted from https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ +name: Publish to PyPI (or TestPyPI) + +on: + push: + tags: + - "release_[0-9]+_test[0-9]+" + - "release_[0-9]+" + workflow_dispatch: + +jobs: + build-and-publish: + name: publish to PyPI (or TestPyPI) + runs-on: ubuntu-latest + strategy: + matrix: + package-path: [ml-agents, ml-agents-envs] + + steps: + - uses: actions/checkout@main + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install dependencies + run: pip install setuptools wheel twine --user + - name: verify git tag vs. version + run: | + cd ${{ matrix.package-path }} + python setup.py verify + - name: Build package + run: | + cd ${{ matrix.package-path }} + python setup.py sdist + python setup.py bdist_wheel + - name: Publish distribution 📦 to Test PyPI + if: startsWith(github.ref, 'refs/tags') && contains(github.ref, 'test') + uses: actions/gh-action-pypi-publish@717ba43cfbb0387f6ce311b169a825772f54d295 + with: + password: ${{ secrets.TEST_PYPI_PASSWORD }} + repository_url: https://test.pypi.org/legacy/ + packages_dir: ${{ matrix.package-path }}/dist/ + - name: Publish distribution 📦 to Production PyPI + if: startsWith(github.ref, 'refs/tags') && !contains(github.ref, 'test') + uses: actions/gh-action-pypi-publish@717ba43cfbb0387f6ce311b169a825772f54d295 + with: + password: ${{ secrets.PYPI_PASSWORD }} + packages_dir: ${{ matrix.package-path }}/dist/ diff --git a/.github/workflows/publish_pypi_python_api.yaml b/.github/workflows/publish_pypi_python_api.yaml new file mode 100644 index 0000000000000000000000000000000000000000..062c2d6fee9e37d747aa11daa9a16dda591ed392 --- /dev/null +++ b/.github/workflows/publish_pypi_python_api.yaml @@ -0,0 +1,50 @@ +# Adapted from https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ +name: Publish Python APIs to PyPI (or TestPyPI) + +on: + push: + tags: + - "api_release_[0-9]+_test[0-9]+" + - "api_release_[0-9]+" + workflow_dispatch: + +jobs: + build-and-publish: + name: publish to PyPI (or TestPyPI) + runs-on: ubuntu-latest + strategy: + matrix: + package-path: [ml-agents-envs] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install dependencies + run: pip install setuptools wheel twine --user + - name: verify git tag vs. version + run: | + cd ${{ matrix.package-path }} + python setup.py verify + - name: Build package + run: | + cd ${{ matrix.package-path }} + python setup.py sdist + python setup.py bdist_wheel + - name: Publish distribution 📦 to Test PyPI + if: startsWith(github.ref, 'refs/tags') && contains(github.ref, 'test') + uses: actions/gh-action-pypi-publish@717ba43cfbb0387f6ce311b169a825772f54d295 + with: + user: __token__ + password: ${{ secrets.TEST_PYPI_PASSWORD }} + repository_url: https://test.pypi.org/legacy/ + packages_dir: ${{ matrix.package-path }}/dist/ + - name: Publish distribution 📦 to Production PyPI + if: startsWith(github.ref, 'refs/tags') && !contains(github.ref, 'test') + uses: actions/gh-action-pypi-publish@717ba43cfbb0387f6ce311b169a825772f54d295 + with: + user: __token__ + password: ${{ secrets.PYPI_PASSWORD }} + packages_dir: ${{ matrix.package-path }}/dist/ diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml new file mode 100644 index 0000000000000000000000000000000000000000..4e84daab104439180a86e398fb1b4bb42fd2a201 --- /dev/null +++ b/.github/workflows/pytest.yml @@ -0,0 +1,100 @@ +name: pytest + +on: + pull_request: + paths: # This action will only run if the PR modifies a file in one of these directories + - 'ml-agents/**' + - 'ml-agents-envs/**' + - 'test_constraints*.txt' + - 'test_requirements.txt' + - '.github/workflows/pytest.yml' + push: + branches: + - main + - develop + - 'release/**' + workflow_dispatch: + inputs: + pytest_markers: + description: "Restrict which tests to run based on pytest markers" + required: false + default: "not slow" + type: string + workflow_call: + inputs: + pytest_markers: + required: false + # Hacky way to make sure we run all tests + default: "slow or not slow" + type: string + +jobs: + pytest: + runs-on: ubuntu-latest + env: + TEST_ENFORCE_BUFFER_KEY_TYPES: 1 + strategy: + # If one test in the matrix fails we still want to run the others. + fail-fast: false + matrix: + python-version: [3.8.x, 3.9.x, 3.10.x] + include: + - python-version: 3.8.x + pip_constraints: test_constraints_min_version.txt + - python-version: 3.9.x + pip_constraints: test_constraints_mid_version.txt + - python-version: 3.10.x + pip_constraints: test_constraints_max_version.txt + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Cache pip + uses: actions/cache@v2 + with: + # This path is specific to Ubuntu + path: ~/.cache/pip + # Look to see if there is a cache hit for the corresponding requirements file + key: ${{ runner.os }}-pip-${{ hashFiles('ml-agents/setup.py', 'ml-agents-envs/setup.py', 'test_requirements.txt', matrix.pip_constraints) }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Display Python version + run: python -c "import sys; print(sys.version)" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade setuptools + python -m pip install --progress-bar=off -e ./ml-agents-envs -c ${{ matrix.pip_constraints }} + python -m pip install --progress-bar=off -e ./ml-agents -c ${{ matrix.pip_constraints }} + python -m pip install --progress-bar=off -r test_requirements.txt -c ${{ matrix.pip_constraints }} + python -m pip install --progress-bar=off -e ./ml-agents-plugin-examples -c ${{ matrix.pip_constraints }} + - name: Save python dependencies + run: | + pip freeze > pip_versions-${{ matrix.python-version }}.txt + cat pip_versions-${{ matrix.python-version }}.txt + - name: Get pytest marker + id: pytest_marker + run: | + if [ "${{ github.event.inputs.pytest_markers }}" != "" ]; then + echo "::set-output name=markers::${{ github.event.inputs.pytest_markers }}" + else + echo "::set-output name=markers::not slow" + fi + - name: Run pytest + run: | + pytest --cov=ml-agents --cov=ml-agents-envs \ + --cov-report=html --junitxml=junit/test-results-${{ matrix.python-version }}.xml \ + -p no:warnings -v -m "${{ steps.pytest_marker.outputs.markers }}" -n 8 + - name: Upload pytest test results + uses: actions/upload-artifact@v2 + with: + name: artifacts-${{ matrix.python-version }} + path: | + htmlcov + pip_versions-${{ matrix.python-version }}.txt + junit/test-results-${{ matrix.python-version }}.xml + # Use always() to always run this step to publish test results when there are test failures + if: ${{ always() }} diff --git a/.github/workflows/validate_catalog.yaml b/.github/workflows/validate_catalog.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4166fd06c89f2f87c0826f65474c45957952f5ca --- /dev/null +++ b/.github/workflows/validate_catalog.yaml @@ -0,0 +1,21 @@ +# Validate catalog-info.yaml file +name: Validate Catalog-info.yaml +on: + pull_request: + paths: + - 'catalog-info.yaml' + push: + paths: + - 'catalog-info.yaml' + branches: [ main ] + +jobs: + validate_catalog: + runs-on: [ubuntu-latest] + steps: + - id: 'Checkout' + uses: actions/checkout@v2 + + - id: 'Validate' + uses: 'RoadieHQ/backstage-entity-validator@v0.3.2' + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..31877c1cb6c70805e72ee7b3e2039d72de16683a --- /dev/null +++ b/.gitignore @@ -0,0 +1,97 @@ +# Output Artifacts (Legacy) +/models +/summaries +# Output Artifacts +/results +# Output Builds +/Builds + +# Training environments +/envs + +# Environemnt logfile +*Project.log + +# Custom settings asset +*.settings.asset* + +# Visual Studio 2015 cache directory +/Project/.vs/ + +# Autogenerated VS/MD/Consulo solution and project files +/com.unity.ml-agentsExportedObj/ +/com.unity.ml-agents.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb + +# Unity3D generated meta files +*.pidb.meta + +# Unity3D Generated File On Crash Reports +/com.unity.ml-agents/sysinfo.txt + +# Builds +*.apk +*.unitypackage +*.app +*.exe +*.x86_64 +*.x86 + +# Plugins +/com.unity.ml-agents/VideoRecorder* + +# Generated doc folders +/docs/html + +# Mac hidden files +*.DS_Store +*/.ipynb_checkpoints +*/.idea +*.pyc +*.idea/misc.xml +*.idea/modules.xml +*.idea/ +*.iml +*.cache +*/build/ +*/dist/ +*.egg-info* +*.eggs* +*.gitignore.swp + +# VSCode hidden files +*.vscode/ + +.DS_Store +.ipynb_checkpoints + +# pytest cache +*.pytest_cache/ + +# Ignore compiled protobuf files. +*Grpc.Tools* + +# Ignore PyPi build files. +dist/ +build/ + +# Python virtual environment +venv/ +.mypy_cache/ + +# Code coverage report +.coverage +coverage.xml +/htmlcov/ + +**/UserSettings/* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4330316d37aaa006c020d0fc49defa02586e772d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,138 @@ +repos: +- repo: https://github.com/python/black + rev: 22.3.0 + hooks: + - id: black + exclude: > + (?x)^( + .*_pb2.py| + .*_pb2.pyi| + .*_pb2_grpc.py + )$ + +- repo: https://github.com/pre-commit/mirrors-mypy + rev: v0.991 + hooks: + - id: mypy + name: mypy-ml-agents + files: "ml-agents/.*" + args: [--ignore-missing-imports, --disallow-incomplete-defs, --no-strict-optional] + additional_dependencies: [types-PyYAML, types-attrs, types-protobuf, types-setuptools, types-filelock] + - id: mypy + name: mypy-ml-agents-envs + files: "ml-agents-envs/.*" + # Exclude protobuf files and don't follow them when imported + exclude: ".*_pb2.py" + args: [--ignore-missing-imports, --disallow-incomplete-defs, --no-strict-optional] + additional_dependencies: [types-PyYAML, types-attrs, types-protobuf, types-setuptools, types-filelock] +- repo: https://github.com/PyCQA/flake8 + rev: 3.9.2 + hooks: + - id: flake8 + exclude: > + (?x)^( + .*_pb2.py| + .*_pb2_grpc.py + )$ + # flake8-tidy-imports is used for banned-modules, not actually tidying + additional_dependencies: [flake8-comprehensions==3.2.2, flake8-tidy-imports==4.1.0, flake8-bugbear==20.1.4] + +- repo: https://github.com/asottile/pyupgrade + rev: v2.31.0 + hooks: + - id: pyupgrade + args: [--py3-plus, --py36-plus] + exclude: > + (?x)^( + .*_pb2.py| + .*_pb2_grpc.py + )$ + +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.1.0 + hooks: + - id: mixed-line-ending + exclude: > + (?x)^( + .*cs.meta| + .*.css| + .*.meta + )$ + args: [--fix=lf] + + - id: trailing-whitespace + name: trailing-whitespace-markdown + types: [markdown] + - id: check-merge-conflict + args: [--assume-in-merge] + - id: check-yaml + # Won't handle the templating in yamato + exclude: \.yamato/.* + +- repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.9.0 + hooks: + - id: python-check-mock-methods + +- repo: https://github.com/mattlqx/pre-commit-search-and-replace + rev: v1.0.5 + hooks: + - id: search-and-replace + types: [markdown] + exclude: ".*localized.*" + +#- repo: https://github.com/dotnet/format +# rev: v5.1.225507 +# hooks: +# - id: dotnet-format +# entry: dotnet-format whitespace +# args: [--folder, --include] + +# "Local" hooks, see https://pre-commit.com/#repository-local-hooks +- repo: local + hooks: + - id: dotnet-format + name: dotnet-format + language: system + entry: dotnet format whitespace --folder --include + types_or: ["c#"] + - id: markdown-link-check + name: markdown-link-check + entry: utils/run_markdown_link_check.py + language: script + types: [markdown] + # Don't check localized files since their target might not be localized. + exclude: ".*localized.*" + # Only run manually, e.g. pre-commit run --hook-stage manual markdown-link-check + stages: [manual] + - id: markdown-link-check-full + name: markdown-link-check-full + entry: utils/run_markdown_link_check.py + language: script + types: [markdown] + # Don't check localized files since their target might not be localized. + exclude: ".*localized.*" + # Only run manually, e.g. pre-commit run --hook-stage manual markdown-link-check-full + stages: [manual] + args: [--check-remote] + - id: validate-versions + name: validate library versions + language: script + entry: utils/validate_versions.py + files: ".*/__init__.py" + - id: validate-init-py + name: validate __init__.py files + language: script + entry: utils/validate_inits.py + types: [python] + - id: validate-release-links-py + name: validate release links + language: script + entry: utils/validate_release_links.py + require_serial: true + - id: generate-markdown-docs + name: generate markdown docs + language: python + entry: ./utils/generate_markdown_docs.py --package_dirs ml-agents-envs ml-agents + pass_filenames: false + additional_dependencies: [pyyaml, pydoc-markdown==3.10.1] diff --git a/.pre-commit-search-and-replace.yaml b/.pre-commit-search-and-replace.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5621e6547003f388e9db7a3c53a135d327e06409 --- /dev/null +++ b/.pre-commit-search-and-replace.yaml @@ -0,0 +1,8 @@ +- description: Replace "ML agents toolkit", "ML-Agents toolkit" etc + search: /ML[ -]Agents toolkit/ + replacement: ML-Agents Toolkit + insensitive: true +- description: Replace "the the" + search: /the the/ + replacement: the + insensitive: true diff --git a/.yamato/com.unity.ml-agents-coverage.yml b/.yamato/com.unity.ml-agents-coverage.yml new file mode 100644 index 0000000000000000000000000000000000000000..f46612541b3cba4965206c1e17167b7ae8f097a3 --- /dev/null +++ b/.yamato/com.unity.ml-agents-coverage.yml @@ -0,0 +1,43 @@ +{% metadata_file .yamato/coverage_tests.metafile %} +--- +{% for package in coverage_test_packages %} +{% for editor in coverage_test_editors %} +{% for platform in coverage_test_platforms %} +{% capture coverageOptions %} --enable-code-coverage --code-coverage-options 'generateHtmlReport;assemblyFilters:+{{ package.assembly }}'{% endcapture %} + +test_coverage_{{ package.name }}_{{ platform.name }}_{{ editor.version }}: + name : Coverage {{ package.name }} test {{ editor.version }} on {{ platform.name }} + agent: + type: {{ platform.type }} + image: {{ platform.image }} + flavor: {{ platform.flavor}} + commands: + - npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + - upm-ci project test -u {{ editor.version }} --type project-tests --project-path {{ editor.testProject }} --package-filter {{ package.name }} {{ coverageOptions }} --extra-utr-arg "reruncount=2" + - | + conda activate python3.8 + python3 ml-agents/tests/yamato/check_coverage_percent.py upm-ci~/test-results/ {{ package.minCoveragePct }} + artifacts: + logs: + paths: + - "upm-ci~/test-results/**/*" + dependencies: + - .yamato/com.unity.ml-agents-pack.yml#pack + triggers: + cancel_old_ci: true + {% if platform.name == "linux" %} + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match " {{ editor.testProject }}/**" OR + {% if package.name == "com.unity.ml-agents.extensions" %} + pull_request.changes.any match "com.unity.ml-agents.extensions/**" OR + {% endif %} + pull_request.changes.any match ".yamato/com.unity.ml-agents-coverage.yml") + {% endif %} +{% endfor %} +{% endfor %} +{% endfor %} diff --git a/.yamato/com.unity.ml-agents-pack.yml b/.yamato/com.unity.ml-agents-pack.yml new file mode 100644 index 0000000000000000000000000000000000000000..521881da4e06aff20769649941521c08fea108a3 --- /dev/null +++ b/.yamato/com.unity.ml-agents-pack.yml @@ -0,0 +1,21 @@ +pack: + name: Pack + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.small + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python3 -m pip install unity-downloader-cli --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple --upgrade + unity-downloader-cli -u 2022.3 -c editor --wait --fast + ./.Editor/Unity -projectPath Project -batchMode -executeMethod Unity.MLAgents.SampleExporter.ExportCuratedSamples -logFile - + npm install upm-ci-utils@stable -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + upm-ci project pack --project-path Project + artifacts: + packages: + paths: + - "upm-ci~/packages/**/*" + triggers: + cancel_old_ci: true diff --git a/.yamato/com.unity.ml-agents-performance.yml b/.yamato/com.unity.ml-agents-performance.yml new file mode 100644 index 0000000000000000000000000000000000000000..c86372414c88010fb6ab612d1fbc82000f699230 --- /dev/null +++ b/.yamato/com.unity.ml-agents-performance.yml @@ -0,0 +1,30 @@ +test_editors: + - version: 2022.3 + - version: 2023.1 +--- +{% for editor in test_editors %} +Run_Mac_Perfomance_Tests{{ editor.version }}: + name: Run Mac Performance Tests {{ editor.version }} + agent: + type: Unity::VM::osx + image: package-ci/mac:stable + flavor: b1.small + variables: + UNITY_VERSION: {{ editor.version }} + commands: + - python3 -m pip install unity-downloader-cli --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple --upgrade + - unity-downloader-cli -u {{ editor.version }} -c editor --wait --fast + - curl -s https://artifactory.prd.it.unity3d.com/artifactory/unity-tools-local/utr-standalone/utr --output utr + - chmod +x ./utr + - ./utr --suite=editor --platform=StandaloneOSX --editor-location=.Editor --testproject=DevProject --artifacts_path=build/test-results --report-performance-data --performance-project-id=com.unity.ml-agents --zero-tests-are-ok=1 + triggers: + cancel_old_ci: true + recurring: + - branch: develop + frequency: daily + artifacts: + logs: + paths: + - "build/test-results/**" + - "*.log" +{% endfor %} diff --git a/.yamato/com.unity.ml-agents-promotion.yml b/.yamato/com.unity.ml-agents-promotion.yml new file mode 100644 index 0000000000000000000000000000000000000000..dbf35cd812c3bc6aaf8526df8114eab142ed6261 --- /dev/null +++ b/.yamato/com.unity.ml-agents-promotion.yml @@ -0,0 +1,67 @@ +test_editors: + - version: 2022.3 +test_platforms: + - name: win + type: Unity::VM + image: package-ci/win10:stable + flavor: b1.large +--- + +{% for editor in test_editors %} +{% for platform in test_platforms %} +promotion_test_{{ platform.name }}_{{ editor.version }}: + name : Promotion Test {{ editor.version }} on {{ platform.name }} + agent: + type: {{ platform.type }} + image: {{ platform.image }} + flavor: {{ platform.flavor}} + variables: + UPMCI_PROMOTION: 1 + commands: + - npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + - upm-ci package test --unity-version {{ editor.version }} --package-path com.unity.ml-agents + artifacts: + logs: + paths: + - "upm-ci~/test-results/**/*" + dependencies: + - .yamato/com.unity.ml-agents-pack.yml#pack +{% endfor %} +{% endfor %} + +promotion_test_trigger: + name: Promotion Tests Trigger + dependencies: +{% for editor in test_editors %} +{% for platform in test_platforms %} + - .yamato/com.unity.ml-agents-promotion.yml#promotion_test_{{platform.name}}_{{editor.version}} +{% endfor %} +{% endfor %} + + +promote: + name: Promote to Production + agent: + type: Unity::VM + image: package-ci/win10:stable + flavor: b1.large + variables: + UPMCI_PROMOTION: 1 + commands: + - npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + - upm-ci package promote --package-path com.unity.ml-agents +# triggers: +# tags: +# only: +# - /^(r|R)elease-\d+\.\d+\.\d+(-preview(\.\d+)?)?$/ + artifacts: + artifacts: + paths: + - "upm-ci~/packages/*.tgz" + dependencies: + - .yamato/com.unity.ml-agents-pack.yml#pack +{% for editor in test_editors %} +{% for platform in test_platforms %} + - .yamato/com.unity.ml-agents-promotion.yml#promotion_test_{{ platform.name }}_{{ editor.version }} +{% endfor %} +{% endfor %} diff --git a/.yamato/com.unity.ml-agents-publish.yml b/.yamato/com.unity.ml-agents-publish.yml new file mode 100644 index 0000000000000000000000000000000000000000..3f283220070282384526ffdfc45abce6ccef6701 --- /dev/null +++ b/.yamato/com.unity.ml-agents-publish.yml @@ -0,0 +1,23 @@ +publish: + name: Publish ML-Agents to Internal Registry + agent: + type: Unity::VM + image: package-ci/win10:stable + flavor: b1.large + variables: + UPMCI_ENABLE_PACKAGE_SIGNING: 1 + commands: + - npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + - upm-ci package publish --package-path com.unity.ml-agents + triggers: + cancel_old_ci: true +# tags: +# only: +# - /^(r|R)(c|C)-\d+\.\d+\.\d+(-preview(\.\d+)?)?$/ + artifacts: + artifacts: + paths: + - "upm-ci~/packages/*.tgz" + dependencies: + - .yamato/com.unity.ml-agents-pack.yml#pack + - .yamato/com.unity.ml-agents-test.yml#all_package_tests diff --git a/.yamato/com.unity.ml-agents-test.yml b/.yamato/com.unity.ml-agents-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..96bbc1c7fc6a32cde9c0912e7934945ce4d59aff --- /dev/null +++ b/.yamato/com.unity.ml-agents-test.yml @@ -0,0 +1,152 @@ +{% metadata_file .yamato/coverage_tests.metafile %} +test_editors: + - version: 2022.3 + # We want some scene tests to run in the DevProject, but packages there only support 2020+ + testProject: Project + enableNoDefaultPackages: !!bool true + - version: 2023.1 + testProject: DevProject + enableNoDefaultPackages: !!bool true + +trunk_editor: + - version: trunk + # Workaround for MLA-1596 - need to make sure we load the right results. + testProject: DevProject + +test_platforms: + - name: win + type: Unity::VM + image: package-ci/win10:stable + flavor: b1.large + - name: mac + type: Unity::VM::osx + image: package-ci/mac:stable + flavor: b1.large + - name: linux + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.large + +packages: + - name: com.unity.ml-agents + assembly: Unity.ML-Agents + minCoveragePct: 72 + - name: com.unity.ml-agents.extensions + assembly: Unity.ML-Agents.Extensions* + minCoveragePct: 75 +--- + +all_package_tests: + name: Run All Combinations of Editors/Platforms Tests + dependencies: + {% for coverage_editor in coverage_test_editors %} + {% for coverage_platform in coverage_test_platforms %} + {% for coverage_package in coverage_test_packages %} + - .yamato/com.unity.ml-agents-coverage.yml#test_coverage_{{ coverage_package.name }}_{{ coverage_platform.name }}_{{ coverage_editor.version }} + {% endfor %} + {% endfor %} + {% endfor %} + {% for editor in test_editors %} + {% for platform in test_platforms %} + - .yamato/com.unity.ml-agents-test.yml#test_com.unity.ml-agents_{{ platform.name }}_{{ editor.version }} + {% endfor %} + {% endfor %} + {% for editor in trunk_editor %} + {% for platform in test_platforms %} + - .yamato/com.unity.ml-agents-test.yml#test_com.unity.ml-agents_{{ platform.name }}_{{ editor.version }} + {% endfor %} + {% endfor %} + triggers: + cancel_old_ci: true + recurring: + - branch: develop + frequency: daily + + {% for package in packages %} + {% for editor in test_editors %} + {% for platform in test_platforms %} + + {% if editor.enableNoDefaultPackages %} + {% assign noDefaultPackagesOptions = "--extra-create-project-arg='-upmNoDefaultPackages'" %} + {% else %} + {% assign noDefaultPackagesOptions = "" %} + {% endif %} + +test_{{ package.name }}_{{ platform.name }}_{{ editor.version }}: + name : {{ package.name }} test {{ editor.version }} on {{ platform.name }} + agent: + type: {{ platform.type }} + image: {{ platform.image }} + flavor: {{ platform.flavor}} + commands: + - npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + - upm-ci package test -u {{ editor.version }} --package-path {{ package.name }} {{ noDefaultPackagesOptions }} --warnings-as-errors --extra-utr-arg "reruncount=2" + artifacts: + logs: + paths: + - "upm-ci~/test-results/**/*" + dependencies: + - .yamato/com.unity.ml-agents-pack.yml#pack + {% for coverage_editor in coverage_test_editors %} + {% for coverage_platform in coverage_test_platforms %} + {% for coverage_package in coverage_test_packages %} + - .yamato/com.unity.ml-agents-coverage.yml#test_coverage_{{ coverage_package.name }}_{{ coverage_platform.name }}_{{ coverage_editor.version }} + {% endfor %} + {% endfor %} + {% endfor %} + triggers: + cancel_old_ci: true + {% if platform.name == "linux" %} + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match " {{ editor.testProject }}/**" OR + {% if package.name == "com.unity.ml-agents.extensions" %} + pull_request.changes.any match "com.unity.ml-agents.extensions/**" OR + {% endif %} + pull_request.changes.any match ".yamato/com.unity.ml-agents-test.yml") + {% endif %} + {% endfor %} + {% endfor %} + {% endfor %} + + {% for package in packages %} + {% for editor in trunk_editor %} + {% for platform in test_platforms %} + +test_{{ package.name }}_{{ platform.name }}_trunk: + name : {{ package.name }} test {{ editor.version }} on {{ platform.name }} + agent: + type: {{ platform.type }} + image: {{ platform.image }} + flavor: {{ platform.flavor}} + commands: + - | +{% if platform.name == "linux" %} + conda activate python3.8 +{% endif %} + python -m pip install unity-downloader-cli --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple --upgrade + unity-downloader-cli -u trunk -c editor --wait --fast + npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm + upm-ci project test -u {{ editor.version }} --project-path {{ editor.testProject }} --package-filter {{ package.name }} --extra-create-project-arg="-upmNoDefaultPackages" --extra-utr-arg "reruncount=2" + artifacts: + logs: + paths: + - "upm-ci~/test-results/**/*" + dependencies: + - .yamato/com.unity.ml-agents-pack.yml#pack + {% for coverage_editor in coverage_test_editors %} + {% for coverage_platform in coverage_test_platforms %} + {% for coverage_package in coverage_test_packages %} + - .yamato/com.unity.ml-agents-coverage.yml#test_coverage_{{ coverage_package.name }}_{{ coverage_platform.name }}_{{ coverage_editor.version }} + {% endfor %} + {% endfor %} + {% endfor %} + triggers: + cancel_old_ci: true + {% endfor %} + {% endfor %} + {% endfor %} diff --git a/.yamato/compressed-sensor-test.yml b/.yamato/compressed-sensor-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..23e28a5533fdc5aeb0829d3047d7e823b80949ea --- /dev/null +++ b/.yamato/compressed-sensor-test.yml @@ -0,0 +1,38 @@ +{% metadata_file .yamato/test_versions.metafile %} +--- +{% for editor in test_editors %} +test_compressed_obs_{{ editor.version }}: + name: Test Compressed Sensor Observation {{ editor.version }} + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.medium + variables: + UNITY_VERSION: {{ editor.version }} + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python -u -m ml-agents.tests.yamato.setup_venv + python ml-agents/tests/yamato/scripts/run_compressed_sensor.py --env=artifacts/testPlayer-TestGridCompressed + python ml-agents/tests/yamato/scripts/run_compressed_sensor.py --env=artifacts/testPlayer-TestTextureCompressed + dependencies: + - .yamato/standalone-build-test.yml#test_linux_standalone_{{ editor.version }} + triggers: + cancel_old_ci: true + {% if editor.extra_test == "sensor" %} + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match "com.unity.ml-agents.extensions/**" OR + pull_request.changes.any match "Project/**" OR + pull_request.changes.any match "ml-agents/tests/yamato/**" OR + pull_request.changes.any match "ml-agents-envs/**" OR + pull_request.changes.any match ".yamato/compressed-sensor-test.yml") AND + NOT pull_request.changes.all match "**/*.md" + {% endif %} +{% endfor %} diff --git a/.yamato/coverage_tests.metafile b/.yamato/coverage_tests.metafile new file mode 100644 index 0000000000000000000000000000000000000000..29bcfd73e298b8c93ee40572ca3c9ae905c921e4 --- /dev/null +++ b/.yamato/coverage_tests.metafile @@ -0,0 +1,17 @@ +coverage_test_editors: + - version: 2022.3 + testProject: DevProject + +coverage_test_platforms: + - name: linux + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.medium + +coverage_test_packages: + - name: com.unity.ml-agents + assembly: Unity.ML-Agents + minCoveragePct: 72 + - name: com.unity.ml-agents.extensions + assembly: Unity.ML-Agents.Extensions* + minCoveragePct: 75 diff --git a/.yamato/gym-interface-test.yml b/.yamato/gym-interface-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..a90a8ce9ecfa06e5a732d4bbbb67c9393110bc8a --- /dev/null +++ b/.yamato/gym-interface-test.yml @@ -0,0 +1,37 @@ +{% metadata_file .yamato/test_versions.metafile %} +--- +{% for editor in test_editors %} +test_gym_interface_{{ editor.version }}: + name: Test Linux Gym Interface {{ editor.version }} + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.medium + variables: + UNITY_VERSION: {{ editor.version }} + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python -m pip install wheel --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python -u -m ml-agents.tests.yamato.setup_venv + python ml-agents/tests/yamato/scripts/run_gym.py --env=artifacts/testPlayer-Basic + dependencies: + - .yamato/standalone-build-test.yml#test_linux_standalone_{{ editor.version }} + triggers: + cancel_old_ci: true + {% if editor.extra_test == "gym" %} + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match "Project/**" OR + pull_request.changes.any match "ml-agents/tests/yamato/**" OR + pull_request.changes.any match "ml-agents-envs/**" OR + pull_request.changes.any match ".yamato/gym-interface-test.yml") AND + NOT pull_request.changes.all match "**/*.md" + {% endif %} +{% endfor %} diff --git a/.yamato/protobuf-generation-test.yml b/.yamato/protobuf-generation-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..be490867e91c8ccc814310cc241fe1195588f38d --- /dev/null +++ b/.yamato/protobuf-generation-test.yml @@ -0,0 +1,44 @@ +test_linux_protobuf_generation: + name: Protobuf Generation Tests + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.large + variables: + GRPC_VERSION: "1.14.1" + CS_PROTO_PATH: "com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects" + commands: + - | + sudo apt-get update && sudo apt-get install -y nuget + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + nuget install Grpc.Tools -Version $GRPC_VERSION -OutputDirectory protobuf-definitions/ + python3 -m pip install --upgrade pip --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python3 -m pip install grpcio==1.28.1 grpcio-tools==1.13.0 protobuf==3.11.3 six==1.14.0 mypy-protobuf==1.16.0 --progress-bar=off --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + pushd protobuf-definitions + chmod +x Grpc.Tools.$GRPC_VERSION/tools/linux_x64/protoc + chmod +x Grpc.Tools.$GRPC_VERSION/tools/linux_x64/grpc_csharp_plugin + COMPILER=Grpc.Tools.$GRPC_VERSION/tools/linux_x64 ./make.sh + popd + mkdir -p artifacts + touch artifacts/proto.patch + git diff --exit-code -- :/ ":(exclude,top)$CS_PROTO_PATH/*.meta" \ + || { GIT_ERR=$?; echo "protobufs need to be regenerated, apply the patch uploaded to artifacts."; \ + echo "Apply the patch with the command 'git apply proto.patch'"; \ + git diff -- :/ ":(exclude,top)$CS_PROTO_PATH/*.meta" > ../artifacts/proto.patch; exit $GIT_ERR; } + triggers: + cancel_old_ci: true + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "protobuf-definitions/**" OR + pull_request.changes.any match "com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/**" OR + pull_request.changes.any match "ml-agents-envs/mlagents_envs/communicator_objects/**" OR + pull_request.changes.any match ".yamato/protobuf-generation-test.yml") AND + NOT pull_request.changes.all match "protobuf-definitions/**/*.md" + artifacts: + patch: + paths: + - "artifacts/*.*" diff --git a/.yamato/pytest-gpu.yml b/.yamato/pytest-gpu.yml new file mode 100644 index 0000000000000000000000000000000000000000..99999ca224ee967bff548ae74362cc5ebbdd46db --- /dev/null +++ b/.yamato/pytest-gpu.yml @@ -0,0 +1,32 @@ +pytest_gpu: + name: Pytest GPU + agent: + type: Unity::VM::GPU + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.large + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python3 -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python3 -u -m ml-agents.tests.yamato.setup_venv + python3 -m pip install --progress-bar=off -r test_requirements.txt --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python3 -m pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + if python -c "exec('import torch \nif not torch.cuda.is_available(): raise')" &> /dev/null; then + echo 'all good' + else + exit 1 + fi + python3 -m pytest -m "not slow" --junitxml=junit/test-results.xml -p no:warnings + triggers: + cancel_old_ci: true + expression: | + (push.branch eq "main" OR + push.branch eq "develop" OR + push.branch match "release.+") AND + push.changes.any match "ml-agents/**" AND + NOT push.changes.all match "**/*.md" + artifacts: + logs: + paths: + - "artifacts/standalone_build.txt" diff --git a/.yamato/python-ll-api-test.yml b/.yamato/python-ll-api-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..cde94d31fb80c2922e9b27f5d7f86b96572a46bf --- /dev/null +++ b/.yamato/python-ll-api-test.yml @@ -0,0 +1,39 @@ +{% metadata_file .yamato/test_versions.metafile %} +--- +{% for editor in test_editors %} +test_linux_ll_api_{{ editor.version }}: + name: Test Linux LL-API {{ editor.version }} + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.medium + variables: + UNITY_VERSION: {{ editor.version }} + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python -u -m ml-agents.tests.yamato.setup_venv + python ml-agents/tests/yamato/scripts/run_llapi.py + python ml-agents/tests/yamato/scripts/run_llapi.py --env=artifacts/testPlayer-Basic + python ml-agents/tests/yamato/scripts/run_llapi.py --env=artifacts/testPlayer-WallJump + python ml-agents/tests/yamato/scripts/run_llapi.py --env=artifacts/testPlayer-Match3 + dependencies: + - .yamato/standalone-build-test.yml#test_linux_standalone_{{ editor.version }} + triggers: + cancel_old_ci: true + {% if editor.extra_test == "llapi" %} + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match "Project/**" OR + pull_request.changes.any match "ml-agents/tests/yamato/**" OR + pull_request.changes.any match "ml-agents-envs/**" OR + pull_request.changes.any match ".yamato/python-ll-api-test.yml") AND + NOT pull_request.changes.all match "**/*.md" + {% endif %} +{% endfor %} diff --git a/.yamato/sonar-python-package.yml b/.yamato/sonar-python-package.yml new file mode 100644 index 0000000000000000000000000000000000000000..a087afe56ab6fe8c9cce289baf8dce992317ca15 --- /dev/null +++ b/.yamato/sonar-python-package.yml @@ -0,0 +1,21 @@ +csharp: + name: Sonarqube Scan for ml-agents python repo + agent: + type: Unity::metal::macmini + image: package-ci/mac:v1.8.1-822785 + flavor: m1.mac + variables: + SONARQUBE_PROJECT_KEY: ai-ml-agents-toolkit + TARGET_BRANCH: develop + commands: + - npm install shellcheck --save-dev + - npm install upm-ci-utils@1.27.0 -g --registry https://artifactory.prd.it.unity3d.com/artifactory/api/npm/upm-npm + - curl https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-macosx.zip -o sonar-scanner-cli-macosx.zip -L + - unzip sonar-scanner-cli-macosx.zip -d ~/sonar-scanner-cli + - ~/sonar-scanner-cli/sonar-scanner-4.7.0.2747-macosx/bin/sonar-scanner -Dsonar.projectKey=$SONARQUBE_PROJECT_KEY -Dsonar.sources=ml-agents-env -Dsonar.sources=ml-agents -Dsonar.sources=ml-agents-plugin-examples -Dsonar.sources=ml-agents-trainer-plugin -Dsonar.sources=utils -Dsonar.host.url=$SONARQUBE_URL -Dsonar.login=$SONARQUBE_TOKEN -Dsonar.branch.name=$TARGET_BRANCH -Dsonar.scm.provider=git + triggers: + cancel_old_ci: true + expression: | + ((pull_request.target eq "main" OR pull_request.target eq "develop" OR pull_request.target match "release.+") + AND NOT pull_request.push.changes.all match "**/*.md") OR + (push.branch eq "main" OR push.branch eq "develop") diff --git a/.yamato/standalone-build-test.yml b/.yamato/standalone-build-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..fac93943e9647f2493f430b75d9b628833da7866 --- /dev/null +++ b/.yamato/standalone-build-test.yml @@ -0,0 +1,44 @@ +{% metadata_file .yamato/test_versions.metafile %} +--- +{% for editor in test_editors %} +test_linux_standalone_{{ editor.version }}: + name: Test Linux Standalone {{ editor.version }} + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.large + variables: + UNITY_VERSION: {{ editor.version }} + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python3 -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python3 -m pip install unity-downloader-cli --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple --upgrade + unity-downloader-cli -u {{ editor.version }} -c editor --wait --fast + python3 -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=linux + python3 -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=linux --scene=Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity + python3 -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=linux --scene=Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity + python3 -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=linux --scene=Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity + python3 -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=linux --scene=Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity + python3 -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=linux --scene=Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity + triggers: + cancel_old_ci: true + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match "com.unity.ml-agents.extensions/**" OR + pull_request.changes.any match ".yamato/standalone-build-test.yml") AND + NOT pull_request.changes.all match "**/*.md" + artifacts: + logs: + paths: + - "artifacts/standalone_build.txt" + standalonebuild: + paths: + - "artifacts/testPlayer*/**" + - "artifacts/**/UnityPlayer.so" +{% endfor %} diff --git a/.yamato/standalone-build-webgl-test.yml b/.yamato/standalone-build-webgl-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..9c7ad0156e56077bcf4b3b497bfee3060590ed13 --- /dev/null +++ b/.yamato/standalone-build-webgl-test.yml @@ -0,0 +1,30 @@ +{% capture editor_version %}2022.3{% endcapture %} +test_webgl_standalone_{{ editor_version }}: + name: Test WebGL Standalone {{ editor_version }} + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.large + variables: + UNITY_VERSION: {{ editor_version }} + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python -m pip install unity-downloader-cli --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple --upgrade + unity-downloader-cli -u {{ editor_version }} -c editor -c WebGL --wait --fast + python -u -m ml-agents.tests.yamato.standalone_build_tests --build-target=webgl + triggers: + cancel_old_ci: true + recurring: + - branch: develop + frequency: weekly + artifacts: + logs: + paths: + - "artifacts/standalone_build.txt" + standalonebuild: + paths: + - "artifacts/testPlayer*/**" + - "artifacts/**/UnityPlayer.so" diff --git a/.yamato/test_versions.metafile b/.yamato/test_versions.metafile new file mode 100644 index 0000000000000000000000000000000000000000..853348e5ba8c92ef62cadc9fed452ada05c7a264 --- /dev/null +++ b/.yamato/test_versions.metafile @@ -0,0 +1,11 @@ +# List of editor versions for standalone-build-test and its dependencies. +# We always run training-int-tests for all versions of the editor +# For each "other" test, we only run it against a single version of the +# editor to reduce the number of yamato jobs +test_editors: + - version: 2022.3 + extra_test: gym + - version: 2023.1 + extra_test: sensor + - version: trunk + extra_test: llapi diff --git a/.yamato/training-int-tests.yml b/.yamato/training-int-tests.yml new file mode 100644 index 0000000000000000000000000000000000000000..18f5f4f83dbae2012439ba3d8488f5a41c3b41d6 --- /dev/null +++ b/.yamato/training-int-tests.yml @@ -0,0 +1,44 @@ +{% metadata_file .yamato/test_versions.metafile %} +--- +{% for editor in test_editors %} +test_linux_training_int_{{ editor.version }}: + name: Test Linux Fast Training {{ editor.version }} + agent: + type: Unity::VM + image: ml-agents/ml-agents-ubuntu-18.04:latest + flavor: b1.medium + variables: + UNITY_VERSION: {{ editor.version }} + commands: + - | + eval "$($HOME/anaconda/bin/conda shell.bash hook)" + conda activate python3.8 + python -m pip install pyyaml --index-url https://artifactory.prd.it.unity3d.com/artifactory/api/pypi/pypi/simple + python -u -m ml-agents.tests.yamato.training_int_tests + dependencies: + - .yamato/standalone-build-test.yml#test_linux_standalone_{{ editor.version }} + triggers: + cancel_old_ci: true + expression: | + (pull_request.target eq "main" OR + pull_request.target eq "develop" OR + pull_request.target match "release.+") AND + NOT pull_request.draft AND + (pull_request.changes.any match "com.unity.ml-agents/**" OR + pull_request.changes.any match "com.unity.ml-agents.extensions/**" OR + pull_request.changes.any match "Project/**" OR + pull_request.changes.any match "ml-agents/**" OR + pull_request.changes.any match "ml-agents-envs/**" OR + pull_request.changes.any match ".yamato/training-int-tests.yml") AND + NOT pull_request.changes.all match "**/*.md" + artifacts: + logs: + paths: + - "artifacts/standalone_build.txt" + - "artifacts/inference.nn.txt" + - "artifacts/inference.onnx.txt" + standalonebuild: + paths: + - "artifacts/testPlayer*/**" + - "artifacts/models/**" +{% endfor %} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..24853b18dfdfd568debece8faedbe04dcb455c3e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at ml-agents@unity3d.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct/ + +[homepage]: https://www.contributor-covenant.org diff --git a/DevProject/.gitignore b/DevProject/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..589d937759140de790a1ff4111981476783d217b --- /dev/null +++ b/DevProject/.gitignore @@ -0,0 +1,71 @@ +/[Ll]ibrary/ +/Logs/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/Assets/AssetStoreTools* +/Assets/Plugins* +/Assets/Demonstrations* +/Assets/ML-Agents/Timers* +/csharp_timers.json +/CodeCoverage/ + +# Environemnt logfile +*Project.log + +# Visual Studio 2015 cache directory +/.vs/ + +# Autogenerated VS/MD/Consulo solution and project files +/ProjectExportedObj/ +/Project.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb + +# Unity3D generated meta files +*.pidb.meta + +# Unity3D Generated File On Crash Reports +/sysinfo.txt + +# Builds +*.apk +*.unitypackage +*.app +*.exe +*.x86_64 +*.x86 + +# Plugins +/Assets/VideoRecorder* + +# Mac hidden files +*.DS_Store +*/.ipynb_checkpoints +*/.idea +*.pyc +*.idea/misc.xml +*.idea/modules.xml +*.idea/ +*.iml +*.cache +*/build/ +*/dist/ +*.egg-info* +*.eggs* +*.gitignore.swp + +# VSCode hidden files +*.vscode/ + +.DS_Store diff --git a/DevProject/Assets/ML-Agents.meta b/DevProject/Assets/ML-Agents.meta new file mode 100644 index 0000000000000000000000000000000000000000..9aec7896429527ef4334fddb4cf5e6c1a3fec87e --- /dev/null +++ b/DevProject/Assets/ML-Agents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8498a7556d0b348cbaff70bd8635db8b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts.meta b/DevProject/Assets/ML-Agents/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..664ce4a064737d03a15c31149ad635e408860d77 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45f48c01abd5d47048bc3edcc6db1dd0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests.meta b/DevProject/Assets/ML-Agents/Scripts/Tests.meta new file mode 100644 index 0000000000000000000000000000000000000000..bfb93955f2dd292b5a3bc75dbed75bb03068494e --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb96b88fc6ae14a41949d1bd75e68d38 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c4107a279443d0c046af59cdad791e3ec004205 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc5370caac53244599df51d5c6d39876 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Editor.asmdef b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..afb10a33a3c21956b3c8528121c7a726dee69e74 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Editor.asmdef @@ -0,0 +1,28 @@ +{ + "name": "Unity.ML-Agents.DevTests.Editor", + "references": [ + "Unity.ML-Agents.Editor", + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects", + "Unity.PerformanceTesting" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll", + "Google.Protobuf.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ] +} diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Editor.asmdef.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c27e9177e2b67d9a6fe8092a3efb48d005e1ebc --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5b142e67c2d6b4b1e928e4d54f01a596 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings.meta new file mode 100644 index 0000000000000000000000000000000000000000..8fb18e96f11cf1e3921edd57e1af76bcfceb4dc4 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fc80f44976bc4177a9afaa0a38abab3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings/MLAgentsSettingsTests.cs b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings/MLAgentsSettingsTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..c2dd8db42c6a7aceb7b67ed09827486f269cdbdc --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings/MLAgentsSettingsTests.cs @@ -0,0 +1,171 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using UnityEditor; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Editor; + + +namespace MLAgentsExamples.Tests.Settings +{ + [TestFixture] + public class MLAgentsSettingsTests + { + string EditorBuildSettingsConfigKey = MLAgentsSettingsManager.EditorBuildSettingsConfigKey; + string tempSettingsRootPath = "Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings"; + MLAgentsSettings storedConfigObject; + [SetUp] + public void SetUp() + { + if (EditorBuildSettings.TryGetConfigObject(EditorBuildSettingsConfigKey, + out MLAgentsSettings settingsAsset)) + { + if (settingsAsset != null) + { + storedConfigObject = settingsAsset; + EditorBuildSettings.RemoveConfigObject(EditorBuildSettingsConfigKey); + } + } + MLAgentsSettingsManager.Destroy(); + ClearSettingsAssets(); + } + + [TearDown] + public void TearDown() + { + if (storedConfigObject != null) + { + EditorBuildSettings.AddConfigObject(EditorBuildSettingsConfigKey, storedConfigObject, true); + storedConfigObject = null; + } + MLAgentsSettingsManager.Destroy(); + ClearSettingsAssets(); + } + + internal void ClearSettingsAssets() + { + var assetsGuids = AssetDatabase.FindAssets("t:MLAgentsSettings", new string[] { tempSettingsRootPath }); + foreach (var guid in assetsGuids) + { + var path = AssetDatabase.GUIDToAssetPath(guid); + AssetDatabase.DeleteAsset(path); + } + } + + [Test] + public void TestMLAgentsSettingsManager() + { + Assert.AreNotEqual(null, MLAgentsSettingsManager.Settings); + Assert.AreEqual(5004, MLAgentsSettingsManager.Settings.EditorPort); // default port + MLAgentsSettingsManager.Settings.EditorPort = 6000; + Assert.AreEqual(6000, MLAgentsSettingsManager.Settings.EditorPort); + + var settingsObject = ScriptableObject.CreateInstance(); + settingsObject.EditorPort = 7000; + var tempSettingsAssetPath = tempSettingsRootPath + "/test.mlagents.settings.asset"; + AssetDatabase.CreateAsset(settingsObject, tempSettingsAssetPath); + EditorBuildSettings.AddConfigObject(EditorBuildSettingsConfigKey, settingsObject, true); + // destroy manager instantiated as a side effect by accessing MLAgentsSettings directly without manager + MLAgentsSettingsManager.Destroy(); + Assert.AreEqual(7000, MLAgentsSettingsManager.Settings.EditorPort); + } + + // A mock class that can invoke private methods/fields in MLAgentsSettingsProvider + internal class MockSettingsProvider + { + public MLAgentsSettingsProvider Instance + { + get + { + return (MLAgentsSettingsProvider)typeof(MLAgentsSettingsProvider).GetField("s_Instance", + BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); + } + } + + public MLAgentsSettings Settings + { + get + { + return (MLAgentsSettings)typeof(MLAgentsSettingsProvider).GetField("m_Settings", + BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Instance); + } + } + + public void CreateMLAgentsSettingsProvider() + { + MLAgentsSettingsProvider.CreateMLAgentsSettingsProvider(); + } + + public void Reinitialize() + { + var method = typeof(MLAgentsSettingsProvider).GetMethod("Reinitialize", + BindingFlags.Instance | BindingFlags.NonPublic); + method.Invoke(Instance, null); + } + + public string[] FindSettingsInProject() + { + var method = typeof(MLAgentsSettingsProvider).GetMethod("FindSettingsInProject", + BindingFlags.Static | BindingFlags.NonPublic); + return (string[])method.Invoke(null, null); + } + + public void CreateNewSettingsAsset(string relativePath) + { + var method = typeof(MLAgentsSettingsProvider).GetMethod("CreateNewSettingsAsset", + BindingFlags.Static | BindingFlags.NonPublic); + method.Invoke(null, new object[] { relativePath }); + } + } + + [Test] + public void TestMLAgentsSettingsProviderCreateAsset() + { + var mockProvider = new MockSettingsProvider(); + mockProvider.CreateMLAgentsSettingsProvider(); + Assert.AreNotEqual(null, mockProvider.Instance); + + // mimic MLAgentsSettingsProvider.OnActivate() + MLAgentsSettingsManager.OnSettingsChange += mockProvider.Reinitialize; + + mockProvider.Instance.InitializeWithCurrentSettings(); + Assert.AreEqual(0, mockProvider.FindSettingsInProject().Length); + + var tempSettingsAssetPath1 = tempSettingsRootPath + "/test.mlagents.settings.asset"; + mockProvider.CreateNewSettingsAsset(tempSettingsAssetPath1); + Assert.AreEqual(1, mockProvider.FindSettingsInProject().Length); + Assert.AreEqual(5004, mockProvider.Settings.EditorPort); + MLAgentsSettingsManager.Settings.EditorPort = 6000; // change to something not default + // callback should update the field in provider + Assert.AreEqual(6000, mockProvider.Settings.EditorPort); + + var tempSettingsAssetPath2 = tempSettingsRootPath + "/test2.mlagents.settings.asset"; + mockProvider.CreateNewSettingsAsset(tempSettingsAssetPath2); + Assert.AreEqual(2, mockProvider.FindSettingsInProject().Length); + // manager should set to the new (default) one, not the previous modified one + Assert.AreEqual(5004, MLAgentsSettingsManager.Settings.EditorPort); + + // mimic MLAgentsSettingsProvider.OnDeactivate() + MLAgentsSettingsManager.OnSettingsChange -= mockProvider.Reinitialize; + mockProvider.Instance.Dispose(); + } + + [Test] + public void TestMLAgentsSettingsProviderLoadAsset() + { + var mockProvider = new MockSettingsProvider(); + var tempSettingsAssetPath1 = tempSettingsRootPath + "/test.mlagents.settings.asset"; + mockProvider.CreateNewSettingsAsset(tempSettingsAssetPath1); + MLAgentsSettingsManager.Settings.EditorPort = 8000; // change to something not default + + mockProvider.Instance?.Dispose(); + MLAgentsSettingsManager.Destroy(); + + mockProvider.CreateMLAgentsSettingsProvider(); + Assert.AreEqual(8000, MLAgentsSettingsManager.Settings.EditorPort); + } + } +} diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings/MLAgentsSettingsTests.cs.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings/MLAgentsSettingsTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0fcf1cef0dd9af0c88d059f616d63c2e0b6e5b06 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/MLAgentsSettings/MLAgentsSettingsTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44777c287385449678640ce8e4acc3ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance.meta new file mode 100644 index 0000000000000000000000000000000000000000..a9852ddda73dcc418f2ea90d1f1749736bbc8b32 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb5960f38a3fc42e8a6b52c9bf47d83d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance/SensorPerformanceTests.cs b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance/SensorPerformanceTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1e113a1ad3d1723912b2b288c43bd56ed90061b --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance/SensorPerformanceTests.cs @@ -0,0 +1,195 @@ +using NUnit.Framework; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; +using Unity.PerformanceTesting; +using UnityEngine; + +namespace MLAgentsExamples.Tests.Performance +{ + [TestFixture] + public class SensorPerformanceTests + { + string[] s_Markers = + { + "root.InitializeSensors", + "root.AgentSendState.CollectObservations", + "root.AgentSendState.RequestDecision" + }; + const int k_NumAgentSteps = 10; + const int k_MeasurementCount = 25; + const int k_MarkerTestSteps = 10; + + [SetUp] + public void SetUp() + { + // Step a dummy agent here, so that we don't time the Academy initialization connection attempt and + // any other static setup costs. + RunAgent(1, 0, ObservableAttributeOptions.ExamineAll); + } + + /// + /// Simple Agent just used for "burning in" the Academy for testing. + /// + class DummyAgent : Agent + { + public override void CollectObservations(VectorSensor sensor) + { + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + } + } + + /// + /// Agent used for performance testing that uses the CollectObservations interface. + /// + class CollectObservationsAgent : Agent + { + public override void CollectObservations(VectorSensor sensor) + { + sensor.AddObservation(new Vector3(1, 2, 3)); + sensor.AddObservation(new Quaternion(1, 2, 3, 4)); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + } + } + + /// + /// Agent used for performance testing that uses the ObservableAttributes on fields. + /// + class ObservableFieldAgent : Agent + { + [Observable] + public Vector3 Vector3Field = new Vector3(1, 2, 3); + + [Observable] + public Quaternion QuaternionField = new Quaternion(1, 2, 3, 4); + + public override void Heuristic(in ActionBuffers actionsOut) + { + } + } + + /// + /// Agent used for performance testing that uses the ObservableAttributes on properties. + /// + class ObservablePropertyAgent : Agent + { + Vector3 m_Vector3Field = new Vector3(1, 2, 3); + + [Observable] + Vector3 Vector3Property + { + get { return m_Vector3Field; } + } + + Quaternion m_QuaternionField = new Quaternion(1, 2, 3, 4); + + [Observable] + Quaternion QuaternionProperty + { + get { return m_QuaternionField; } + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + } + } + + void RunAgent(int numSteps, int obsSize, ObservableAttributeOptions obsOptions) where T : Agent + { + var agentGameObj = new GameObject(); + var agent = agentGameObj.AddComponent(); + + var behaviorParams = agent.GetComponent(); + behaviorParams.BrainParameters.VectorObservationSize = obsSize; + behaviorParams.ObservableAttributeHandling = obsOptions; + agent.Awake(); + agent.LazyInitialize(); + for (var i = 0; i < numSteps; i++) + { + agent.RequestDecision(); + Academy.Instance.EnvironmentStep(); + } + Object.DestroyImmediate(agentGameObj); + } + + [Test, Performance] + public void TestCollectObservationsAgent() + { + Measure.Method(() => + { + RunAgent(k_NumAgentSteps, 7, ObservableAttributeOptions.Ignore); + }) + .MeasurementCount(k_MeasurementCount) + .GC() + .Run(); + } + + [Test, Performance] + public void TestObservableFieldAgent() + { + Measure.Method(() => + { + RunAgent(k_NumAgentSteps, 0, ObservableAttributeOptions.ExcludeInherited); + }) + .MeasurementCount(k_MeasurementCount) + .GC() + .Run(); + } + + [Test, Performance] + public void TestObservablePropertyAgent() + { + Measure.Method(() => + { + RunAgent(k_NumAgentSteps, 0, ObservableAttributeOptions.ExcludeInherited); + }) + .MeasurementCount(k_MeasurementCount) + .GC() + .Run(); + } + + [Test, Performance] + public void TestCollectObservationsAgentMarkers() + { + using (Measure.ProfilerMarkers(s_Markers)) + { + for (var i = 0; i < k_MarkerTestSteps; i++) + { + RunAgent(k_NumAgentSteps, 7, ObservableAttributeOptions.Ignore); + } + } + } + + [Test, Performance] + public void TestObservableFieldAgentMarkers() + { + using (Measure.ProfilerMarkers(s_Markers)) + { + for (var i = 0; i < k_MarkerTestSteps; i++) + { + RunAgent(k_NumAgentSteps, 0, ObservableAttributeOptions.ExcludeInherited); + } + } + } + + [Test, Performance] + public void TestObservablePropertyAgentMarkers() + { + using (Measure.ProfilerMarkers(s_Markers)) + { + for (var i = 0; i < k_MarkerTestSteps; i++) + { + RunAgent(k_NumAgentSteps, 0, ObservableAttributeOptions.ExcludeInherited); + } + } + } + } +} diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance/SensorPerformanceTests.cs.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance/SensorPerformanceTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5945b01951ff6f09a3ea96055c87b416a1808449 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Editor/Performance/SensorPerformanceTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c11a031f0b2d94ec3a90c1bd54713399 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime.meta new file mode 100644 index 0000000000000000000000000000000000000000..5b7b31c463386590146f6c0811211c6e46b8e05e --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 216d926b40df54befbf2bed34587444d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest.meta new file mode 100644 index 0000000000000000000000000000000000000000..e6d6569c66d6fe76b23cbbe82f75fe42b916e7ad --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a36f098f1b304456cb2edcb3719fa416 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTest.cs b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..d69fdef76a924a87001c47091c7a904f5ab17eed --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTest.cs @@ -0,0 +1,40 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine.TestTools; +using UnityEngine; +using UnityEngine.SceneManagement; +using Unity.MLAgents; +#if UNITY_EDITOR +using UnityEditor.SceneManagement; +#endif + +namespace Tests +{ + public class AcademyStepperTest + { + [SetUp] + public void Setup() + { + // We need register the communicator first before accessing the Academy. + CommunicatorFactory.Register(RpcCommunicator.Create); + Academy.Instance.Dispose(); + SceneManager.LoadScene("ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene"); + var academy = Academy.Instance; + } + + /// + /// Verify in each update, the Academy is only stepped once. + /// + [UnityTest] + public IEnumerator AcademyStepperCleanupPasses() + { + var academy = Academy.Instance; + int initStepCount = academy.TotalStepCount; + for (var i = 0; i < 5; i++) + { + yield return new WaitForFixedUpdate(); + Assert.True(academy.TotalStepCount - initStepCount == i + 1); + } + } + } +} diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTest.cs.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..53c36b14ac93b2df44d3186284294180956a1e14 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acf0056574b054463a787f33ac6f4f59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity new file mode 100644 index 0000000000000000000000000000000000000000..1486ca4f31af6e783377d2195696c6ebde585c80 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity @@ -0,0 +1,385 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &187484343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 187484345} + - component: {fileID: 187484344} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &187484344 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187484343} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &187484345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187484343} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!115 &539349017 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 5 + m_Script: + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_ExecutionOrder: 0 + m_ClassName: AcademyFixedUpdateStepper + m_Namespace: Unity.MLAgents +--- !u!1 &617287731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 617287733} + - component: {fileID: 617287732} + m_Layer: 0 + m_Name: AcademyFixedUpdateStepperLeaked + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &617287732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617287731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 539349017} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &617287733 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617287731} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1058198914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1058198917} + - component: {fileID: 1058198916} + - component: {fileID: 1058198915} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1058198915 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058198914} + m_Enabled: 1 +--- !u!20 &1058198916 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058198914} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1058198917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058198914} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1875138784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1875138786} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1875138786 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875138784} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..5fdf5de3444454fff08b4c0ab2fc84d9aa149298 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9bafc50b1e55b43b2b1ae9620f1f8311 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/Runtime.asmdef b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/Runtime.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..8edcf7c4c1ba62ecf0bb0674ce3c63c3301089d7 --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/Runtime.asmdef @@ -0,0 +1,21 @@ +{ + "name": "Unity.ML-Agents.DevTests.Runtime", + "references": [ + "Unity.ML-Agents" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll", + "Google.Protobuf.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ] +} diff --git a/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/Runtime.asmdef.meta b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/Runtime.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..6d864ffb9fc82a82a3fff8045e7e7794f33249db --- /dev/null +++ b/DevProject/Assets/ML-Agents/Scripts/Tests/Runtime/Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ce87dece2ef3488c983d27b05720aa2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/csc.rsp b/DevProject/Assets/csc.rsp new file mode 100644 index 0000000000000000000000000000000000000000..ddc521a6358b6a0a557220b377180d0768776280 --- /dev/null +++ b/DevProject/Assets/csc.rsp @@ -0,0 +1,2 @@ +-warnaserror+ +-warnaserror-:618 diff --git a/DevProject/Assets/csc.rsp.meta b/DevProject/Assets/csc.rsp.meta new file mode 100644 index 0000000000000000000000000000000000000000..78f5988b11ec04692fa13777e73e25115152d300 --- /dev/null +++ b/DevProject/Assets/csc.rsp.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a867228d11c914383b374dc178415a0f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/Assets/placeholder.txt b/DevProject/Assets/placeholder.txt new file mode 100644 index 0000000000000000000000000000000000000000..34c92c2d93d8cdb680b66118dd37551caa0b4a25 --- /dev/null +++ b/DevProject/Assets/placeholder.txt @@ -0,0 +1 @@ +lorem ipsum \ No newline at end of file diff --git a/DevProject/Assets/placeholder.txt.meta b/DevProject/Assets/placeholder.txt.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7ae8523e6cec6acc1f5257e8626ac7fd7832767 --- /dev/null +++ b/DevProject/Assets/placeholder.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 702d33154db334c689920b2b91b7f5b9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/DevProject/DevProject.sln.DotSettings b/DevProject/DevProject.sln.DotSettings new file mode 100644 index 0000000000000000000000000000000000000000..742a566dcd09aa455fba3e1dd41277318a029932 --- /dev/null +++ b/DevProject/DevProject.sln.DotSettings @@ -0,0 +1,2 @@ + + RL diff --git a/DevProject/Packages/manifest.json b/DevProject/Packages/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..467b9909f1249c225582d78cd1e2fb41bb754b80 --- /dev/null +++ b/DevProject/Packages/manifest.json @@ -0,0 +1,26 @@ +{ + "dependencies": { + "com.unity.ai.navigation": "1.1.4", + "com.unity.coding": "0.1.0-preview.13", + "com.unity.inputsystem": "1.6.1", + "com.unity.ml-agents": "file:../../com.unity.ml-agents", + "com.unity.ml-agents.extensions": "file:../../com.unity.ml-agents.extensions", + "com.unity.package-manager-doctools": "1.10.0-preview", + "com.unity.package-validation-suite": "0.23.4-preview", + "com.unity.test-framework": "1.1.33", + "com.unity.test-framework.performance": "2.2.0-preview", + "com.unity.testtools.codecoverage": "1.2.4", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0" + }, + "registry": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates", + "testables": [ + "com.unity.ml-agents", + "com.unity.ml-agents.extensions", + "com.unity.inputsystem" + ] +} diff --git a/DevProject/Packages/packages-lock.json b/DevProject/Packages/packages-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..d21933540c42b7716cabba36b20aa920b446d5ab --- /dev/null +++ b/DevProject/Packages/packages-lock.json @@ -0,0 +1,247 @@ +{ + "dependencies": { + "com.unity.ai.navigation": { + "version": "1.1.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.ai": "1.0.0" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.barracuda": { + "version": "3.0.0", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.6.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.burst": { + "version": "1.8.7", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.coding": { + "version": "0.1.0-preview.13", + "depth": 0, + "source": "registry", + "dependencies": { + "nuget.moq": "1.0.0" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.inputsystem": { + "version": "1.6.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.mathematics": { + "version": "1.2.6", + "depth": 3, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.ml-agents": { + "version": "file:../../com.unity.ml-agents", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.barracuda": "3.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.ml-agents.extensions": { + "version": "file:../../com.unity.ml-agents.extensions", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.ml-agents": "2.3.0-exp.4", + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.nuget.mono-cecil": { + "version": "1.11.4", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.1", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.package-manager-doctools": { + "version": "1.10.0-preview", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.package-validation-suite": "0.19.2-preview", + "com.unity.nuget.newtonsoft-json": "2.0.0-preview", + "com.unity.sharp-zip-lib": "1.2.2-preview" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.package-validation-suite": { + "version": "0.23.4-preview", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.nuget.mono-cecil": "0.1.6-preview.2" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.settings-manager": { + "version": "2.0.1", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.sharp-zip-lib": { + "version": "1.2.2-preview", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.test-framework.performance": { + "version": "2.2.0-preview", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.0", + "com.unity.nuget.newtonsoft-json": "2.0.0-preview" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.testtools.codecoverage": { + "version": "1.2.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.0.16", + "com.unity.settings-manager": "1.0.1" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "nuget.castle-core": { + "version": "1.0.1", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "nuget.moq": { + "version": "1.0.0", + "depth": 1, + "source": "registry", + "dependencies": { + "nuget.castle-core": "1.0.1" + }, + "url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + } + } +} diff --git a/DevProject/ProjectSettings/AudioManager.asset b/DevProject/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..27287fec5f4e4b712cbdd5b3a6383cbfd900b940 --- /dev/null +++ b/DevProject/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 0 diff --git a/DevProject/ProjectSettings/ClusterInputManager.asset b/DevProject/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..e7886b266a005f4d9d80f2fef8d1649dcfd3ed2b --- /dev/null +++ b/DevProject/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/DevProject/ProjectSettings/DynamicsManager.asset b/DevProject/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..3804581c18749b389f05c9df8e4b843203806062 --- /dev/null +++ b/DevProject/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 14 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_DefaultMaxDepenetrationVelocity: 10 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0.1 + m_ClothInterCollisionStiffness: 0.2 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_SimulationMode: 0 + m_AutoSyncTransforms: 1 + m_ReuseCollisionCallbacks: 1 + m_InvokeCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ClothGravity: {x: 0, y: -9.81, z: 0} + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_ImprovedPatchFriction: 0 + m_SolverType: 0 + m_DefaultMaxAngularSpeed: 50 diff --git a/DevProject/ProjectSettings/EditorBuildSettings.asset b/DevProject/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..6aebd17d9031cc0a2148fc9ad8f44602614d8e91 --- /dev/null +++ b/DevProject/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/ML-Agents/Scripts/Tests/Runtime/AcademyTest/AcademyStepperTestScene.unity + guid: 9bafc50b1e55b43b2b1ae9620f1f8311 + m_configObjects: + com.unity.ml-agents.settings: {fileID: 11400000, guid: b412e5eb0b23f4bca86655ada9a633d4, + type: 2} diff --git a/DevProject/ProjectSettings/EditorSettings.asset b/DevProject/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..2e97aa9945bdb0233938497d10eeb5e304e0b6a6 --- /dev/null +++ b/DevProject/ProjectSettings/EditorSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 1 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_AssetPipelineMode: 1 + m_CacheServerMode: 0 + m_CacheServerEndpoint: + m_CacheServerNamespacePrefix: default + m_CacheServerEnableDownload: 1 + m_CacheServerEnableUpload: 1 diff --git a/DevProject/ProjectSettings/GraphicsSettings.asset b/DevProject/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..35a0fa7fd4b7d99965b14bf1e4d0f50c0b40ddaf --- /dev/null +++ b/DevProject/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,64 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/DevProject/ProjectSettings/InputManager.asset b/DevProject/ProjectSettings/InputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..17c8f538e2152c0a0310b4870979eeecece2153c --- /dev/null +++ b/DevProject/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/DevProject/ProjectSettings/NavMeshAreas.asset b/DevProject/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000000000000000000000000000000000000..3b0b7c3d183abdd300112f56965916ef11667f54 --- /dev/null +++ b/DevProject/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/DevProject/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/DevProject/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..dea1af3839b3899c0eea516a8dc215ea119122a0 --- /dev/null +++ b/DevProject/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,21 @@ +{ + "m_Dictionary": { + "m_DictionaryValues": [ + { + "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "Path", + "value": "{\"m_Value\":\"{ProjectPath}\"}" + }, + { + "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "HistoryPath", + "value": "{\"m_Value\":\"{ProjectPath}\"}" + }, + { + "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "IncludeAssemblies", + "value": "{\"m_Value\":\"Assembly-CSharp,Runtime,Unity.ML-Agents,Unity.ML-Agents.Extensions\"}" + } + ] + } +} \ No newline at end of file diff --git a/DevProject/ProjectSettings/Physics2DSettings.asset b/DevProject/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..6c5cf8a004ac48f27cb36f7cdea139eb4d3e812f --- /dev/null +++ b/DevProject/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 0 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/DevProject/ProjectSettings/PresetManager.asset b/DevProject/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..67a94daefe2e6bce3ec73546ad7cda94f702ad22 --- /dev/null +++ b/DevProject/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/DevProject/ProjectSettings/ProjectSettings.asset b/DevProject/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..9370d8272f869b489a4b129fbd789bc3f93db1a5 --- /dev/null +++ b/DevProject/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,608 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 20 + productGUID: dd640d0be7b6a47f5b10f8096b165154 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: DevProject + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 0 + androidBlitType: 0 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 1048576 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnableLateAcquireNextImage: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 1.0 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + cardboard: + depthFormat: 0 + enableTransitionView: 0 + daydream: + depthFormat: 0 + useSustainedPerformanceMode: 0 + enableVideoLayer: 0 + useProtectedVideoMemory: 0 + minimumSupportedHeadTracking: 0 + maximumSupportedHeadTracking: 1 + hololens: + depthFormat: 1 + depthBufferSharingEnabled: 1 + lumin: + depthFormat: 0 + frameTiming: 2 + enableGLCache: 0 + glCacheMaxBlobSize: 524288 + glCacheMaxFileSize: 8388608 + oculus: + sharedDepthBuffer: 1 + dashSupport: 1 + lowOverheadMode: 0 + protectedContext: 0 + v2Signing: 1 + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + useHDRDisplay: 0 + D3DHDRBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: {} + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 19 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 10.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 10.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSUseLaunchScreenStoryboard: 0 + iOSLaunchScreenCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + clonedFromGUID: 00000000000000000000000000000000 + templatePackageId: + templateDefaultScene: + AndroidTargetArchitectures: 1 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: [] + m_BuildTargetGraphicsJobs: [] + m_BuildTargetGraphicsJobMode: [] + m_BuildTargetGraphicsAPIs: [] + m_BuildTargetVRSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 2 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: 9PM6Dph2Nh722AggBfUKJEdmm09Z1uFI + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 2 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 32 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLWasmStreaming: 0 + scriptingDefineSymbols: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + allowUnsafeCode: 0 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 0 + assemblyVersionValidation: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: DevProject + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: DevProject + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: + daydream: + daydreamIconForeground: {fileID: 0} + daydreamIconBackground: {fileID: 0} + cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + apiCompatibilityLevel: 6 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + projectName: + organizationId: + cloudEnabled: 0 + enableNativePlatformBackendsForNewInputSystem: 1 + disableOldInputManagerSupport: 1 + legacyClampBlendShapeWeights: 0 diff --git a/DevProject/ProjectSettings/ProjectVersion.txt b/DevProject/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000000000000000000000000000000000000..e7e2f19822a9ff58f914c5bef1f3c55c004b1c41 --- /dev/null +++ b/DevProject/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2022.3.4f1 +m_EditorVersionWithRevision: 2022.3.4f1 (35713cd46cd7) diff --git a/DevProject/ProjectSettings/QualitySettings.asset b/DevProject/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..d24eb10c1bf70910c2b561d668a701fc7641be8e --- /dev/null +++ b/DevProject/ProjectSettings/QualitySettings.asset @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 255 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + Nintendo Switch: 5 + PS4: 5 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/DevProject/ProjectSettings/TagManager.asset b/DevProject/ProjectSettings/TagManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..1c92a7840ec11895c76785f65d949a3d20d53355 --- /dev/null +++ b/DevProject/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/DevProject/ProjectSettings/TimeManager.asset b/DevProject/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..558a017e1f50b2db73414a1abad3c033922774f8 --- /dev/null +++ b/DevProject/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/DevProject/ProjectSettings/UnityConnectSettings.asset b/DevProject/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..fa0b146579fb787323d29e1d7b7768a0541031af --- /dev/null +++ b/DevProject/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/DevProject/ProjectSettings/VFXManager.asset b/DevProject/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..3a95c98bec50cf72538061fd26eee95398f72128 --- /dev/null +++ b/DevProject/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/DevProject/ProjectSettings/XRSettings.asset b/DevProject/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..482590c196f7a82116679f58176b9d1aff21d7f9 --- /dev/null +++ b/DevProject/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..6c11f5b4594b4f917479d4a1e3f331f5010321e6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# From https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.md +FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 + +RUN yes | unminimize + +RUN echo "deb http://packages.cloud.google.com/apt cloud-sdk-xenial main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list +RUN wget https://packages.cloud.google.com/apt/doc/apt-key.gpg && apt-key add apt-key.gpg +RUN apt-get update && \ + apt-get install -y --no-install-recommends wget curl tmux vim git gdebi-core \ + build-essential python3-pip unzip google-cloud-sdk htop mesa-utils xorg-dev xorg \ + libglvnd-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev xvfb && \ + wget http://security.ubuntu.com/ubuntu/pool/main/libx/libxfont/libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb && \ + yes | gdebi libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb +RUN python3 -m pip install --upgrade pip +RUN pip install setuptools==41.0.0 + +ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + +#checkout ml-agents for SHA +RUN mkdir /ml-agents +WORKDIR /ml-agents +ARG SHA +RUN git init +RUN git remote add origin https://github.com/Unity-Technologies/ml-agents.git +RUN git fetch --depth 1 origin $SHA +RUN git checkout FETCH_HEAD +RUN pip install -e /ml-agents/ml-agents-envs +RUN pip install -e /ml-agents/ml-agents diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..06fa0d94e5fb1f52555e944e33e2cc96e8dba073 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,202 @@ +Copyright 2017-2021 Unity Technologies + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. diff --git a/Project/.gitignore b/Project/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..2ec312822995887dc8ded3e797c99340d0600960 --- /dev/null +++ b/Project/.gitignore @@ -0,0 +1,70 @@ +/[Ll]ibrary/ +/Logs/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/Assets/AssetStoreTools* +/Assets/Plugins* +/Assets/Demonstrations* +/Assets/ML-Agents/Timers* +/csharp_timers.json + +# Environemnt logfile +*Project.log + +# Visual Studio 2015 cache directory +/.vs/ + +# Autogenerated VS/MD/Consulo solution and project files +/ProjectExportedObj/ +/Project.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb + +# Unity3D generated meta files +*.pidb.meta + +# Unity3D Generated File On Crash Reports +/sysinfo.txt + +# Builds +*.apk +*.unitypackage +*.app +*.exe +*.x86_64 +*.x86 + +# Plugins +/Assets/VideoRecorder* + +# Mac hidden files +*.DS_Store +*/.ipynb_checkpoints +*/.idea +*.pyc +*.idea/misc.xml +*.idea/modules.xml +*.idea/ +*.iml +*.cache +*/build/ +*/dist/ +*.egg-info* +*.eggs* +*.gitignore.swp + +# VSCode hidden files +*.vscode/ + +.DS_Store diff --git a/Project/Assets/ML-Agents.meta b/Project/Assets/ML-Agents.meta new file mode 100644 index 0000000000000000000000000000000000000000..59a4dc3f1db33bdd5c8906f07b17b5c13c8652b5 --- /dev/null +++ b/Project/Assets/ML-Agents.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 11630fa83cc8b4194b94352e3e6cdb9d +folderAsset: yes +timeCreated: 1504127524 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Editor.meta b/Project/Assets/ML-Agents/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..6f8f90082b3e63257cc80575f8018af6772194db --- /dev/null +++ b/Project/Assets/ML-Agents/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0464d237504614b8fb9b2d96c707cac2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Editor/DisableBurstFromMenu.cs b/Project/Assets/ML-Agents/Editor/DisableBurstFromMenu.cs new file mode 100644 index 0000000000000000000000000000000000000000..102121de10d5596eb1e18b886d7e4616b81e3740 --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/DisableBurstFromMenu.cs @@ -0,0 +1,19 @@ +#if UNITY_CLOUD_BUILD +using UnityEditor; + +public class DisableBurstFromMenu +{ + /// This method is needed to disable Burst compilation on windows for our cloudbuild tests. + /// Barracuda 0.4.0-preview depends on a version of Burst (1.1.1) which does not allow + /// users to disable burst compilation on a per platform basis. The burst version 1.3.0-preview-1 + /// allows for cross compilation, but is not released yet. + /// + /// We will be able to remove this when + /// 1. Barracuda updates burst 1.3.0-preview-1 or + /// 2. We update our edior version for our tests to 2019.1+ + public static void DisableBurstCompilation() + { + EditorApplication.ExecuteMenuItem("Jobs/Burst/Enable Compilation"); + } +} +#endif diff --git a/Project/Assets/ML-Agents/Editor/DisableBurstFromMenu.cs.meta b/Project/Assets/ML-Agents/Editor/DisableBurstFromMenu.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9b7409865c0cda8f4a883b546cbb01e9e0ba28c6 --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/DisableBurstFromMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17c1cb2556fa64702acde6d37c5f21d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Editor/Tests.meta b/Project/Assets/ML-Agents/Editor/Tests.meta new file mode 100644 index 0000000000000000000000000000000000000000..62aaceb0fd9b4b435cbf5abe7e6a8e363a4afce3 --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c324397e98ed45d28d29fd1056c6df0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Editor/Tests/SampleExporter.cs b/Project/Assets/ML-Agents/Editor/Tests/SampleExporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..ca0604c4b8e8f5fa2b7c337c241648a185682ce4 --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/Tests/SampleExporter.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + +namespace Unity.MLAgents +{ + public class SampleExporter + { + const string k_MLAgentsSampleFile = "mlagents-sample.json"; + const string k_PackageSampleFile = ".sample.json"; + const string k_MLAgentsDir = "ML-Agents"; + const string k_MLAgentsExamplesDir = "Examples"; + const string k_MLAgentsPackageName = "com.unity.ml-agents"; + const string k_MLAgentsSamplesDirName = "Samples"; + const string k_MLAgentsScriptsDirName = "Scripts"; + + struct MLAgentsSampleJson + { +#pragma warning disable 649 + public string displayName; + public string description; + // ReSharper disable once CollectionNeverUpdated.Local + public List scenes; +#pragma warning restore 649 + } + + struct PackageSampleJson + { + public string displayName; + public string description; + } + + public static void ExportCuratedSamples() + { + var oldBurst = EditorPrefs.GetBool("BurstCompilation"); + EditorPrefs.SetBool("BurstCompilation", false); + try + { + // Path to Project/Assets + var assetsDir = Application.dataPath; + var repoRoot = Directory.GetParent(Directory.GetParent(assetsDir).FullName).FullName; + + // Top level of where to store the samples + var samplesDir = Path.Combine( + repoRoot, + k_MLAgentsPackageName, + k_MLAgentsSamplesDirName); + + if (!Directory.Exists(samplesDir)) + { + Directory.CreateDirectory(samplesDir); + } + + // Path to the examples dir in the project + var examplesDir = Path.Combine(Application.dataPath, k_MLAgentsDir, k_MLAgentsExamplesDir); + foreach (var exampleDirectory in Directory.GetDirectories(examplesDir)) + { + var mlAgentsSamplePath = Path.Combine(exampleDirectory, k_MLAgentsSampleFile); + if (File.Exists(mlAgentsSamplePath)) + { + var sampleJson = JsonConvert.DeserializeObject(File.ReadAllText(mlAgentsSamplePath)); + Debug.Log(JsonConvert.SerializeObject(sampleJson)); + foreach (var scene in sampleJson.scenes) + { + var scenePath = Path.Combine(exampleDirectory, scene); + if (File.Exists(scenePath)) + { + // Create a Sample Directory + var currentSampleDir = Directory.CreateDirectory(Path.Combine(samplesDir, + Path.GetFileNameWithoutExtension(scenePath))); + + + var scriptsPath = Path.Combine(exampleDirectory, k_MLAgentsScriptsDirName); + Debug.Log($"Scene Path: {scenePath}"); + var assets = new List { scenePath.Substring(scenePath.IndexOf("Assets")) }; + if (!Directory.Exists(Path.Combine(scriptsPath))) + { + scriptsPath = exampleDirectory; + } + + scriptsPath = scriptsPath.Substring(scriptsPath.IndexOf("Assets")); + foreach (var guid in AssetDatabase.FindAssets("t:Script", new[] { scriptsPath })) + { + var path = AssetDatabase.GUIDToAssetPath(guid); + assets.Add(path); + Debug.Log($"Adding Asset: {path}"); + } + + var packageFilePath = Path.GetFileNameWithoutExtension(scenePath) + ".unitypackage"; + AssetDatabase.ExportPackage(assets.ToArray(), + Path.Combine(Application.dataPath, packageFilePath), + ExportPackageOptions.IncludeDependencies | ExportPackageOptions.Recurse); + + // Move the .unitypackage into the samples folder. + var packageFileFullPath = Path.Combine(Application.dataPath, packageFilePath); + + var packageInSamplePath = Path.Combine(currentSampleDir.FullName, packageFilePath); + Debug.Log($"Moving {packageFileFullPath} to {packageInSamplePath}"); + File.Move(packageFileFullPath, packageInSamplePath); + + // write the .sample.json file to the sample directory + File.WriteAllText(Path.Combine(currentSampleDir.FullName, k_PackageSampleFile), + JsonConvert.SerializeObject(new PackageSampleJson + { + description = sampleJson.description, + displayName = sampleJson.displayName + })); + } + } + } + } + } + catch (Exception e) + { + Debug.Log(e); + EditorApplication.Exit(1); + } + EditorPrefs.SetBool("BurstCompilation", oldBurst); + EditorApplication.Exit(0); + } + } +} diff --git a/Project/Assets/ML-Agents/Editor/Tests/SampleExporter.cs.meta b/Project/Assets/ML-Agents/Editor/Tests/SampleExporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..012de8c396619cbe99327a92a96b82f8ec5d8603 --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/Tests/SampleExporter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 914d5be190bb435eb11383db3aaf70eb +timeCreated: 1615161245 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Editor/Tests/StandaloneBuildTest.cs b/Project/Assets/ML-Agents/Editor/Tests/StandaloneBuildTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..01cfc10573971dc0da0a2c85729044320bc2a643 --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/Tests/StandaloneBuildTest.cs @@ -0,0 +1,73 @@ +using System; +using UnityEditor; +using UnityEngine; +using UnityEditor.Build.Reporting; + +namespace Unity.MLAgents +{ + public class StandaloneBuildTest + { + const string k_OutputCommandLineFlag = "--mlagents-build-output-path"; + const string k_SceneCommandLineFlag = "--mlagents-build-scene-path"; + private const string k_BuildTargetFlag = "--mlagents-build-target"; + + public static void BuildStandalonePlayerOSX() + { + // Read commandline arguments for options + var outputPath = "testPlayer"; + var scenePath = "Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity"; + var buildTarget = BuildTarget.StandaloneOSX; + + var args = Environment.GetCommandLineArgs(); + for (var i = 0; i < args.Length - 1; i++) + { + if (args[i] == k_OutputCommandLineFlag) + { + outputPath = args[i + 1]; + Debug.Log($"Overriding output path to {outputPath}"); + } + else if (args[i] == k_SceneCommandLineFlag) + { + scenePath = args[i + 1]; + } + else if (args[i] == k_BuildTargetFlag) + { + buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), args[i + 1], ignoreCase: true); + } + } + + string[] scenes = { scenePath }; + var buildResult = BuildPipeline.BuildPlayer( + scenes, + outputPath, + buildTarget, + BuildOptions.Development + ); + var isOk = buildResult.summary.result == BuildResult.Succeeded; + var error = ""; + foreach (var stepInfo in buildResult.steps) + { + foreach (var msg in stepInfo.messages) + { + if (msg.type != LogType.Log && msg.type != LogType.Warning) + { + error += msg.content + "\n"; + } + } + } + if (isOk) + { + EditorApplication.Exit(0); + } + else + { + Console.Error.WriteLine(error); + EditorApplication.Exit(1); + + } + Debug.Log(error); + + } + + } +} diff --git a/Project/Assets/ML-Agents/Editor/Tests/StandaloneBuildTest.cs.meta b/Project/Assets/ML-Agents/Editor/Tests/StandaloneBuildTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7148a785583cfbe7508cefea0614c138e99641fe --- /dev/null +++ b/Project/Assets/ML-Agents/Editor/Tests/StandaloneBuildTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0c87e095448c49e9812863bb5d1f4e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples.meta b/Project/Assets/ML-Agents/Examples.meta new file mode 100644 index 0000000000000000000000000000000000000000..a402b8ddd4b19c01890e2a1c103d5871d31954ec --- /dev/null +++ b/Project/Assets/ML-Agents/Examples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6584f096f53dc43eeb32803b91f36c5c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall.meta b/Project/Assets/ML-Agents/Examples/3DBall.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac6c263cffc825e244145ae3c5d5f864647b0e61 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f8097eaa1623c4a8ab4eff559e20fedb +folderAsset: yes +timeCreated: 1504127718 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos.meta b/Project/Assets/ML-Agents/Examples/3DBall/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..4b8e2dbde5a4976b2dc9d0848bd92413079a7fdf --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 584112d49c09a4707b0118388a33d903 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo new file mode 100644 index 0000000000000000000000000000000000000000..2c87eff2902b7d780a968e4d7878b3e856532bb8 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo differ diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..ee6b2f3cbd738fcc3cc44a0ed54eab4a6034ef2f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: bbf6756da134740eaa002a1b84f655cb +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400000 + second: Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo new file mode 100644 index 0000000000000000000000000000000000000000..e3c5cdf0d9f5c3ea92500114ad591643dc794349 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo differ diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..5532148f0b4b0a407c0d6c92ebf0fd38bc0e107e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6942431e411b146be9a597663eca89af +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400000 + second: Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs.meta b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..452becb07e7019d86b50723b2f739194fa28825c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7f76e451b3030e54eac0f7c5488d22e9 +folderAsset: yes +timeCreated: 1506066534 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall.prefab b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall.prefab new file mode 100644 index 0000000000000000000000000000000000000000..50b1dae4cca4028d3c58a48b4b00bf461928185d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall.prefab @@ -0,0 +1,729 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1036225416237908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4259352808153402} + - component: {fileID: 33399516572863624} + - component: {fileID: 135693586603893602} + - component: {fileID: 23610325484096200} + - component: {fileID: 54597526346971362} + m_Layer: 0 + m_Name: Ball + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4259352808153402 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.31, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4679453577574622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33399516572863624 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135693586603893602 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_Material: {fileID: 13400000, guid: 56162663048874fd4b10e065f9cf78b7, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23610325484096200 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: cf2a3769e6d5446698f2e3f5aab68915, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &54597526346971362 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.01 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &1218265376493012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4082575947564308} + - component: {fileID: 33986757750372936} + - component: {fileID: 23248495933290848} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4082575947564308 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218265376493012} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4294419716796784} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33986757750372936 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218265376493012} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23248495933290848 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218265376493012} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1321468028730240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4679453577574622} + m_Layer: 0 + m_Name: 3DBall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4679453577574622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1321468028730240} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4259352808153402} + - {fileID: 4780098186595842} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1424713891854676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4780098186595842} + - component: {fileID: 65010516625723872} + - component: {fileID: 114368073295828880} + - component: {fileID: 114715123104194396} + - component: {fileID: 1306725529891448089} + - component: {fileID: 1758424554059689351} + m_Layer: 0 + m_Name: Agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4780098186595842 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 5, z: 5} + m_Children: + - {fileID: 4294419716796784} + m_Father: {fileID: 4679453577574622} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65010516625723872 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114368073295828880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 8 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 2 + BranchSizes: + VectorActionSize: 02000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 20a7b83be6b0c493d9271c65c897eb9b, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: 3DBall + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114715123104194396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aaba48bf82bee4751aa7b89569e57f73, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + ball: {fileID: 1036225416237908} + useVecObs: 1 +--- !u!114 &1306725529891448089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &1758424554059689351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1533320402322554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4667923401885968} + - component: {fileID: 20793118999710892} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4667923401885968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1533320402322554} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4294419716796784} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20793118999710892 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1533320402322554} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1619100162539582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4425897039098228} + - component: {fileID: 33259119028337980} + - component: {fileID: 23108868206887546} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4425897039098228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619100162539582} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4294419716796784} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33259119028337980 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619100162539582} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23108868206887546 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619100162539582} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1854695166504686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4300192163442926} + - component: {fileID: 33165976320323760} + - component: {fileID: 23468552506669568} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4300192163442926 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1854695166504686} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4294419716796784} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33165976320323760 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1854695166504686} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23468552506669568 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1854695166504686} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1859240399150782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4294419716796784} + - component: {fileID: 33973749152356522} + - component: {fileID: 23340305563606254} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4294419716796784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859240399150782} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4667923401885968} + - {fileID: 4082575947564308} + - {fileID: 4144856465265480} + - {fileID: 4425897039098228} + - {fileID: 4300192163442926} + m_Father: {fileID: 4780098186595842} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33973749152356522 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859240399150782} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23340305563606254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859240399150782} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1999020414315134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4144856465265480} + - component: {fileID: 33069174244444078} + - component: {fileID: 23048386147321498} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4144856465265480 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999020414315134} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4294419716796784} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33069174244444078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999020414315134} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23048386147321498 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999020414315134} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall.prefab.meta b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..72aeab1bd800305ec351abbeb9ef0f49a7e6e89b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfa81c019162c4e3caf6e2999c6fdf48 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBallHard.prefab b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBallHard.prefab new file mode 100644 index 0000000000000000000000000000000000000000..b606224b807f8e45bb405510c42ab03f8f15be00 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBallHard.prefab @@ -0,0 +1,728 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1013537264200436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4061379992183930} + - component: {fileID: 33374194556268240} + - component: {fileID: 23592200719479064} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4061379992183930 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013537264200436} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4803620400338346} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33374194556268240 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013537264200436} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23592200719479064 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013537264200436} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1142513601053358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4303457110772256} + - component: {fileID: 33354350239621594} + - component: {fileID: 135353409576584068} + - component: {fileID: 23642118668667602} + - component: {fileID: 54937577604900640} + m_Layer: 0 + m_Name: Ball + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4303457110772256 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142513601053358} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.31, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4133146672945188} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33354350239621594 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142513601053358} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135353409576584068 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142513601053358} + m_Material: {fileID: 13400000, guid: 56162663048874fd4b10e065f9cf78b7, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23642118668667602 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142513601053358} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: cf2a3769e6d5446698f2e3f5aab68915, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &54937577604900640 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142513601053358} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.01 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &1389487819720682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4714831040737054} + - component: {fileID: 33391713113569524} + - component: {fileID: 23336184869517198} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4714831040737054 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389487819720682} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4803620400338346} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33391713113569524 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389487819720682} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23336184869517198 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389487819720682} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1587661941315798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4145990214039758} + - component: {fileID: 33581670671064900} + - component: {fileID: 23247754826336162} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4145990214039758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587661941315798} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4803620400338346} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33581670671064900 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587661941315798} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23247754826336162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587661941315798} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1636363386971520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4861397320469162} + - component: {fileID: 33270098799283234} + - component: {fileID: 23133920396265918} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4861397320469162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636363386971520} + m_LocalRotation: {x: -0, y: -0, z: -0.036135223, w: 0.999347} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4803620400338346} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -4.142} +--- !u!33 &33270098799283234 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636363386971520} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23133920396265918 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636363386971520} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1705088225402192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4320875699542962} + - component: {fileID: 20449099651415632} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4320875699542962 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1705088225402192} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4803620400338346} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20449099651415632 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1705088225402192} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1753668517859216 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4133146672945188} + m_Layer: 0 + m_Name: 3DBallHardNew + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4133146672945188 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753668517859216} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4303457110772256} + - {fileID: 4895942152145390} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1829721031899636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4895942152145390} + - component: {fileID: 65170961617201804} + - component: {fileID: 114284317994838100} + - component: {fileID: 114466000339026140} + - component: {fileID: 8193279139064749781} + - component: {fileID: 7923264721978289873} + m_Layer: 0 + m_Name: Agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4895942152145390 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829721031899636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 5, z: 5} + m_Children: + - {fileID: 4803620400338346} + m_Father: {fileID: 4133146672945188} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65170961617201804 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829721031899636} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114284317994838100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829721031899636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 2 + BranchSizes: + VectorActionSize: 02000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: d179c44c147aa4ffbbb725f009eca3b8, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: 3DBallHard + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 1 +--- !u!114 &114466000339026140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829721031899636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edf26e11cf4ed42eaa3ffb7b91bb4676, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + ball: {fileID: 1142513601053358} +--- !u!114 &8193279139064749781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829721031899636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &7923264721978289873 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829721031899636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1978072206102878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4803620400338346} + - component: {fileID: 33625078582452176} + - component: {fileID: 23622553880467370} + m_Layer: 0 + m_Name: AgentCube_Purple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4803620400338346 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978072206102878} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4320875699542962} + - {fileID: 4145990214039758} + - {fileID: 4714831040737054} + - {fileID: 4061379992183930} + - {fileID: 4861397320469162} + m_Father: {fileID: 4895942152145390} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33625078582452176 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978072206102878} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23622553880467370 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978072206102878} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBallHard.prefab.meta b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBallHard.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..59b8a1cef36dc838ae2da84a5333dd304bd72575 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/3DBallHard.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d8ebd51939eb45c88531e9d444bca28 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/Visual3DBall.prefab b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/Visual3DBall.prefab new file mode 100644 index 0000000000000000000000000000000000000000..e25e4d4f6f0dcb5c2ae2803436918a6bb6ad5ce3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/Visual3DBall.prefab @@ -0,0 +1,423 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &53549307 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 53549308} + - component: {fileID: 53549310} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &53549308 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53549307} + m_LocalRotation: {x: 0.2588191, y: 0, z: 0, w: 0.9659258} + m_LocalPosition: {x: 0, y: 7, z: -8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4679453577574622} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 30, y: 0, z: 0} +--- !u!20 &53549310 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53549307} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0.1 + y: 0 + width: 0.8 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1036225416237908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4259352808153402} + - component: {fileID: 33399516572863624} + - component: {fileID: 135693586603893602} + - component: {fileID: 23610325484096200} + - component: {fileID: 54597526346971362} + m_Layer: 0 + m_Name: Ball + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4259352808153402 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.31, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4679453577574622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33399516572863624 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135693586603893602 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_Material: {fileID: 13400000, guid: 56162663048874fd4b10e065f9cf78b7, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23610325484096200 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: cf2a3769e6d5446698f2e3f5aab68915, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &54597526346971362 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036225416237908} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.01 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &1321468028730240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4679453577574622} + m_Layer: 0 + m_Name: Visual3DBall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4679453577574622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1321468028730240} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4259352808153402} + - {fileID: 4780098186595842} + - {fileID: 53549308} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1424713891854676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4780098186595842} + - component: {fileID: 65010516625723872} + - component: {fileID: 114368073295828880} + - component: {fileID: 7705253412956426214} + - component: {fileID: 1306725529891448089} + - component: {fileID: 1758424554059689351} + - component: {fileID: 289308178} + m_Layer: 0 + m_Name: Agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4780098186595842 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 5, z: 5} + m_Children: + - {fileID: 7877045717626169260} + m_Father: {fileID: 4679453577574622} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65010516625723872 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114368073295828880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 2 + BranchSizes: + VectorActionSize: 02000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 8eb5fecdbd2eb4ec48236d3fee1e1149, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Visual3DBall + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &7705253412956426214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aaba48bf82bee4751aa7b89569e57f73, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + ball: {fileID: 1036225416237908} + useVecObs: 0 +--- !u!114 &1306725529891448089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &1758424554059689351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &289308178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424713891854676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 53549310} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 84 + m_Grayscale: 0 + m_ObservationStacks: 4 + m_Compression: 1 +--- !u!1001 &7872559608310024940 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4780098186595842} + m_Modifications: + - target: {fileID: 1293290366791352, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_Name + value: AgentCube_Blue + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 70d695e1d8399400bb0f2873bdf29bb0, type: 3} +--- !u!4 &7877045717626169260 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4521296116772160, guid: 70d695e1d8399400bb0f2873bdf29bb0, + type: 3} + m_PrefabInstance: {fileID: 7872559608310024940} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/Visual3DBall.prefab.meta b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/Visual3DBall.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..97790a967e1eac8cd5eb5999b28a70f903ccb643 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Prefabs/Visual3DBall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ec49a7b8b70a24ab48d7ca0bf5a063a6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..7fb3476910a304d133f20ba82750780d81a87ea2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4933f3f3e4b741de85835dd811541ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity new file mode 100644 index 0000000000000000000000000000000000000000..87c02702d8694a8c226ea039d8ad08cb8252fe37 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity @@ -0,0 +1,1067 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4497121, g: 0.49977785, b: 0.57563704, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &126840690 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (7) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &255414642 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &502565578 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (5) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &544070511 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (6) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &667695845 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (3) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &717322969 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1 &807556622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 807556627} + - component: {fileID: 807556626} + - component: {fileID: 807556624} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &807556624 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807556622} + m_Enabled: 1 +--- !u!20 &807556626 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807556622} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 35 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &807556627 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807556622} + m_LocalRotation: {x: 0.13052616, y: 0, z: 0, w: 0.9914449} + m_LocalPosition: {x: 4.5, y: 15, z: -43.83} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 15, y: 0, z: 0} +--- !u!1001 &949996849 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (8) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &1223600457 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (9) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &1334647069 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (10) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &1345277686 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (1) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &1442662986 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (11) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &1531193856 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (4) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1 &1583402087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1408885610532680, guid: 00a1ebe742cf2394d8c21484e3a02412, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583402088} + - component: {fileID: 1583402090} + m_Layer: 0 + m_Name: Ball3DSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1583402088 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4673284961943764, guid: 00a1ebe742cf2394d8c21484e3a02412, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583402087} + m_LocalRotation: {x: -0.069583125, y: 0.0049145464, z: 0.0702813, w: 0.99508524} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 0.19999993, z: 5} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1583402090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583402087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!1 &1746325439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1746325442} + - component: {fileID: 1746325441} + - component: {fileID: 1746325440} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1746325440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1746325441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1746325442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1773419472 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_Name + value: 3DBall (2) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.x + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cfa81c019162c4e3caf6e2999c6fdf48, type: 3} +--- !u!1001 &1916479629 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..5a1b20b5d736418a17e0c8d6debf0bad8f7d76bb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBall.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b9ac0cbf961bf4dacbfa0aa9c0d60aaa +timeCreated: 1513216032 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBallHard.unity b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBallHard.unity new file mode 100644 index 0000000000000000000000000000000000000000..8f765f98dcd90a2b119f758d344c41e155688e48 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBallHard.unity @@ -0,0 +1,1007 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4497121, g: 0.49977785, b: 0.57563704, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &83714371 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (10) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &190841887 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (7) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &255414642 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1 &807556622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 807556627} + - component: {fileID: 807556626} + - component: {fileID: 807556624} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &807556624 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807556622} + m_Enabled: 1 +--- !u!20 &807556626 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807556622} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 35 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &807556627 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807556622} + m_LocalRotation: {x: 0.13052616, y: 0, z: 0, w: 0.9914449} + m_LocalPosition: {x: 4.5, y: 15, z: -45} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 15, y: 0, z: 0} +--- !u!1001 &1039166859 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (9) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1143000664 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (1) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1325563966 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (2) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1448943179 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (8) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1515863672 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (5) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1 &1583402087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1408885610532680, guid: 00a1ebe742cf2394d8c21484e3a02412, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583402088} + - component: {fileID: 1583402089} + m_Layer: 0 + m_Name: Ball3DHardSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1583402088 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4673284961943764, guid: 00a1ebe742cf2394d8c21484e3a02412, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583402087} + m_LocalRotation: {x: -0.069583125, y: 0.0049145464, z: 0.0702813, w: 0.99508524} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 0.19999993, z: 5} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1583402089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583402087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!1001 &1682693182 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (4) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1685621577 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (6) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1697057007 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (11) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1 &1746325439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1746325442} + - component: {fileID: 1746325441} + - component: {fileID: 1746325440} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1746325440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1746325441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1746325442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1862302804 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1753668517859216, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_Name + value: 3DBallHardPlatformNew (3) + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} +--- !u!1001 &1916479629 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &2117091534 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4133146672945188, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0d8ebd51939eb45c88531e9d444bca28, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBallHard.unity.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBallHard.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..e807f861a44a4b0a826a0af33028ce3f247b2306 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/3DBallHard.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 35c41099ceec44889bdbe95ed86c97ac +timeCreated: 1513216032 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes/Visual3DBall.unity b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/Visual3DBall.unity new file mode 100644 index 0000000000000000000000000000000000000000..eebca08ac48eca883fa7078eb9e99e969357d349 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/Visual3DBall.unity @@ -0,0 +1,953 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971228, g: 0.49977815, b: 0.57563734, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 7480a805600d24847ab9e9df1dc971fe, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &255414642 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &306910672 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (2) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1001 &556696704 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (7) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1001 &996691359 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (1) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1001 &1119003996 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (5) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1001 &1393635142 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (4) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1 &1583402087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1408885610532680, guid: 00a1ebe742cf2394d8c21484e3a02412, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583402088} + - component: {fileID: 1583402090} + m_Layer: 0 + m_Name: Ball3DSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1583402088 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4673284961943764, guid: 00a1ebe742cf2394d8c21484e3a02412, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583402087} + m_LocalRotation: {x: -0.069583125, y: 0.0049145464, z: 0.0702813, w: 0.99508524} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 0.19999993, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1583402090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583402087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!1 &1746325439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1746325442} + - component: {fileID: 1746325441} + - component: {fileID: 1746325440} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1746325440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1746325441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1746325442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746325439} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1797623013 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (6) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1001 &1916479629 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &2055232544 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall (3) + objectReference: {fileID: 0} + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} +--- !u!1 &2060751695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2060751697} + - component: {fileID: 2060751696} + m_Layer: 0 + m_Name: Main Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &2060751696 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060751695} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2060751697 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060751695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 28.99, y: 14.09, z: -40.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &2133304610 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1321468028730240, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_Name + value: Visual3DBall + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalPosition.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4679453577574622, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ec49a7b8b70a24ab48d7ca0bf5a063a6, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scenes/Visual3DBall.unity.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/Visual3DBall.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..af6bbe3ab97e425ddddd3fd21b2f1e50a0c97e72 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scenes/Visual3DBall.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 345b1ab9777d749dd885c6ea9f138d57 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scripts.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..964a47b01c08db700f90e09a20e344d373376853 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1aca8883d579a491ca2a55ea7a8127c3 +folderAsset: yes +timeCreated: 1503455136 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..8b16087f221441a315a53388a5e9e77122c35974 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs @@ -0,0 +1,95 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Random = UnityEngine.Random; + +public class Ball3DAgent : Agent +{ + [Header("Specific to Ball3D")] + public GameObject ball; + [Tooltip("Whether to use vector observation. This option should be checked " + + "in 3DBall scene, and unchecked in Visual3DBall scene. ")] + public bool useVecObs; + Rigidbody m_BallRb; + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + m_BallRb = ball.GetComponent(); + m_ResetParams = Academy.Instance.EnvironmentParameters; + SetResetParameters(); + } + + public override void CollectObservations(VectorSensor sensor) + { + if (useVecObs) + { + sensor.AddObservation(gameObject.transform.rotation.z); + sensor.AddObservation(gameObject.transform.rotation.x); + sensor.AddObservation(ball.transform.position - gameObject.transform.position); + sensor.AddObservation(m_BallRb.velocity); + } + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + { + var actionZ = 2f * Mathf.Clamp(actionBuffers.ContinuousActions[0], -1f, 1f); + var actionX = 2f * Mathf.Clamp(actionBuffers.ContinuousActions[1], -1f, 1f); + + if ((gameObject.transform.rotation.z < 0.25f && actionZ > 0f) || + (gameObject.transform.rotation.z > -0.25f && actionZ < 0f)) + { + gameObject.transform.Rotate(new Vector3(0, 0, 1), actionZ); + } + + if ((gameObject.transform.rotation.x < 0.25f && actionX > 0f) || + (gameObject.transform.rotation.x > -0.25f && actionX < 0f)) + { + gameObject.transform.Rotate(new Vector3(1, 0, 0), actionX); + } + if ((ball.transform.position.y - gameObject.transform.position.y) < -2f || + Mathf.Abs(ball.transform.position.x - gameObject.transform.position.x) > 3f || + Mathf.Abs(ball.transform.position.z - gameObject.transform.position.z) > 3f) + { + SetReward(-1f); + EndEpisode(); + } + else + { + SetReward(0.1f); + } + } + + public override void OnEpisodeBegin() + { + gameObject.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); + gameObject.transform.Rotate(new Vector3(1, 0, 0), Random.Range(-10f, 10f)); + gameObject.transform.Rotate(new Vector3(0, 0, 1), Random.Range(-10f, 10f)); + m_BallRb.velocity = new Vector3(0f, 0f, 0f); + ball.transform.position = new Vector3(Random.Range(-1.5f, 1.5f), 4f, Random.Range(-1.5f, 1.5f)) + + gameObject.transform.position; + //Reset the parameters when the Agent is reset. + SetResetParameters(); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var continuousActionsOut = actionsOut.ContinuousActions; + continuousActionsOut[0] = -Input.GetAxis("Horizontal"); + continuousActionsOut[1] = Input.GetAxis("Vertical"); + } + + public void SetBall() + { + //Set the attributes of the ball by fetching the information from the academy + m_BallRb.mass = m_ResetParams.GetWithDefault("mass", 1.0f); + var scale = m_ResetParams.GetWithDefault("scale", 1.0f); + ball.transform.localScale = new Vector3(scale, scale, scale); + } + + public void SetResetParameters() + { + SetBall(); + } +} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..da785c506390dacc7c581aeeabc8fd0b86555dcb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aaba48bf82bee4751aa7b89569e57f73 +timeCreated: 1502223572 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..ddc335316c2448bc3a545ef2cee7b1e280bfc003 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs @@ -0,0 +1,91 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors.Reflection; + +public class Ball3DHardAgent : Agent +{ + [Header("Specific to Ball3DHard")] + public GameObject ball; + Rigidbody m_BallRb; + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + m_BallRb = ball.GetComponent(); + m_ResetParams = Academy.Instance.EnvironmentParameters; + SetResetParameters(); + } + + [Observable(numStackedObservations: 9)] + Vector2 Rotation + { + get + { + return new Vector2(gameObject.transform.rotation.z, gameObject.transform.rotation.x); + } + } + + [Observable(numStackedObservations: 9)] + Vector3 PositionDelta + { + get + { + return ball.transform.position - gameObject.transform.position; + } + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + var continuousActions = actionBuffers.ContinuousActions; + var actionZ = 2f * Mathf.Clamp(continuousActions[0], -1f, 1f); + var actionX = 2f * Mathf.Clamp(continuousActions[1], -1f, 1f); + + if ((gameObject.transform.rotation.z < 0.25f && actionZ > 0f) || + (gameObject.transform.rotation.z > -0.25f && actionZ < 0f)) + { + gameObject.transform.Rotate(new Vector3(0, 0, 1), actionZ); + } + + if ((gameObject.transform.rotation.x < 0.25f && actionX > 0f) || + (gameObject.transform.rotation.x > -0.25f && actionX < 0f)) + { + gameObject.transform.Rotate(new Vector3(1, 0, 0), actionX); + } + if ((ball.transform.position.y - gameObject.transform.position.y) < -2f || + Mathf.Abs(ball.transform.position.x - gameObject.transform.position.x) > 3f || + Mathf.Abs(ball.transform.position.z - gameObject.transform.position.z) > 3f) + { + SetReward(-1f); + EndEpisode(); + } + else + { + SetReward(0.1f); + } + } + + public override void OnEpisodeBegin() + { + gameObject.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); + gameObject.transform.Rotate(new Vector3(1, 0, 0), Random.Range(-10f, 10f)); + gameObject.transform.Rotate(new Vector3(0, 0, 1), Random.Range(-10f, 10f)); + m_BallRb.velocity = new Vector3(0f, 0f, 0f); + ball.transform.position = new Vector3(Random.Range(-1.5f, 1.5f), 4f, Random.Range(-1.5f, 1.5f)) + + gameObject.transform.position; + } + + public void SetBall() + { + //Set the attributes of the ball by fetching the information from the academy + m_BallRb.mass = m_ResetParams.GetWithDefault("mass", 1.0f); + var scale = m_ResetParams.GetWithDefault("scale", 1.0f); + ball.transform.localScale = new Vector3(scale, scale, scale); + } + + public void SetResetParameters() + { + SetBall(); + } +} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs.meta b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..48fa44afe9fe15124d0dbae4807767efffa2e9a7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: edf26e11cf4ed42eaa3ffb7b91bb4676 +timeCreated: 1517967179 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels.meta b/Project/Assets/ML-Agents/Examples/3DBall/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..b3300505107063641ed2b89227d17246b745bb44 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/TFModels.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1354ffcdf130e41dfb6b16f0bcba7b67 +folderAsset: yes +timeCreated: 1505434885 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.nn b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.nn new file mode 100644 index 0000000000000000000000000000000000000000..1c0bde0d4adaca716162f92ad1a604ed728de449 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.nn differ diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.nn.meta b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..2eab45be2ff4f3ba9eb29e9ababcecdf5c878151 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20a7b83be6b0c493d9271c65c897eb9b +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx new file mode 100644 index 0000000000000000000000000000000000000000..c16e1bde959c001a900e77d755552ef06316d7df --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab6529c9d2a272ec7a919f0005b14878f650e484006bd33e726c19b2900bbeb3 +size 93825 diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx.meta b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..7fee2c7282c0d3ba88ee655227b3727e78094abf --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBallHard.onnx.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: d179c44c147aa4ffbbb725f009eca3b8 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn new file mode 100644 index 0000000000000000000000000000000000000000..f4c95b811b1bfd270b53585945e9b69613df020c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b83b583b12f40bbdc02aa2edf664823b82c3195a422ffe08ae46c1964ebe42e +size 1483938 diff --git a/Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn.meta b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..b51147d0393227880eeeeb28d0e549ec54882608 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/TFModels/Visual3DBall.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8eb5fecdbd2eb4ec48236d3fee1e1149 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/mlagents-sample.json b/Project/Assets/ML-Agents/Examples/3DBall/mlagents-sample.json new file mode 100644 index 0000000000000000000000000000000000000000..b1cce936e5fb13c8dc76bed06d52bdfd56fd1a9b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/mlagents-sample.json @@ -0,0 +1,7 @@ +{ + "displayName": "3D Ball", + "description": "The 3D Ball sample is a simple environment that is a great for jumping into Ml-Agents to see how things work.", + "scenes": [ + "Scenes/3DBall.unity" + ] +} diff --git a/Project/Assets/ML-Agents/Examples/3DBall/mlagents-sample.json.meta b/Project/Assets/ML-Agents/Examples/3DBall/mlagents-sample.json.meta new file mode 100644 index 0000000000000000000000000000000000000000..1e0892275ee949f224fdc762cb4c03b76750b2cb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/3DBall/mlagents-sample.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6b6f1c189dc84df391d1c3ccb13a54f7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic.meta b/Project/Assets/ML-Agents/Examples/Basic.meta new file mode 100644 index 0000000000000000000000000000000000000000..b88941f7cb94a8775bced3889a8e39760ceccc57 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d289c718ca5a54cdfae185081c259106 +folderAsset: yes +timeCreated: 1517447132 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Demos.meta b/Project/Assets/ML-Agents/Examples/Basic/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..89e1bfd8f4e4cd87ef86cf7b830485734e3fd3f3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0fe8ca50950ae4f2688716419b981cbb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo b/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo new file mode 100644 index 0000000000000000000000000000000000000000..979acb95f9f2a8cdb1bbce1a9cd78546a3ccb760 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo differ diff --git a/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta b/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..8aea82a0db994e0c64b65d3db54fb2e33194e62b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 414224ce8b3e247ad936b17f574b10ab +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400000 + second: Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Basic/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Basic/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..777ce6c8fb180de6ddb28311891f37e97dabd0e2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: acef2263cf1ba4dbda25cb702fcc420f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Prefabs/Basic.prefab b/Project/Assets/ML-Agents/Examples/Basic/Prefabs/Basic.prefab new file mode 100644 index 0000000000000000000000000000000000000000..bf83d97f24c3af722784235ae56ebaf114ae8ca1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Prefabs/Basic.prefab @@ -0,0 +1,1094 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1054019269138802 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4438203540813536} + - component: {fileID: 33940663921058130} + - component: {fileID: 135416135027269354} + - component: {fileID: 23871750201626458} + m_Layer: 0 + m_Name: SmallGoal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4438203540813536 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054019269138802} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 4748436652256066} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33940663921058130 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054019269138802} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135416135027269354 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054019269138802} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23871750201626458 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054019269138802} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1090550208982240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4939386490834352} + - component: {fileID: 33017795879125764} + - component: {fileID: 65629240124822476} + - component: {fileID: 23076022644234466} + m_Layer: 0 + m_Name: Platform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &4939386490834352 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090550208982240} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.95955, z: 0} + m_LocalScale: {x: 16.970455, y: 0.84852326, z: 16.970463} + m_Children: + - {fileID: 4124433045984460} + m_Father: {fileID: 4748436652256066} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33017795879125764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090550208982240} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65629240124822476 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090550208982240} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23076022644234466 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090550208982240} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1115351352854158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4274559064501042} + - component: {fileID: 33536137548651114} + - component: {fileID: 23319562312620348} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4274559064501042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115351352854158} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4972942761218922} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33536137548651114 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115351352854158} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23319562312620348 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115351352854158} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1149534771031686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4567537267666516} + - component: {fileID: 33283556982630398} + - component: {fileID: 23320704149538020} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4567537267666516 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149534771031686} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4972942761218922} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33283556982630398 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149534771031686} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23320704149538020 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149534771031686} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1163521772845424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4748436652256066} + m_Layer: 0 + m_Name: Basic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4748436652256066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163521772845424} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4170723581433160} + - {fileID: 4408225746658886} + - {fileID: 4438203540813536} + - {fileID: 4757763003147496} + - {fileID: 4939386490834352} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1263463520136984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4170723581433160} + - component: {fileID: 65968285873374238} + - component: {fileID: 114502619508238574} + - component: {fileID: 114827551040495112} + - component: {fileID: 6790639061807687247} + - component: {fileID: 748290217173149218} + - component: {fileID: 4562193454555387360} + - component: {fileID: 2066777822704547994} + m_Layer: 0 + m_Name: BasicAgent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4170723581433160 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4972942761218922} + m_Father: {fileID: 4748436652256066} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65968285873374238 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114502619508238574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 468c183196f1844f69e125c99dd135a1, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Basic + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114827551040495112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 624480a72e46148118ab2e2d89b537de, type: 3} + m_Name: + m_EditorClassIdentifier: + timeBetweenDecisionsAtInference: 0.15 + position: 0 + largeGoal: {fileID: 1445405232822318} + smallGoal: {fileID: 1054019269138802} +--- !u!114 &6790639061807687247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &748290217173149218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88b6042bc9a5d4aa58d931eae49442e5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 +--- !u!114 &4562193454555387360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4ce4e199dabb494e8764b09f4c378098, type: 3} + m_Name: + m_EditorClassIdentifier: + basicController: {fileID: 114827551040495112} +--- !u!114 &2066777822704547994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263463520136984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6ee410d6d45349218d5e69bb2a347c63, type: 3} + m_Name: + m_EditorClassIdentifier: + basicController: {fileID: 114827551040495112} +--- !u!1 &1284220331185348 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4757763003147496} + - component: {fileID: 33759905158738374} + - component: {fileID: 23437062667958718} + m_Layer: 0 + m_Name: Logo-PlaneMesh-GRAY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4757763003147496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1284220331185348} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.5, y: -0.4, z: -6.7} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 4748436652256066} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33759905158738374 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1284220331185348} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23437062667958718 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1284220331185348} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3825ef6e3f8624bc5934d59be09c0c92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1364675671329488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4265976461360858} + - component: {fileID: 33470089751256180} + - component: {fileID: 23090905685294566} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4265976461360858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364675671329488} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4972942761218922} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33470089751256180 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364675671329488} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23090905685294566 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364675671329488} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1445405232822318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4408225746658886} + - component: {fileID: 33609199517446512} + - component: {fileID: 135361835502098234} + - component: {fileID: 23562659140096070} + m_Layer: 0 + m_Name: LargeGoal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4408225746658886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445405232822318} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4748436652256066} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33609199517446512 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445405232822318} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135361835502098234 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445405232822318} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23562659140096070 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445405232822318} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1570979946399648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4702050764287068} + - component: {fileID: 33267300860097070} + - component: {fileID: 23987481152690364} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4702050764287068 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570979946399648} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4972942761218922} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33267300860097070 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570979946399648} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23987481152690364 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570979946399648} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1576079572916782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4124433045984460} + - component: {fileID: 33486523423754490} + - component: {fileID: 65273558974508846} + - component: {fileID: 23967134194256996} + m_Layer: 0 + m_Name: PlatformBorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &4124433045984460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576079572916782} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060045414, z: 0} + m_LocalScale: {x: 1.0499998, y: 1, z: 1.0500001} + m_Children: [] + m_Father: {fileID: 4939386490834352} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33486523423754490 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576079572916782} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65273558974508846 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576079572916782} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23967134194256996 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576079572916782} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1595624492116940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4819626006822508} + - component: {fileID: 20242304736315692} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4819626006822508 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595624492116940} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4972942761218922} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20242304736315692 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595624492116940} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1721003998707516 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4972942761218922} + - component: {fileID: 33641699227035068} + - component: {fileID: 23198283462458822} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4972942761218922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1721003998707516} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4819626006822508} + - {fileID: 4274559064501042} + - {fileID: 4702050764287068} + - {fileID: 4567537267666516} + - {fileID: 4265976461360858} + m_Father: {fileID: 4170723581433160} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33641699227035068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1721003998707516} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23198283462458822 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1721003998707516} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/Basic/Prefabs/Basic.prefab.meta b/Project/Assets/ML-Agents/Examples/Basic/Prefabs/Basic.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..3e2edfeac7d5fd6fd0705edce61a6fa12a815900 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Prefabs/Basic.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5eb289873aca4f5a8cc59c7464ab7c1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scenes.meta b/Project/Assets/ML-Agents/Examples/Basic/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..7e4a7fe8edc17d62a89ec57404998320db3e81f0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8df24456c56c94dc3ac5091161221c29 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity b/Project/Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity new file mode 100644 index 0000000000000000000000000000000000000000..3ee625c49901d85445bb4f2a383dd3e5ee1efa72 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity @@ -0,0 +1,450 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4497121, g: 0.49977785, b: 0.57563704, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &68436829 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &1502457254 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1 &1715640920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1715640925} + - component: {fileID: 1715640924} + - component: {fileID: 1715640922} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &1715640922 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715640920} + m_Enabled: 1 +--- !u!20 &1715640924 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715640920} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 50 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1715640925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715640920} + m_LocalRotation: {x: 0.2588191, y: 0, z: 0, w: 0.9659258} + m_LocalPosition: {x: 0, y: 7.33, z: -13.89} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 30, y: 0, z: 0} +--- !u!1001 &1783603361 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4748436652256066, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939386490834352, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} + propertyPath: m_LocalScale.z + value: 6.270299 + objectReference: {fileID: 0} + - target: {fileID: 114502619508238574, guid: c5eb289873aca4f5a8cc59c7464ab7c1, + type: 3} + propertyPath: m_BrainParameters.VectorObservationSize + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114502619508238574, guid: c5eb289873aca4f5a8cc59c7464ab7c1, + type: 3} + propertyPath: m_BrainParameters.vectorObservationSize + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c5eb289873aca4f5a8cc59c7464ab7c1, type: 3} +--- !u!1 &1889211226 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1889211228} + - component: {fileID: 1889211227} + m_Layer: 0 + m_Name: BasicSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1889211227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889211226} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!4 &1889211228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889211226} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity.meta b/Project/Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..ec7a48aee36ee2ec362470a71ff60eecef4d2a54 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scenes/Basic.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf1d119a8748d406e90ecb623b45f92f +timeCreated: 1504127824 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts.meta b/Project/Assets/ML-Agents/Examples/Basic/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..dfa30689b117531b43080160fb87878be19db897 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fbcbd038eb29041f580c463e454e10fc +folderAsset: yes +timeCreated: 1503355437 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..9a02b6765e7fdab2fbc81de014697d04c84b4a38 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs @@ -0,0 +1,99 @@ +using System; +using Unity.MLAgents.Actuators; +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + /// + /// A simple example of a ActuatorComponent. + /// This should be added to the same GameObject as the BasicController + /// + public class BasicActuatorComponent : ActuatorComponent + { + public BasicController basicController; + ActionSpec m_ActionSpec = ActionSpec.MakeDiscrete(3); + + /// + /// Creates a BasicActuator. + /// + /// + public override IActuator[] CreateActuators() + { + return new IActuator[] { new BasicActuator(basicController) }; + } + + public override ActionSpec ActionSpec + { + get { return m_ActionSpec; } + } + } + + /// + /// Simple actuator that converts the action into a {-1, 0, 1} direction + /// + public class BasicActuator : IActuator + { + public BasicController basicController; + ActionSpec m_ActionSpec; + + public BasicActuator(BasicController controller) + { + basicController = controller; + m_ActionSpec = ActionSpec.MakeDiscrete(3); + } + + public ActionSpec ActionSpec + { + get { return m_ActionSpec; } + } + + /// + public String Name + { + get { return "Basic"; } + } + + public void ResetData() + { + + } + + public void OnActionReceived(ActionBuffers actionBuffers) + { + var movement = actionBuffers.DiscreteActions[0]; + + var direction = 0; + + switch (movement) + { + case 1: + direction = -1; + break; + case 2: + direction = 1; + break; + } + + basicController.MoveDirection(direction); + } + + public void Heuristic(in ActionBuffers actionBuffersOut) + { + var direction = Input.GetAxis("Horizontal"); + var discreteActions = actionBuffersOut.DiscreteActions; + if (Mathf.Approximately(direction, 0.0f)) + { + discreteActions[0] = 0; + return; + } + var sign = Math.Sign(direction); + discreteActions[0] = sign < 0 ? 1 : 2; + } + + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + + } + + } +} diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs.meta b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..88982ad4693af55d78bb9c0c0bbf4427f8890bc7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4ce4e199dabb494e8764b09f4c378098 +timeCreated: 1597446960 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicController.cs b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicController.cs new file mode 100644 index 0000000000000000000000000000000000000000..f610f4fb3309a647a1d59da2df83daf0a918aeb7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicController.cs @@ -0,0 +1,117 @@ +using System; +using UnityEngine; +using UnityEngine.SceneManagement; +using Unity.MLAgents; +using UnityEngine.Serialization; + +/// +/// An example of how to use ML-Agents without inheriting from the Agent class. +/// Observations are generated by the attached SensorComponent, and the actions +/// are retrieved from the Agent. +/// +public class BasicController : MonoBehaviour +{ + public float timeBetweenDecisionsAtInference; + float m_TimeSinceDecision; + [FormerlySerializedAs("m_Position")] + [HideInInspector] + public int position; + const int k_SmallGoalPosition = 7; + const int k_LargeGoalPosition = 17; + public GameObject largeGoal; + public GameObject smallGoal; + const int k_MinPosition = 0; + const int k_MaxPosition = 20; + public const int k_Extents = k_MaxPosition - k_MinPosition; + + Agent m_Agent; + + public void Awake() + { + // Since this example does not inherit from the Agent class, explicit registration + // of the RpcCommunicator is required. The RPCCommunicator should only be compiled + // for Standalone platforms (i.e. Windows, Linux, or Mac) +#if UNITY_EDITOR || UNITY_STANDALONE + if (!CommunicatorFactory.CommunicatorRegistered) + { + Debug.Log("Registered Communicator."); + CommunicatorFactory.Register(RpcCommunicator.Create); + } +#endif + } + + public void OnEnable() + { + m_Agent = GetComponent(); + position = 10; + transform.position = new Vector3(position - 10f, 0f, 0f); + smallGoal.transform.position = new Vector3(k_SmallGoalPosition - 10f, 0f, 0f); + largeGoal.transform.position = new Vector3(k_LargeGoalPosition - 10f, 0f, 0f); + } + + /// + /// Controls the movement of the GameObject based on the actions received. + /// + /// + public void MoveDirection(int direction) + { + position += direction; + if (position < k_MinPosition) { position = k_MinPosition; } + if (position > k_MaxPosition) { position = k_MaxPosition; } + + gameObject.transform.position = new Vector3(position - 10f, 0f, 0f); + + m_Agent.AddReward(-0.01f); + + if (position == k_SmallGoalPosition) + { + m_Agent.AddReward(0.1f); + m_Agent.EndEpisode(); + ResetAgent(); + } + + if (position == k_LargeGoalPosition) + { + m_Agent.AddReward(1f); + m_Agent.EndEpisode(); + ResetAgent(); + } + } + + public void ResetAgent() + { + // This is a very inefficient way to reset the scene. Used here for testing. + SceneManager.LoadScene(SceneManager.GetActiveScene().name); + m_Agent = null; // LoadScene only takes effect at the next Update. + // We set the Agent to null to avoid using the Agent before the reload + } + + public void FixedUpdate() + { + WaitTimeInference(); + } + + void WaitTimeInference() + { + if (m_Agent == null) + { + return; + } + if (Academy.Instance.IsCommunicatorOn) + { + m_Agent?.RequestDecision(); + } + else + { + if (m_TimeSinceDecision >= timeBetweenDecisionsAtInference) + { + m_TimeSinceDecision = 0f; + m_Agent?.RequestDecision(); + } + else + { + m_TimeSinceDecision += Time.fixedDeltaTime; + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicController.cs.meta b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a2ff5e21c354541dd67d2a0f0ab0271045a5572b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 624480a72e46148118ab2e2d89b537de +timeCreated: 1503355437 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicSensorComponent.cs b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..f956d747ad33da8755ca8bee5ab56b34e0229c29 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicSensorComponent.cs @@ -0,0 +1,62 @@ +using System; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgentsExamples +{ + /// + /// A simple example of a SensorComponent. + /// This should be added to the same GameObject as the BasicController + /// + public class BasicSensorComponent : SensorComponent + { + public BasicController basicController; + + /// + /// Creates a BasicSensor. + /// + /// + public override ISensor[] CreateSensors() + { + return new ISensor[] { new BasicSensor(basicController) }; + } + } + + /// + /// Simple Sensor implementation that uses a one-hot encoding of the Agent's + /// position as the observation. + /// + public class BasicSensor : SensorBase + { + public BasicController basicController; + + public BasicSensor(BasicController controller) + { + basicController = controller; + } + + /// + /// Generate the observations for the sensor. + /// In this case, the observations are all 0 except for a 1 at the position of the agent. + /// + /// + public override void WriteObservation(float[] output) + { + // One-hot encoding of the position + Array.Clear(output, 0, output.Length); + output[basicController.position] = 1; + } + + /// + public override ObservationSpec GetObservationSpec() + { + return ObservationSpec.Vector(BasicController.k_Extents); + } + + /// + public override string GetName() + { + return "Basic"; + } + + } +} diff --git a/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicSensorComponent.cs.meta b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b8fc04cbc69ce4d4217cd52d4e0eccd32bac46b7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicSensorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6ee410d6d45349218d5e69bb2a347c63 +timeCreated: 1582857786 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/Basic/TFModels.meta b/Project/Assets/ML-Agents/Examples/Basic/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..c248d81336569cba4cdd99f52148af27001f5634 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1b9b0ef56a7943f8b6eae4a5c2d4c13 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Basic/TFModels/Basic.nn b/Project/Assets/ML-Agents/Examples/Basic/TFModels/Basic.nn new file mode 100644 index 0000000000000000000000000000000000000000..c83c7c4ae58a887102da098a1699a07f1bdd7e44 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Basic/TFModels/Basic.nn differ diff --git a/Project/Assets/ML-Agents/Examples/Basic/TFModels/Basic.nn.meta b/Project/Assets/ML-Agents/Examples/Basic/TFModels/Basic.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..e57368aeef32fb701b595d5a210a8acca0c37aef --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Basic/TFModels/Basic.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 468c183196f1844f69e125c99dd135a1 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Crawler.meta b/Project/Assets/ML-Agents/Examples/Crawler.meta new file mode 100644 index 0000000000000000000000000000000000000000..4fb04d8bcb9ffea3bb7d564eb80d757434e76d3e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3aea709eb8dc04856aaa6d93573fb0df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Demos.meta b/Project/Assets/ML-Agents/Examples/Crawler/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..af879d255e31c11fc03263d18bad5c8b9f2c1c75 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0998d778791f404ea5e3c4fb834b852 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo new file mode 100644 index 0000000000000000000000000000000000000000..5bdfb105d0ad044014e5e6edc3f329609c957845 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e816bf48bba19ad377ed3a86cc45f5b3283a316443ee7c5dd4e782461bfcba9 +size 8014280 diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo.meta b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..59fb83b0b0fdebdf09e37f840f1f8bba3a70e010 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 258df0219226d4b5191ced1365c20f67 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fd4f82ef5d8582e86698f236cd4f24683a3c5b9f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c9cb9a4fa201d4f579ff66de92b0317f +folderAsset: yes +timeCreated: 1508478093 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Crawler.prefab b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Crawler.prefab new file mode 100644 index 0000000000000000000000000000000000000000..051236ac96caca584af76253a789c6db367f2d74 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Crawler.prefab @@ -0,0 +1,3196 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4845970999844939481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845970999844939480} + - component: {fileID: 4845970999844939482} + - component: {fileID: 4845970999844939483} + m_Layer: 0 + m_Name: grounded viz + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845970999844939480 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845970999844939481} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0.85, z: 0} + m_LocalScale: {x: 0.38461584, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4845971001073609773} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845970999844939482 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845970999844939481} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845970999844939483 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845970999844939481} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845970999929964132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845970999929964135} + - component: {fileID: 4845970999929964057} + - component: {fileID: 4845970999929964134} + m_Layer: 0 + m_Name: grounded viz + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845970999929964135 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845970999929964132} + m_LocalRotation: {x: 0.000000044703484, y: -0.7071068, z: -0.7071068, w: 0.000000044703484} + m_LocalPosition: {x: 0, y: 0.85, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.3846154} + m_Children: [] + m_Father: {fileID: 4845971000370843711} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845970999929964057 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845970999929964132} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845970999929964134 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845970999929964132} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000000621464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000000621467} + - component: {fileID: 4845971000000621470} + - component: {fileID: 4845971000000621468} + - component: {fileID: 4845971000000621469} + - component: {fileID: 4845971000000621466} + m_Layer: 0 + m_Name: foreleg0 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000000621467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000000621464} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.08, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971001110375627} + m_Father: {fileID: 4845971001327157979} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!136 &4845971000000621470 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000000621464} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 1.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971000000621468 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000000621464} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971000000621469 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000000621464} + m_ConnectedBody: {fileID: 4845971001327158053} + m_Anchor: {x: 0, y: -0.75, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.000000014901161, y: 0.33000007, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 150 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971000000621466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000000621464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!1 &4845971000227404789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000227404788} + - component: {fileID: 4845971000227404790} + - component: {fileID: 4845971000227404791} + m_Layer: 0 + m_Name: leg1Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000227404788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000227404789} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.30000025, y: 0.4800002, z: 0.30000028} + m_Children: [] + m_Father: {fileID: 4845971001325249078} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &4845971000227404790 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000227404789} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971000227404791 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000227404789} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000245862060 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000245862063} + - component: {fileID: 4845971000245862050} + - component: {fileID: 4845971000245862048} + - component: {fileID: 4845971000245862049} + - component: {fileID: 4845971000245862062} + m_Layer: 0 + m_Name: foreleg3 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000245862063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000245862060} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.0799994, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971000789879000} + m_Father: {fileID: 4845971000943818107} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: -90, z: 0} +--- !u!136 &4845971000245862050 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000245862060} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 1.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971000245862048 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000245862060} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971000245862049 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000245862060} + m_ConnectedBody: {fileID: 4845971000943818053} + m_Anchor: {x: 0, y: -0.75, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.000000044703484, y: 0.32999957, z: -0.000000029802322} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 150 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971000245862062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000245862060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!1 &4845971000262255012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000262255015} + - component: {fileID: 4845971000262254937} + - component: {fileID: 4845971000262255014} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000262255015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000262255012} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.028, z: 0.484} + m_LocalScale: {x: 0.11330591, y: 0.0262317, z: 0.030423056} + m_Children: [] + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845971000262254937 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000262255012} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971000262255014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000262255012} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000281612786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000281612789} + - component: {fileID: 4845971000281612776} + - component: {fileID: 4845971000281612790} + - component: {fileID: 4845971000281612791} + - component: {fileID: 4845971000281612788} + m_Layer: 0 + m_Name: foreleg2 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000281612789 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000281612786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.0800005, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971000370843711} + m_Father: {fileID: 4845971000566026494} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 180, z: 0} +--- !u!136 &4845971000281612776 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000281612786} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 1.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971000281612790 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000281612786} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971000281612791 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000281612786} + m_ConnectedBody: {fileID: 4845971000566026488} + m_Anchor: {x: 0, y: -0.75, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.000000014901161, y: 0.33000052, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 150 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971000281612788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000281612786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!1 &4845971000370843708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000370843711} + - component: {fileID: 4845971000370843697} + - component: {fileID: 4845971000370843710} + m_Layer: 0 + m_Name: foreleg2Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000370843711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000370843708} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.30000183, y: 0.7800015, z: 0.30000097} + m_Children: + - {fileID: 4845970999929964135} + m_Father: {fileID: 4845971000281612789} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 180, z: 0} +--- !u!33 &4845971000370843697 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000370843708} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971000370843710 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000370843708} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000566026489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000566026494} + - component: {fileID: 4845971000566026492} + - component: {fileID: 4845971000566026488} + - component: {fileID: 4845971000566026490} + - component: {fileID: 4845971000566026491} + m_Layer: 0 + m_Name: leg2 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000566026494 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000566026489} + m_LocalRotation: {x: -0.27059802, y: 0.6532815, z: 0.6532815, w: 0.27059802} + m_LocalPosition: {x: -0.6363961, y: -0.1500001, z: 0.6363963} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971000732648382} + - {fileID: 4845971000281612789} + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: -90, y: 180, z: 0} +--- !u!136 &4845971000566026492 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000566026489} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 0.95 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971000566026488 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000566026489} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971000566026490 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000566026489} + m_ConnectedBody: {fileID: 4845971001588102145} + m_Anchor: {x: 0, y: -0.5, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.28284273, y: -0.1500001, z: 0.28284284} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971000566026491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000566026489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4845971000697267374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000697267361} + - component: {fileID: 4845971000697267363} + - component: {fileID: 4845971000697267360} + m_Layer: 0 + m_Name: leg3Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000697267361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000697267374} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.3, y: 0.48000023, z: 0.30000028} + m_Children: [] + m_Father: {fileID: 4845971000943818107} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: -90, z: 0} +--- !u!33 &4845971000697267363 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000697267374} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971000697267360 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000697267374} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000732648383 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000732648382} + - component: {fileID: 4845971000732648368} + - component: {fileID: 4845971000732648369} + m_Layer: 0 + m_Name: leg2Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000732648382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000732648383} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.30000153, y: 0.48000097, z: 0.30000097} + m_Children: [] + m_Father: {fileID: 4845971000566026494} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 180, z: 0} +--- !u!33 &4845971000732648368 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000732648383} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971000732648369 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000732648383} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000789879001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000789879000} + - component: {fileID: 4845971000789879002} + - component: {fileID: 4845971000789879003} + m_Layer: 0 + m_Name: foreleg3Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000789879000 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000789879001} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.3, y: 0.7800003, z: 0.30000013} + m_Children: + - {fileID: 4845971001308907667} + m_Father: {fileID: 4845971000245862063} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: -90, z: 0} +--- !u!33 &4845971000789879002 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000789879001} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971000789879003 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000789879001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000893344346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000893344349} + - component: {fileID: 4845971000893344350} + - component: {fileID: 4845971000893344351} + - component: {fileID: 4845971000893344348} + m_Layer: 0 + m_Name: Sweatband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000893344349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000893344346} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.195, z: 0} + m_LocalScale: {x: 0.88591725, y: 0.19942614, z: 0.88591725} + m_Children: [] + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845971000893344350 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000893344346} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!136 &4845971000893344351 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000893344346} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &4845971000893344348 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000893344346} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971000943818050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971000943818107} + - component: {fileID: 4845971000943818105} + - component: {fileID: 4845971000943818053} + - component: {fileID: 4845971000943818055} + - component: {fileID: 4845971000943818052} + m_Layer: 0 + m_Name: leg3 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971000943818107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000943818050} + m_LocalRotation: {x: -0.2705981, y: -0.6532815, z: -0.6532815, w: 0.2705981} + m_LocalPosition: {x: 0.6363963, y: -0.1500001, z: 0.6363961} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971000697267361} + - {fileID: 4845971000245862063} + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: -90, y: -90, z: 0} +--- !u!136 &4845971000943818105 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000943818050} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 0.95 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971000943818053 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000943818050} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971000943818055 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000943818050} + m_ConnectedBody: {fileID: 4845971001588102145} + m_Anchor: {x: 0, y: -0.5, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.28284281, y: -0.1500001, z: 0.2828427} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971000943818052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971000943818050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4845971001073609770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001073609773} + - component: {fileID: 4845971001073609775} + - component: {fileID: 4845971001073609772} + m_Layer: 0 + m_Name: foreleg1Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001073609773 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001073609770} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.30000025, y: 0.78000027, z: 0.30000013} + m_Children: + - {fileID: 4845970999844939480} + m_Father: {fileID: 4845971001622533706} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &4845971001073609775 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001073609770} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001073609772 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001073609770} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971001110375624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001110375627} + - component: {fileID: 4845971001110375629} + - component: {fileID: 4845971001110375626} + m_Layer: 0 + m_Name: foreleg0Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001110375627 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001110375624} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.30000007, y: 0.78000146, z: 0.30000097} + m_Children: + - {fileID: 4845971001702882993} + m_Father: {fileID: 4845971000000621467} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!33 &4845971001110375629 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001110375624} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001110375626 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001110375624} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971001114446569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001114446568} + - component: {fileID: 4845971001114446570} + - component: {fileID: 4845971001114446571} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001114446568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001114446569} + m_LocalRotation: {x: -0.22353469, y: 0.0000001490116, z: 0.00000004470348, w: 0.97469604} + m_LocalPosition: {x: -0.198, y: 0.12499996, z: 0.437} + m_LocalScale: {x: 0.12858818, y: 0.12858823, z: 0.073603} + m_Children: [] + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -25.833002, y: 0, z: 0} +--- !u!33 &4845971001114446570 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001114446569} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001114446571 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001114446569} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971001160200562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001160200565} + - component: {fileID: 4845971001160200567} + - component: {fileID: 4845971001160200564} + m_Layer: 0 + m_Name: leg0Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001160200565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001160200562} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.30000007, y: 0.48000097, z: 0.30000082} + m_Children: [] + m_Father: {fileID: 4845971001327157979} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!33 &4845971001160200567 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001160200562} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001160200564 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001160200562} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971001308907664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001308907667} + - component: {fileID: 4845971001308907669} + - component: {fileID: 4845971001308907666} + m_Layer: 0 + m_Name: grounded viz + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001308907667 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001308907664} + m_LocalRotation: {x: 0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0.85, z: 0} + m_LocalScale: {x: 0.38461524, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4845971000789879000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845971001308907669 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001308907664} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001308907666 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001308907664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971001325249073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001325249078} + - component: {fileID: 4845971001325249076} + - component: {fileID: 4845971001325249072} + - component: {fileID: 4845971001325249074} + - component: {fileID: 4845971001325249075} + m_Layer: 0 + m_Name: leg1 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001325249078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001325249073} + m_LocalRotation: {x: -0.6532815, y: 0.2705981, z: 0.2705981, w: 0.6532815} + m_LocalPosition: {x: -0.6363963, y: -0.1500001, z: -0.6363961} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971000227404788} + - {fileID: 4845971001622533706} + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!136 &4845971001325249076 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001325249073} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 0.95 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971001325249072 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001325249073} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971001325249074 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001325249073} + m_ConnectedBody: {fileID: 4845971001588102145} + m_Anchor: {x: 0, y: -0.5, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.28284281, y: -0.1500001, z: -0.2828427} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971001325249075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001325249073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4845971001327158050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001327157979} + - component: {fileID: 4845971001327157977} + - component: {fileID: 4845971001327158053} + - component: {fileID: 4845971001327158055} + - component: {fileID: 4845971001327158052} + m_Layer: 0 + m_Name: leg0 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001327157979 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001327158050} + m_LocalRotation: {x: -0.6532815, y: -0.27059802, z: -0.27059802, w: 0.6532815} + m_LocalPosition: {x: 0.6363961, y: -0.1500001, z: -0.6363963} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971001160200565} + - {fileID: 4845971000000621467} + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!136 &4845971001327157977 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001327158050} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 0.95 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971001327158053 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001327158050} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971001327158055 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001327158050} + m_ConnectedBody: {fileID: 4845971001588102145} + m_Anchor: {x: 0, y: -0.5, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.28284273, y: -0.1500001, z: -0.28284284} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971001327158052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001327158050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4845971001588102158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001588102148} + - component: {fileID: 4845971001588102149} + - component: {fileID: 4845971001588102146} + - component: {fileID: 4845971001588102147} + - component: {fileID: 4845971001588102145} + - component: {fileID: 4845971001588102144} + m_Layer: 0 + m_Name: Body + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001588102148 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001588102158} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.1500001, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971001114446568} + - {fileID: 4845971001730692037} + - {fileID: 4845971000262255015} + - {fileID: 4845971000893344349} + - {fileID: 4845971001327157979} + - {fileID: 4845971001325249078} + - {fileID: 4845971000566026494} + - {fileID: 4845971000943818107} + m_Father: {fileID: 4845971001715176651} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845971001588102149 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001588102158} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &4845971001588102146 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001588102158} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &4845971001588102147 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001588102158} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &4845971001588102145 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001588102158} + serializedVersion: 2 + m_Mass: 20 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!114 &4845971001588102144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001588102158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4845971001622533707 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001622533706} + - component: {fileID: 4845971001622533697} + - component: {fileID: 4845971001622533711} + - component: {fileID: 4845971001622533708} + - component: {fileID: 4845971001622533709} + m_Layer: 0 + m_Name: foreleg1 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001622533706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001622533707} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.0799999, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971001073609773} + m_Father: {fileID: 4845971001325249078} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!136 &4845971001622533697 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001622533707} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.15 + m_Height: 1.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &4845971001622533711 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001622533707} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &4845971001622533708 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001622533707} + m_ConnectedBody: {fileID: 4845971001325249072} + m_Anchor: {x: 0, y: -0.75, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.000000029802322, y: 0.33000004, z: 0.000000029802322} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 150 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &4845971001622533709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001622533707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!1 &4845971001702883006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001702882993} + - component: {fileID: 4845971001702882995} + - component: {fileID: 4845971001702882992} + m_Layer: 0 + m_Name: grounded viz + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001702882993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001702883006} + m_LocalRotation: {x: 0.7071068, y: 0.000000044703484, z: 0.000000044703484, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.85, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.38461503} + m_Children: [] + m_Father: {fileID: 4845971001110375627} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4845971001702882995 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001702883006} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001702882992 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001702883006} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4845971001715176661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001715176651} + - component: {fileID: 4845971001715176648} + - component: {fileID: 4845971001715176649} + - component: {fileID: 4845971001715176662} + - component: {fileID: 4845971001715176663} + - component: {fileID: 4845971001715176660} + - component: {fileID: 8968436865147081600} + m_Layer: 0 + m_Name: Crawler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001715176651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4845971001588102148} + - {fileID: 2310084103354264149} + - {fileID: 2270141184585723026} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4845971001715176648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 32 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 20 + BranchSizes: + VectorActionDescriptions: [] + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: bbcd28cb64db74359918183c55bc5844, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Crawler + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &4845971001715176649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2f37c30a5e8d04117947188818902ef3, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + m_TargetWalkingSpeed: 15 + TargetPrefab: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + body: {fileID: 4845971001588102148} + leg0Upper: {fileID: 4845971001327157979} + leg0Lower: {fileID: 4845971000000621467} + leg1Upper: {fileID: 4845971001325249078} + leg1Lower: {fileID: 4845971001622533706} + leg2Upper: {fileID: 4845971000566026494} + leg2Lower: {fileID: 4845971000281612789} + leg3Upper: {fileID: 4845971000943818107} + leg3Lower: {fileID: 4845971000245862063} + useFootGroundedVisualization: 0 + foot0: {fileID: 4845971001702882992} + foot1: {fileID: 4845970999844939483} + foot2: {fileID: 4845970999929964134} + foot3: {fileID: 4845971001308907666} + groundedMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + unGroundedMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} +--- !u!114 &4845971001715176662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b29724baddfa457da6eeab446fa49ca, type: 3} + m_Name: + m_EditorClassIdentifier: + maxJointSpring: 40000 + jointDampen: 5000 + maxJointForceLimit: 20000 + bodyPartsList: [] +--- !u!114 &4845971001715176663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 0 +--- !u!114 &4845971001715176660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &8968436865147081600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001715176661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df0f8be9a37d6486498061e2cbc4cd94, type: 3} + m_Name: + m_EditorClassIdentifier: + RootBody: {fileID: 4845971001588102145} + VirtualRoot: {fileID: 2270141184585723037} + Settings: + UseModelSpaceTranslations: 1 + UseModelSpaceRotations: 1 + UseLocalSpaceTranslations: 0 + UseLocalSpaceRotations: 1 + UseModelSpaceLinearVelocity: 1 + UseLocalSpaceLinearVelocity: 0 + UseJointPositionsAndAngles: 0 + UseJointForces: 0 + sensorName: +--- !u!1 &4845971001730692034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4845971001730692037} + - component: {fileID: 4845971001730692039} + - component: {fileID: 4845971001730692036} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4845971001730692037 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001730692034} + m_LocalRotation: {x: -0.22353469, y: 0.0000001490116, z: 0.00000004470348, w: 0.97469604} + m_LocalPosition: {x: 0.198, y: 0.125, z: 0.437} + m_LocalScale: {x: 0.1285858, y: 0.12858574, z: 0.07360156} + m_Children: [] + m_Father: {fileID: 4845971001588102148} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -25.833002, y: 0, z: 0} +--- !u!33 &4845971001730692039 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001730692034} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4845971001730692036 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4845971001730692034} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1001 &4357529801223143938 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4845971001715176651} + m_Modifications: + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999519, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_Name + value: OrientationCube + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 72f745913c5a34df5aaadd5c1f0024cb, type: 3} +--- !u!1 &2270141184585723037 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2591864627249999519, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + m_PrefabInstance: {fileID: 4357529801223143938} + m_PrefabAsset: {fileID: 0} +--- !u!4 &2270141184585723026 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + m_PrefabInstance: {fileID: 4357529801223143938} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8385811723256971493 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4845971001715176651} + m_Modifications: + - target: {fileID: 2514443435243387629, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_Name + value: DirectionIndicator + objectReference: {fileID: 0} + - target: {fileID: 6026464216722085689, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: targetToLookAt + value: + objectReference: {fileID: 0} + - target: {fileID: 6026464216722085689, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: updatedByAgent + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6026464216722085689, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: transformToFollow + value: + objectReference: {fileID: 4845971001588102148} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalScale.x + value: 1.2346765 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalScale.y + value: 0.020598097 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalScale.z + value: 1.2346765 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.26191 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalPosition.y + value: -1.996 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.000000037244 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e568400ebedb3474fac505995f12ed4a, type: 3} +--- !u!4 &2310084103354264149 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + m_PrefabInstance: {fileID: 8385811723256971493} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Crawler.prefab.meta b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Crawler.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..422297a540fba1c3973fd3c8df89adf1afe2d904 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Crawler.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0456c89e8c9c243d595b039fe7aa0bf9 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Platform.prefab b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Platform.prefab new file mode 100644 index 0000000000000000000000000000000000000000..cee132c16f57f3e8c03cadb5e45849520756a4b0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Platform.prefab @@ -0,0 +1,599 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6813981368972186340 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6810587057221831324} + m_Layer: 0 + m_Name: DynamicPlatform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6810587057221831324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6813981368972186340} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6810593986226363672} + - {fileID: 6810815557394078638} + - {fileID: 3421283062001101768} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6813985912316207378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6810928998577562200} + - component: {fileID: 6837517112052221168} + - component: {fileID: 6829370902646183816} + - component: {fileID: 6805880649474809276} + m_Layer: 0 + m_Name: Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6810928998577562200 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6813985912316207378} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 50, y: 0, z: 0} + m_LocalScale: {x: 1, y: 5, z: 101} + m_Children: [] + m_Father: {fileID: 6810593986226363672} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6837517112052221168 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6813985912316207378} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6829370902646183816 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6813985912316207378} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6805880649474809276 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6813985912316207378} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6814087175198011730 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6810951867078124798} + - component: {fileID: 6836746497152517328} + - component: {fileID: 6827502220462136834} + - component: {fileID: 6808420949623700432} + m_Layer: 0 + m_Name: Wall (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6810951867078124798 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814087175198011730} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 50} + m_LocalScale: {x: 100, y: 5, z: 1} + m_Children: [] + m_Father: {fileID: 6810593986226363672} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6836746497152517328 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814087175198011730} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6827502220462136834 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814087175198011730} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6808420949623700432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814087175198011730} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6814139680395863842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6817320856451798586} + - component: {fileID: 6837353565563782272} + - component: {fileID: 6829376291544629644} + - component: {fileID: 6808627505318981872} + m_Layer: 0 + m_Name: Wall (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6817320856451798586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814139680395863842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -50} + m_LocalScale: {x: 100, y: 5, z: 1} + m_Children: [] + m_Father: {fileID: 6810593986226363672} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6837353565563782272 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814139680395863842} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6829376291544629644 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814139680395863842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6808627505318981872 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814139680395863842} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6814265275650057734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6810815557394078638} + - component: {fileID: 6840107661781754058} + - component: {fileID: 6808624286610137948} + - component: {fileID: 6829276305650059684} + m_Layer: 14 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6810815557394078638 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814265275650057734} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 1, z: 100} + m_Children: [] + m_Father: {fileID: 6810587057221831324} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &6840107661781754058 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814265275650057734} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6808624286610137948 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814265275650057734} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &6829276305650059684 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814265275650057734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6814457128619926090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6810593986226363672} + m_Layer: 0 + m_Name: Walls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6810593986226363672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6814457128619926090} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6810928998577562200} + - {fileID: 6810760910859358630} + - {fileID: 6810951867078124798} + - {fileID: 6817320856451798586} + m_Father: {fileID: 6810587057221831324} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6816166698542906210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6810760910859358630} + - component: {fileID: 6837318880424580882} + - component: {fileID: 6827488706199143686} + - component: {fileID: 6808790228207097120} + m_Layer: 0 + m_Name: Wall (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6810760910859358630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6816166698542906210} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -50, y: 0, z: 0} + m_LocalScale: {x: 1, y: 5, z: 101} + m_Children: [] + m_Father: {fileID: 6810593986226363672} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6837318880424580882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6816166698542906210} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6827488706199143686 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6816166698542906210} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6808790228207097120 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6816166698542906210} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1001 &7798701981554532099 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 6810587057221831324} + m_Modifications: + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalPosition.y + value: 2.506 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4845971001715176661, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + propertyPath: m_Name + value: CrawlerBase + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0456c89e8c9c243d595b039fe7aa0bf9, type: 3} +--- !u!4 &3421283062001101768 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4845971001715176651, guid: 0456c89e8c9c243d595b039fe7aa0bf9, + type: 3} + m_PrefabInstance: {fileID: 7798701981554532099} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Platform.prefab.meta b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Platform.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..b0797211a4b978e67b5d23611256cf12f5218182 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Prefabs/Platform.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0058b366f9d6d44a3ba35beb06b0174b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Scenes.meta b/Project/Assets/ML-Agents/Examples/Crawler/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..5737ee4e64b23a4b12223b885a8dc0627e214478 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60c86839d191546c9bf58ce6a2824987 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Scenes/Crawler.unity b/Project/Assets/ML-Agents/Examples/Crawler/Scenes/Crawler.unity new file mode 100644 index 0000000000000000000000000000000000000000..8ecffe53fed8fc5bf8d319287ef96994a1752d80 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Scenes/Crawler.unity @@ -0,0 +1,1841 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4497121, g: 0.49977785, b: 0.57563704, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 79aaf90aa86a141da808b7768b9f1403, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &50848268 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000067949295 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000684 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000006571412 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.3300071 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000069588423 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000648 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000066310167 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000672 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (6) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &193531851 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &211847168 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000067949295 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000684 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000006571412 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.3300071 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000069588423 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000648 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000066310167 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000672 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (9) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &299886800 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.000003993511 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999605 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000042170286 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999632 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000038295984 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.3299957 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000004157424 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999593 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (4) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &447179058 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000005528331 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000812 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000005558133 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000812 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.000005275011 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000815 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000052005053 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000815 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (8) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &510366082 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000014007092 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000147 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000011771917 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.3300017 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000015646219 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000106 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000012367964 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000132 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (3) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &618717998 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000012516975 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000135 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000010281801 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000153 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000016391277 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000124 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000014603138 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000147 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (1) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!4 &1018218737 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3421283061859478279, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + m_PrefabInstance: {fileID: 6815147847201213989} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1032273979 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000005528331 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000812 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.000005558133 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000812 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.000005275011 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000815 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000052005053 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000815 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (7) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &1213576437 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.00000526011 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999733 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.0000052303076 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999733 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000055134296 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999736 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.2828369 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000055879354 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.32999736 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (5) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1 &1392866527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392866532} + - component: {fileID: 1392866531} + - component: {fileID: 1392866529} + - component: {fileID: 1392866533} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &1392866529 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 +--- !u!20 &1392866531 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 100 + field of view: 60 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1392866532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_LocalRotation: {x: 0.19826692, y: -0.6208851, z: 0.16636568, w: 0.73994213} + m_LocalPosition: {x: 10.2, y: 7.16, z: -0.59} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 30, y: -80, z: 0} +--- !u!114 &1392866533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec40c70d5160b47cd8deaab79e24892c, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 1018218737} + smoothingTime: 0 +--- !u!1001 &1481808307 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1 &2095421678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2095421679} + - component: {fileID: 2095421681} + - component: {fileID: 2095421680} + m_Layer: 0 + m_Name: CrawlerSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2095421679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2095421680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1.5 + fixedDeltaTime: 0.01333 + maximumDeltaTime: 0.15 + solverIterations: 12 + solverVelocityIterations: 12 + reuseCollisionCallbacks: 1 +--- !u!114 &2095421681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3d6f3eab3776b4fb79724ac4216dfd7b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &2116139621 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.00000013411045 + objectReference: {fileID: 0} + - target: {fileID: 3421283060234122398, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000273 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.00000016391277 + objectReference: {fileID: 0} + - target: {fileID: 3421283060481531636, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000273 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.00000011920929 + objectReference: {fileID: 0} + - target: {fileID: 3421283060527587746, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000275 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061002948601, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061162633796, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061592120356, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061594373425, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.28284454 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.0000001937151 + objectReference: {fileID: 0} + - target: {fileID: 3421283061826799951, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.33000275 + objectReference: {fileID: 0} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform (2) + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} +--- !u!1001 &6815147847201213989 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: TargetPrefab + value: + objectReference: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + - target: {fileID: 3421283062001101770, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: typeOfCrawler + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6810587057221831324, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6813981368972186340, guid: 0058b366f9d6d44a3ba35beb06b0174b, + type: 3} + propertyPath: m_Name + value: DynamicPlatform + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0058b366f9d6d44a3ba35beb06b0174b, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Scenes/Crawler.unity.meta b/Project/Assets/ML-Agents/Examples/Crawler/Scenes/Crawler.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..7c605a1266b00a659f91fe5b412d9bef00b473de --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Scenes/Crawler.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7ada20f4d7ae04f2d946cac21135ecbd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Scripts.meta b/Project/Assets/ML-Agents/Examples/Crawler/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..89fa2636506a555885a4fb90456e7efed1388afa --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: be27b48ac06d945b5865f65f96d7d008 +folderAsset: yes +timeCreated: 1508478093 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs b/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..f9b3b32023f34dd277e3a9c45b9fee9e60336fc4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs @@ -0,0 +1,290 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgentsExamples; +using Unity.MLAgents.Sensors; +using Random = UnityEngine.Random; + +[RequireComponent(typeof(JointDriveController))] // Required to set joint forces +public class CrawlerAgent : Agent +{ + + [Header("Walk Speed")] + [Range(0.1f, m_maxWalkingSpeed)] + [SerializeField] + [Tooltip( + "The speed the agent will try to match.\n\n" + + "TRAINING:\n" + + "For VariableSpeed envs, this value will randomize at the start of each training episode.\n" + + "Otherwise the agent will try to match the speed set here.\n\n" + + "INFERENCE:\n" + + "During inference, VariableSpeed agents will modify their behavior based on this value " + + "whereas the CrawlerDynamic & CrawlerStatic agents will run at the speed specified during training " + )] + //The walking speed to try and achieve + private float m_TargetWalkingSpeed = m_maxWalkingSpeed; + + const float m_maxWalkingSpeed = 15; //The max walking speed + + //The current target walking speed. Clamped because a value of zero will cause NaNs + public float TargetWalkingSpeed + { + get { return m_TargetWalkingSpeed; } + set { m_TargetWalkingSpeed = Mathf.Clamp(value, .1f, m_maxWalkingSpeed); } + } + + //The direction an agent will walk during training. + [Header("Target To Walk Towards")] + public Transform TargetPrefab; //Target prefab to use in Dynamic envs + private Transform m_Target; //Target the agent will walk towards during training. + + [Header("Body Parts")][Space(10)] public Transform body; + public Transform leg0Upper; + public Transform leg0Lower; + public Transform leg1Upper; + public Transform leg1Lower; + public Transform leg2Upper; + public Transform leg2Lower; + public Transform leg3Upper; + public Transform leg3Lower; + + //This will be used as a stabilized model space reference point for observations + //Because ragdolls can move erratically during training, using a stabilized reference transform improves learning + OrientationCubeController m_OrientationCube; + + //The indicator graphic gameobject that points towards the target + DirectionIndicator m_DirectionIndicator; + JointDriveController m_JdController; + + [Header("Foot Grounded Visualization")] + [Space(10)] + public bool useFootGroundedVisualization; + + public MeshRenderer foot0; + public MeshRenderer foot1; + public MeshRenderer foot2; + public MeshRenderer foot3; + public Material groundedMaterial; + public Material unGroundedMaterial; + + public override void Initialize() + { + SpawnTarget(TargetPrefab, transform.position); //spawn target + + m_OrientationCube = GetComponentInChildren(); + m_DirectionIndicator = GetComponentInChildren(); + m_JdController = GetComponent(); + + //Setup each body part + m_JdController.SetupBodyPart(body); + m_JdController.SetupBodyPart(leg0Upper); + m_JdController.SetupBodyPart(leg0Lower); + m_JdController.SetupBodyPart(leg1Upper); + m_JdController.SetupBodyPart(leg1Lower); + m_JdController.SetupBodyPart(leg2Upper); + m_JdController.SetupBodyPart(leg2Lower); + m_JdController.SetupBodyPart(leg3Upper); + m_JdController.SetupBodyPart(leg3Lower); + } + + /// + /// Spawns a target prefab at pos + /// + /// + /// + void SpawnTarget(Transform prefab, Vector3 pos) + { + m_Target = Instantiate(prefab, pos, Quaternion.identity, transform.parent); + } + + /// + /// Loop over body parts and reset them to initial conditions. + /// + public override void OnEpisodeBegin() + { + foreach (var bodyPart in m_JdController.bodyPartsDict.Values) + { + bodyPart.Reset(bodyPart); + } + + //Random start rotation to help generalize + body.rotation = Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0); + + UpdateOrientationObjects(); + + //Set our goal walking speed + TargetWalkingSpeed = Random.Range(0.1f, m_maxWalkingSpeed); + } + + /// + /// Add relevant information on each body part to observations. + /// + public void CollectObservationBodyPart(BodyPart bp, VectorSensor sensor) + { + //GROUND CHECK + sensor.AddObservation(bp.groundContact.touchingGround); // Is this bp touching the ground + + if (bp.rb.transform != body) + { + sensor.AddObservation(bp.currentStrength / m_JdController.maxJointForceLimit); + } + } + + /// + /// Loop over body parts to add them to observation. + /// + public override void CollectObservations(VectorSensor sensor) + { + var cubeForward = m_OrientationCube.transform.forward; + + //velocity we want to match + var velGoal = cubeForward * TargetWalkingSpeed; + //ragdoll's avg vel + var avgVel = GetAvgVelocity(); + + //current ragdoll velocity. normalized + sensor.AddObservation(Vector3.Distance(velGoal, avgVel)); + //avg body vel relative to cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(avgVel)); + //vel goal relative to cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(velGoal)); + //rotation delta + sensor.AddObservation(Quaternion.FromToRotation(body.forward, cubeForward)); + + //Add pos of target relative to orientation cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformPoint(m_Target.transform.position)); + + RaycastHit hit; + float maxRaycastDist = 10; + if (Physics.Raycast(body.position, Vector3.down, out hit, maxRaycastDist)) + { + sensor.AddObservation(hit.distance / maxRaycastDist); + } + else + sensor.AddObservation(1); + + foreach (var bodyPart in m_JdController.bodyPartsList) + { + CollectObservationBodyPart(bodyPart, sensor); + } + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + { + // The dictionary with all the body parts in it are in the jdController + var bpDict = m_JdController.bodyPartsDict; + + var continuousActions = actionBuffers.ContinuousActions; + var i = -1; + // Pick a new target joint rotation + bpDict[leg0Upper].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[leg1Upper].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[leg2Upper].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[leg3Upper].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[leg0Lower].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[leg1Lower].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[leg2Lower].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[leg3Lower].SetJointTargetRotation(continuousActions[++i], 0, 0); + + // Update joint strength + bpDict[leg0Upper].SetJointStrength(continuousActions[++i]); + bpDict[leg1Upper].SetJointStrength(continuousActions[++i]); + bpDict[leg2Upper].SetJointStrength(continuousActions[++i]); + bpDict[leg3Upper].SetJointStrength(continuousActions[++i]); + bpDict[leg0Lower].SetJointStrength(continuousActions[++i]); + bpDict[leg1Lower].SetJointStrength(continuousActions[++i]); + bpDict[leg2Lower].SetJointStrength(continuousActions[++i]); + bpDict[leg3Lower].SetJointStrength(continuousActions[++i]); + } + + void FixedUpdate() + { + UpdateOrientationObjects(); + + // If enabled the feet will light up green when the foot is grounded. + // This is just a visualization and isn't necessary for function + if (useFootGroundedVisualization) + { + foot0.material = m_JdController.bodyPartsDict[leg0Lower].groundContact.touchingGround + ? groundedMaterial + : unGroundedMaterial; + foot1.material = m_JdController.bodyPartsDict[leg1Lower].groundContact.touchingGround + ? groundedMaterial + : unGroundedMaterial; + foot2.material = m_JdController.bodyPartsDict[leg2Lower].groundContact.touchingGround + ? groundedMaterial + : unGroundedMaterial; + foot3.material = m_JdController.bodyPartsDict[leg3Lower].groundContact.touchingGround + ? groundedMaterial + : unGroundedMaterial; + } + + var cubeForward = m_OrientationCube.transform.forward; + + // Set reward for this step according to mixture of the following elements. + // a. Match target speed + //This reward will approach 1 if it matches perfectly and approach zero as it deviates + var matchSpeedReward = GetMatchingVelocityReward(cubeForward * TargetWalkingSpeed, GetAvgVelocity()); + + // b. Rotation alignment with target direction. + //This reward will approach 1 if it faces the target direction perfectly and approach zero as it deviates + var lookAtTargetReward = (Vector3.Dot(cubeForward, body.forward) + 1) * .5F; + + AddReward(matchSpeedReward * lookAtTargetReward); + } + + /// + /// Update OrientationCube and DirectionIndicator + /// + void UpdateOrientationObjects() + { + m_OrientationCube.UpdateOrientation(body, m_Target); + if (m_DirectionIndicator) + { + m_DirectionIndicator.MatchOrientation(m_OrientationCube.transform); + } + } + + /// + ///Returns the average velocity of all of the body parts + ///Using the velocity of the body only has shown to result in more erratic movement from the limbs + ///Using the average helps prevent this erratic movement + /// + Vector3 GetAvgVelocity() + { + Vector3 velSum = Vector3.zero; + Vector3 avgVel = Vector3.zero; + + //ALL RBS + int numOfRb = 0; + foreach (var item in m_JdController.bodyPartsList) + { + numOfRb++; + velSum += item.rb.velocity; + } + + avgVel = velSum / numOfRb; + return avgVel; + } + + /// + /// Normalized value of the difference in actual speed vs goal walking speed. + /// + public float GetMatchingVelocityReward(Vector3 velocityGoal, Vector3 actualVelocity) + { + //distance between our actual velocity and goal velocity + var velDeltaMagnitude = Mathf.Clamp(Vector3.Distance(actualVelocity, velocityGoal), 0, TargetWalkingSpeed); + + //return the value on a declining sigmoid shaped curve that decays from 1 to 0 + //This reward will approach 1 if it matches perfectly and approach zero as it deviates + return Mathf.Pow(1 - Mathf.Pow(velDeltaMagnitude / TargetWalkingSpeed, 2), 2); + } + + /// + /// Agent touched the target + /// + public void TouchedTarget() + { + AddReward(1f); + } +} diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs.meta b/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b572571aed9fe3b891fb9e73ba7d02cd945e9f66 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2f37c30a5e8d04117947188818902ef3 +timeCreated: 1525902546 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/TFModels.meta b/Project/Assets/ML-Agents/Examples/Crawler/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..1bbb387ce814202c7724b4c02a95e96da49bc61d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b737d19c4232404389d1325808e5b4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx b/Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx new file mode 100644 index 0000000000000000000000000000000000000000..b9a5d1d374639c934daf2061944c8326d04b9d71 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70b88ee08231eb73caf8fd2e272c316f377576339b09ab96b8d3887202992a11 +size 2471987 diff --git a/Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx.meta b/Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..601ade87b8447b2f2b16d36542c9f525091cdd14 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Crawler/TFModels/Crawler.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: bbcd28cb64db74359918183c55bc5844 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape.meta new file mode 100644 index 0000000000000000000000000000000000000000..d9a3a18e0045780c776c994c97db33cd54b51f87 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ee1af8bad0b14bfcb4eb70491929ffa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7716b0a8c0203c30ccd3f62070f1f8bacaa8525 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52cc95bb0ae204a03b020b5e25025f92 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Cave.fbx b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Cave.fbx new file mode 100644 index 0000000000000000000000000000000000000000..2439e57040f05f100aefeaa187e2a0878e498263 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Cave.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Cave.fbx.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Cave.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..dbc1e417bec6008e393fd1c293dc46f5a6310e0c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Cave.fbx.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 1a4b9dc81d687497caac7ac380e5acdd +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: Cave_Out + 2100002: Cave_In + 2100004: Black + 2100006: Brown + 2300000: //RootNode + 3300000: //RootNode + 4300000: Cave + 4300002: Cave.001 + 4300004: Cave.002 + 4300006: Door + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Door.fbx b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Door.fbx new file mode 100644 index 0000000000000000000000000000000000000000..7aa7cba7ec9a7fb7f9b3bffc74a6f961de95a55b Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Door.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Door.fbx.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Door.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..9da9abc79ca6937b564fa4bbe28e8f9bf0378e4d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Meshes/Door.fbx.meta @@ -0,0 +1,107 @@ +fileFormatVersion: 2 +guid: 5803970ff94c74f61a1cd918fde282f3 +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 100002: Door + 100004: Door.001 + 400000: //RootNode + 400002: Door + 400004: Door.001 + 2100000: Brown + 2100002: Black + 2300000: //RootNode + 2300002: Door + 2300004: Door.001 + 3300000: //RootNode + 3300002: Door + 3300004: Door.001 + 4300000: Door + 4300002: Door.001 + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..98e21b3739eb3e2fa448a5d2c6672d607f0c6232 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 182a0bae21aa344beaf59b06aa99949e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Column.prefab b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Column.prefab new file mode 100644 index 0000000000000000000000000000000000000000..fe3253f2132c56c831c02d6c8c444b64dd39ce4f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Column.prefab @@ -0,0 +1,379 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5170350252622397370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7328666170508585541} + - component: {fileID: 6568014831067932417} + - component: {fileID: 7278222074700544653} + - component: {fileID: 2815987982214703338} + m_Layer: 0 + m_Name: Column + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7328666170508585541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5170350252622397370} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.74, z: 0} + m_LocalScale: {x: 1.4362822, y: 1.7236917, z: 1.4362822} + m_Children: [] + m_Father: {fileID: 390460369537414899} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6568014831067932417 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5170350252622397370} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7278222074700544653 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5170350252622397370} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!136 &2815987982214703338 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5170350252622397370} + m_Material: {fileID: 13400000, guid: 8c6374adc4d814c2eb5ecdfe810d813b, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!1 &5184265935082300294 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 390460369537414899} + m_Layer: 0 + m_Name: Column + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &390460369537414899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5184265935082300294} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4884441527609926036} + - {fileID: 2901603255210522549} + - {fileID: 7328666170508585541} + - {fileID: 885181397963073148} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7429498452301802124 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2901603255210522549} + - component: {fileID: 4130230494857075820} + - component: {fileID: 197902968593208654} + - component: {fileID: 4263965291085057186} + m_Layer: 0 + m_Name: Base + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2901603255210522549 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7429498452301802124} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 390460369537414899} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4130230494857075820 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7429498452301802124} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &197902968593208654 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7429498452301802124} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &4263965291085057186 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7429498452301802124} + m_Material: {fileID: 13400000, guid: 8c6374adc4d814c2eb5ecdfe810d813b, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7775582511060856483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 885181397963073148} + - component: {fileID: 848763209821142729} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &885181397963073148 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7775582511060856483} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 5.52, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 390460369537414899} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &848763209821142729 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7775582511060856483} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 2 + m_Color: {r: 0.73393774, g: 0, b: 1, a: 1} + m_Intensity: 3 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &9201545320674351572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4884441527609926036} + - component: {fileID: 3395963178530386893} + - component: {fileID: 2734607649822643584} + - component: {fileID: 1667004977327845187} + m_Layer: 0 + m_Name: Top + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4884441527609926036 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9201545320674351572} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.504, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 390460369537414899} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3395963178530386893 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9201545320674351572} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2734607649822643584 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9201545320674351572} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1667004977327845187 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9201545320674351572} + m_Material: {fileID: 13400000, guid: 8c6374adc4d814c2eb5ecdfe810d813b, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Column.prefab.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Column.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..8a3fae5f340182b9821da9b84c964f25584da8e5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Column.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 69a64861a32794a5db3bcea0cae3bef2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapeAgent.prefab b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapeAgent.prefab new file mode 100644 index 0000000000000000000000000000000000000000..b041802a542ce33c8ffd742998966f0bd622d289 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapeAgent.prefab @@ -0,0 +1,1139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &187594449133941413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7673585347177426643} + - component: {fileID: 6173693226783682253} + m_Layer: 0 + m_Name: Point Light (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7673585347177426643 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187594449133941413} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2436825414900162128} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &6173693226783682253 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187594449133941413} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 2 + m_Color: {r: 1, g: 0.84751457, b: 0, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1216433730649090929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218825373964742187} + - component: {fileID: 1194518838639731333} + - component: {fileID: 1202927884078995131} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1218825373964742187 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216433730649090929} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.546, y: 0.00000023842, z: -0.0000015497} + m_LocalScale: {x: 0.2150884, y: 0.21877661, z: 0.33626845} + m_Children: [] + m_Father: {fileID: 2436825414900162128} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1194518838639731333 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216433730649090929} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &1202927884078995131 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216433730649090929} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2137845444014311057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6368173101304807141} + - component: {fileID: 9113196012897707438} + m_Layer: 0 + m_Name: RaySensor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6368173101304807141 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2137845444014311057} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4830954159424380931} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &9113196012897707438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2137845444014311057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: + - wall + - agent + - dragon + - key + - lock + - portal + m_RaysPerDirection: 7 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 40 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!1 &2436825414407777345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2436825414407777346} + - component: {fileID: 2436825414407777356} + - component: {fileID: 2436825414407777347} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2436825414407777346 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414407777345} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.193, y: -0.104, z: 0} + m_LocalScale: {x: 0.09221716, y: 0.22793984, z: 0.021225972} + m_Children: [] + m_Father: {fileID: 2436825414900162128} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2436825414407777356 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414407777345} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2436825414407777347 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414407777345} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2436825414835437428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2436825414835437429} + - component: {fileID: 2436825414835437431} + - component: {fileID: 2436825414835437430} + m_Layer: 0 + m_Name: Cube + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2436825414835437429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414835437428} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.76183397, y: 0.16375361, z: 0.092911} + m_Children: [] + m_Father: {fileID: 2436825414900162128} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2436825414835437431 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414835437428} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2436825414835437430 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414835437428} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2436825414900162134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2436825414900162128} + - component: {fileID: 2436825414900162135} + m_Layer: 0 + m_Name: Key (1) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2436825414900162128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414900162134} + m_LocalRotation: {x: -0, y: -1, z: -0, w: -0.00000043213362} + m_LocalPosition: {x: -0, y: -0.242, z: 0.636} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1218825373964742187} + - {fileID: 2436825414835437429} + - {fileID: 2436825415646652127} + - {fileID: 2436825414407777346} + - {fileID: 7673585347177426643} + m_Father: {fileID: 4830954159424380931} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2436825414900162135 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825414900162134} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1.2106373, y: 0.45549554, z: 0.17897394} + m_Center: {x: -0.18605793, y: 0, z: 0} +--- !u!1 &2436825415646652126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2436825415646652127} + - component: {fileID: 2436825415646652121} + - component: {fileID: 2436825415646652120} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2436825415646652127 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825415646652126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.327, y: -0.104, z: 0} + m_LocalScale: {x: 0.09221716, y: 0.22793984, z: 0.021225972} + m_Children: [] + m_Father: {fileID: 2436825414900162128} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2436825415646652121 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825415646652126} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2436825415646652120 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436825415646652126} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4827975017233522969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4833553929194791147} + - component: {fileID: 4860077400079869543} + - component: {fileID: 4852051910386996351} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4833553929194791147 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4827975017233522969} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4833515257360461001} + - {fileID: 4833846141624772473} + - {fileID: 4833790454923037669} + - {fileID: 4833705176301321345} + m_Father: {fileID: 4830954159424380931} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4860077400079869543 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4827975017233522969} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4852051910386996351 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4827975017233522969} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4828192055451917579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4833515257360461001} + - component: {fileID: 4862890519708232413} + - component: {fileID: 4852453583486556443} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4833515257360461001 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828192055451917579} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4833553929194791147} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &4862890519708232413 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828192055451917579} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4852453583486556443 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828192055451917579} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4828233698206621445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4830954159424380931} + - component: {fileID: 4883834951077095103} + - component: {fileID: 4796904010917588665} + - component: {fileID: 4828233698206621442} + - component: {fileID: 4894871342018226889} + - component: {fileID: 4570231187053985045} + - component: {fileID: 8910333024216141797} + - component: {fileID: 7100891525901242114} + m_Layer: 0 + m_Name: DungeonEscapeAgent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4830954159424380931 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: -2.99, y: 0.58, z: 6.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4833553929194791147} + - {fileID: 2436825414900162128} + - {fileID: 6860412223676067345} + - {fileID: 6368173101304807141} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &4883834951077095103 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 4 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &4796904010917588665 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 07000000 + VectorActionSize: 07000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: b56a13a0e996e4f719001b218cb87d5a, type: 3} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: DungeonEscape + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &4828233698206621442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c960fbbc7844c269d4d14ae68abfc8, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + MyKey: {fileID: 2436825414900162134} + IHaveAKey: 0 +--- !u!65 &4894871342018226889 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4570231187053985045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &8910333024216141797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &7100891525901242114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828233698206621445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df0f8be9a37d6486498061e2cbc4cd94, type: 3} + m_Name: + m_EditorClassIdentifier: + RootBody: {fileID: 4883834951077095103} + VirtualRoot: {fileID: 4828233698206621445} + Settings: + UseModelSpaceTranslations: 0 + UseModelSpaceRotations: 0 + UseLocalSpaceTranslations: 1 + UseLocalSpaceRotations: 1 + UseModelSpaceLinearVelocity: 1 + UseLocalSpaceLinearVelocity: 0 + UseJointPositionsAndAngles: 0 + UseJointForces: 0 + sensorName: RBSensor +--- !u!1 &4828344911005358243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4833705176301321345} + - component: {fileID: 4862887178631482863} + - component: {fileID: 4850648228057519659} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4833705176301321345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828344911005358243} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4833553929194791147} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &4862887178631482863 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828344911005358243} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4850648228057519659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828344911005358243} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4828711287818606205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4833846141624772473} + - component: {fileID: 4860474262737281137} + - component: {fileID: 4850388781517606003} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4833846141624772473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828711287818606205} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4833553929194791147} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &4860474262737281137 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828711287818606205} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4850388781517606003 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828711287818606205} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4830071351459599461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4833790454923037669} + - component: {fileID: 4860103406395061201} + - component: {fileID: 4852390331458797357} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4833790454923037669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4830071351459599461} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4833553929194791147} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &4860103406395061201 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4830071351459599461} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4852390331458797357 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4830071351459599461} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1001 &2776982836279613095 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4830954159424380931} + m_Modifications: + - target: {fileID: 6285520391000694526, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_Name + value: Sword + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.697 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.936 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.256 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0.79335374 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.6087609 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 75 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalScale.x + value: 1.3531 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalScale.y + value: 1.3531 + objectReference: {fileID: 0} + - target: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + propertyPath: m_LocalScale.z + value: 1.3531 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, type: 3} +--- !u!4 &6860412223676067345 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8772105788424992950, guid: 2e7a35edaf71a428eb9473e1e0dd60d8, + type: 3} + m_PrefabInstance: {fileID: 2776982836279613095} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapeAgent.prefab.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapeAgent.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..b27eef787792bfcf365ed7676a7be81b627c96ee --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapeAgent.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f3c5280e4ae094a9a9b8b6702630c941 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapePlatform.prefab b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapePlatform.prefab new file mode 100644 index 0000000000000000000000000000000000000000..a50a67095e22101df245fd3a01ac419c19fcfeec --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapePlatform.prefab @@ -0,0 +1,4285 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &122736271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 122736272} + - component: {fileID: 122736273} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &122736272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122736271} + m_LocalRotation: {x: 0.34413856, y: -0, z: -0, w: 0.9389189} + m_LocalPosition: {x: 0, y: 4.4, z: -4.02} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 855554230} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 40.258003, y: 0, z: 0} +--- !u!108 &122736273 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122736271} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 0 + m_Color: {r: 1, g: 0.8196079, b: 0, a: 1} + m_Intensity: 5.14 + m_Range: 11.55 + m_SpotAngle: 67 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &597878121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597878122} + - component: {fileID: 597878124} + - component: {fileID: 597878123} + m_Layer: 0 + m_Name: Top (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &597878122 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597878121} + m_LocalRotation: {x: -0, y: -0.70710695, z: -0.70710665, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 727239225} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.7, y: 4.6} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &597878124 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597878121} + m_CullTransparentMesh: 0 +--- !u!114 &597878123 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597878121} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: R.I.P. +--- !u!1 &727239224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 727239225} + - component: {fileID: 727239227} + - component: {fileID: 727239226} + m_Layer: 0 + m_Name: Canvas (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &727239225 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727239224} + m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0.1794} + m_LocalScale: {x: 0.008411843, y: 0.008411843, z: 0.008411843} + m_Children: + - {fileID: 1616696762} + - {fileID: 597878122} + m_Father: {fileID: 3787047094105629174} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.044, y: 0.359} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &727239227 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727239224} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &727239226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727239224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &735508124 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 735508125} + - component: {fileID: 735508126} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &735508125 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 735508124} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0.38, z: 1.13} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2509355368631227656} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &735508126 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 735508124} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 2 + m_Color: {r: 0.508012, g: 0.27205884, b: 1, a: 0} + m_Intensity: 3 + m_Range: 20 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &855554229 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 855554230} + m_Layer: 0 + m_Name: Door + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &855554230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 855554229} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.08, z: 12.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1092216848} + - {fileID: 1338056009} + - {fileID: 1061239967} + - {fileID: 2066251693} + - {fileID: 122736272} + m_Father: {fileID: 2512227112770887927} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1061239966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1061239967} + - component: {fileID: 1061239970} + - component: {fileID: 1061239969} + - component: {fileID: 1061239968} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1061239967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061239966} + m_LocalRotation: {x: -0.4999999, y: -0.50000036, z: 0.49999955, w: 0.5000002} + m_LocalPosition: {x: 1.88, y: 0.9008719, z: 0} + m_LocalScale: {x: 3.8002362, y: 0.73576576, z: 0.7358694} + m_Children: [] + m_Father: {fileID: 855554230} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 90.00001} +--- !u!33 &1061239970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061239966} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1061239969 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061239966} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1061239968 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061239966} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1092514864 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1092216848} + - component: {fileID: 1093511216} + - component: {fileID: 1094511344} + - component: {fileID: 1092514865} + m_Layer: 0 + m_Name: Door + m_TagString: lock + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1092216848 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092514864} + m_LocalRotation: {x: -0, y: -1, z: -0, w: -0.00000020861623} + m_LocalPosition: {x: 0, y: 1.305, z: 0} + m_LocalScale: {x: 1.4839724, y: 1.2982, z: 0.1593569} + m_Children: [] + m_Father: {fileID: 855554230} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 0} +--- !u!33 &1093511216 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092514864} + m_Mesh: {fileID: 4300000, guid: 5803970ff94c74f61a1cd918fde282f3, type: 3} +--- !u!23 &1094511344 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092514864} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: daf629e39cc0f4521b64c93cd9604da9, type: 2} + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1092514865 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092514864} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2.0207882, y: 2, z: 6.7046976} + m_Center: {x: -0.010394215, y: 0, z: 0.008564472} +--- !u!1 &1338056008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1338056009} + - component: {fileID: 1338056012} + - component: {fileID: 1338056011} + - component: {fileID: 1338056010} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1338056009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338056008} + m_LocalRotation: {x: -0.4999999, y: -0.50000036, z: 0.49999955, w: 0.5000002} + m_LocalPosition: {x: 0.055900093, y: 2.7933898, z: 0} + m_LocalScale: {x: 0.26153988, y: 0.9547327, z: 5.5364285} + m_Children: [] + m_Father: {fileID: 855554230} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 90.00001} +--- !u!33 &1338056012 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338056008} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1338056011 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338056008} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1338056010 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338056008} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1616696761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1616696762} + - component: {fileID: 1616696764} + - component: {fileID: 1616696763} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1616696762 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616696761} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 727239225} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1616696764 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616696761} + m_CullTransparentMesh: 0 +--- !u!114 &1616696763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616696761} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: R.I.P. +--- !u!1 &2066251692 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2066251693} + - component: {fileID: 2066251696} + - component: {fileID: 2066251695} + - component: {fileID: 2066251694} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2066251693 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066251692} + m_LocalRotation: {x: -0.4999999, y: -0.50000036, z: 0.49999955, w: 0.5000002} + m_LocalPosition: {x: -1.85, y: 0.9008726, z: 0} + m_LocalScale: {x: 3.8002362, y: 0.73576576, z: 0.7358694} + m_Children: [] + m_Father: {fileID: 855554230} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 90.00001} +--- !u!33 &2066251696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066251692} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &2066251695 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066251692} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2066251694 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066251692} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &911118975161550538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 548895699083096315} + - component: {fileID: 4726175627339307103} + - component: {fileID: 2472406453664050571} + m_Layer: 0 + m_Name: symbol_tri (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &548895699083096315 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911118975161550538} + m_LocalRotation: {x: 0.09445331, y: -0.7007701, z: -0.09445333, w: 0.70076996} + m_LocalPosition: {x: 0, y: -0.091, z: -0.486} + m_LocalScale: {x: 0.47041953, y: 0.47848627, z: 0.50306386} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: -15.353001} +--- !u!33 &4726175627339307103 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911118975161550538} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &2472406453664050571 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911118975161550538} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2202834478014615809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678598427556467608} + - component: {fileID: 2696183826015717906} + - component: {fileID: 4686597778367549683} + m_Layer: 0 + m_Name: Cylinder (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &678598427556467608 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2202834478014615809} + m_LocalRotation: {x: -0, y: -0, z: 0.70710677, w: 0.7071069} + m_LocalPosition: {x: 0, y: -0.204, z: 0.09} + m_LocalScale: {x: 0.25573382, y: 0.5136488, z: 0.25573382} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90.00001} +--- !u!33 &2696183826015717906 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2202834478014615809} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4686597778367549683 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2202834478014615809} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2508780962454810567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2512227112770887927} + - component: {fileID: 2508780962454810585} + m_Layer: 0 + m_Name: DungeonEscapePlatform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2512227112770887927 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2508780962454810567} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8779779321292819043} + - {fileID: 1946577846877886252} + - {fileID: 2703729361278952574} + - {fileID: 3120833420669031682} + - {fileID: 2504981702954228879} + - {fileID: 2505010432764816755} + - {fileID: 5077650082126629012} + - {fileID: 6004310785920398643} + - {fileID: 4595390234605931067} + - {fileID: 3256266078125681910} + - {fileID: 6596214203003378520} + - {fileID: 3787047094105629174} + - {fileID: 2509355368631227656} + - {fileID: 855554230} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2508780962454810585 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2508780962454810567} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f0d060d8c3074edf80fc69e847d4c60, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxEnvironmentSteps: 15000 + areaBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + ground: {fileID: 2510282137140402629} + AgentsList: + - Agent: {fileID: 1947817820235474989} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + Col: {fileID: 0} + - Agent: {fileID: 2706162302604925823} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + Col: {fileID: 0} + - Agent: {fileID: 3117835335064070659} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + Col: {fileID: 0} + DragonsList: + - Agent: {fileID: 5077650082126629013} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + Col: {fileID: 0} + T: {fileID: 0} + IsDead: 0 + UseRandomAgentRotation: 1 + UseRandomAgentPosition: 1 + Key: {fileID: 8779779321292819045} + Tombstone: {fileID: 8509354141486642307} +--- !u!65 &1900544067 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2509355368631257384} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.5642252, y: 1.3710333, z: 1.3398124} + m_Center: {x: 0.014466446, y: 0.3198482, z: -0.23022196} +--- !u!1 &2510174829506741297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2505010432764816755} + - component: {fileID: 2498231417305782501} + - component: {fileID: 2486008379916989723} + - component: {fileID: 2466794589262439461} + - component: {fileID: 2466309046692522965} + - component: {fileID: 2466405745422940479} + - component: {fileID: 2464789205403552447} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2505010432764816755 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 2512227112770887927} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2498231417305782501 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_Mesh: {fileID: 4300000, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &2486008379916989723 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2466794589262439461 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 500, z: 2600} + m_Center: {x: -1275, y: 200, z: 0} +--- !u!65 &2466309046692522965 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 500, z: 2600} + m_Center: {x: 1275, y: 200, z: 0} +--- !u!65 &2466405745422940479 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 500, z: 50} + m_Center: {x: 0, y: 200, z: -1275} +--- !u!65 &2464789205403552447 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510174829506741297} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 500, z: 50} + m_Center: {x: 0, y: 200, z: 1275} +--- !u!1 &2510282137140402629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2504981702954228879} + - component: {fileID: 2496359195955404423} + - component: {fileID: 2486179936371304649} + - component: {fileID: 2466782249486914335} + m_Layer: 0 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2504981702954228879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510282137140402629} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.00000030517577} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 2512227112770887927} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2496359195955404423 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510282137140402629} + m_Mesh: {fileID: 4300002, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &2486179936371304649 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510282137140402629} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2466782249486914335 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2510282137140402629} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 100, z: 2500} + m_Center: {x: 0, y: -50, z: 0} +--- !u!1 &3447891373635522591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1217434569933415950} + - component: {fileID: 7161424905750472537} + - component: {fileID: 8154465784412662352} + m_Layer: 0 + m_Name: symbol_tri (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1217434569933415950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3447891373635522591} + m_LocalRotation: {x: -0.2239958, y: -0.67069066, z: 0.22399585, w: 0.6706906} + m_LocalPosition: {x: 0, y: 0.068784, z: -0.78068} + m_LocalScale: {x: 0.19560985, y: 0.19896418, z: 0.20918402} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 36.936} +--- !u!33 &7161424905750472537 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3447891373635522591} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &8154465784412662352 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3447891373635522591} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3624549956437875650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6938592742642531128} + - component: {fileID: 554293147514226833} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6938592742642531128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3624549956437875650} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8779779321292819043} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &554293147514226833 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3624549956437875650} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 2 + m_Color: {r: 1, g: 0.84751457, b: 0, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &3661358348292068901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8036081884762782462} + - component: {fileID: 7183121558389611921} + m_Layer: 0 + m_Name: Point Light (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8036081884762782462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3661358348292068901} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8779779322856150852} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &7183121558389611921 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3661358348292068901} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 2 + m_Color: {r: 1, g: 0.84751457, b: 0, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &5077650080554994338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5077650080554994339} + - component: {fileID: 5077650080554994337} + - component: {fileID: 5077650080554994336} + m_Layer: 0 + m_Name: AgentCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5077650080554994339 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650080554994338} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5077650081069033756} + - {fileID: 5077650082213059190} + - {fileID: 5077650081587505497} + - {fileID: 5077650082217634342} + - {fileID: 2958191645010248863} + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5077650080554994337 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650080554994338} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5077650080554994336 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650080554994338} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5077650081069033759 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5077650081069033756} + - component: {fileID: 5077650081069033754} + - component: {fileID: 5077650081069033757} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5077650081069033756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650081069033759} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 5077650080554994339} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &5077650081069033754 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650081069033759} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5077650081069033757 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650081069033759} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5077650081587505496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5077650081587505497} + - component: {fileID: 5077650081587505511} + - component: {fileID: 5077650081587505510} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5077650081587505497 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650081587505496} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 5077650080554994339} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &5077650081587505511 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650081587505496} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5077650081587505510 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650081587505496} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5077650082126629015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5077650082126629012} + - component: {fileID: 5077650082126629011} + - component: {fileID: 5077650082126629010} + - component: {fileID: 5077650082126629013} + - component: {fileID: 4008082029526698281} + m_Layer: 0 + m_Name: Dragon + m_TagString: dragon + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5077650082126629012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082126629015} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0.79, z: 8} + m_LocalScale: {x: 1.5, y: 1.5, z: 1.5} + m_Children: + - {fileID: 8779779322856150852} + - {fileID: 5077650080554994339} + - {fileID: 5601278951885008473} + - {fileID: 3953429833550893063} + - {fileID: 6943226055311585957} + - {fileID: 1507483723289043153} + - {fileID: 548895699083096315} + - {fileID: 1217434569933415950} + - {fileID: 394644812845369672} + - {fileID: 833781855212413733} + - {fileID: 678598427556467608} + - {fileID: 4460202611073496445} + m_Father: {fileID: 2512227112770887927} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &5077650082126629011 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082126629015} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 1 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!65 &5077650082126629010 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082126629015} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5077650082126629013 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082126629015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9685bac759362440ea71765cdece3305, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 2509355368631227656} + walkSpeed: 3 +--- !u!114 &4008082029526698281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082126629015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df05ec10e50114a9d92106879d04d89d, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: portal + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2508780962454810585} + m_MethodName: BaddieTouchedBlock + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onCollisionStayEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5077650082213059177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5077650082213059190} + - component: {fileID: 5077650082213059188} + - component: {fileID: 5077650082213059191} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5077650082213059190 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082213059177} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 5077650080554994339} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &5077650082213059188 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082213059177} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5077650082213059191 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082213059177} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5077650082217634329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5077650082217634342} + - component: {fileID: 5077650082217634340} + - component: {fileID: 5077650082217634343} + m_Layer: 0 + m_Name: brow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5077650082217634342 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082217634329} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.301, y: 0.153, z: 0.354} + m_LocalScale: {x: 0.34619895, y: 0.071193695, z: 0.38559937} + m_Children: [] + m_Father: {fileID: 5077650080554994339} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5077650082217634340 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082217634329} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5077650082217634343 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077650082217634329} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5253722757297504066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5252180348008708632} + - component: {fileID: 5231658317211514550} + - component: {fileID: 5240208108727222920} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5252180348008708632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5253722757297504066} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.546, y: 0.00000023842, z: -0.0000015497} + m_LocalScale: {x: 0.2150884, y: 0.21877661, z: 0.33626845} + m_Children: [] + m_Father: {fileID: 8779779321292819043} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5231658317211514550 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5253722757297504066} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &5240208108727222920 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5253722757297504066} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5253722757879423589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5252180349589071679} + - component: {fileID: 5231658316636072849} + - component: {fileID: 5240208108212281263} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5252180349589071679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5253722757879423589} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.546, y: 0.00000023842, z: -0.0000015497} + m_LocalScale: {x: 0.2150884, y: 0.21877661, z: 0.33626845} + m_Children: [] + m_Father: {fileID: 8779779322856150852} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5231658316636072849 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5253722757879423589} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &5240208108212281263 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5253722757879423589} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5288063750852837898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 833781855212413733} + - component: {fileID: 6550986044008217116} + - component: {fileID: 3111968953593360909} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &833781855212413733 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5288063750852837898} + m_LocalRotation: {x: -0, y: -0, z: 0.70710677, w: 0.7071069} + m_LocalPosition: {x: 0, y: 0.235, z: 0.203} + m_LocalScale: {x: 0.25573382, y: 0.5136488, z: 0.25573382} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90.00001} +--- !u!33 &6550986044008217116 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5288063750852837898} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3111968953593360909 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5288063750852837898} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5520447375319628230 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 394644812845369672} + - component: {fileID: 7070871459202071146} + - component: {fileID: 6915871607808941355} + m_Layer: 0 + m_Name: symbol_tri (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &394644812845369672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5520447375319628230} + m_LocalRotation: {x: -0.28173026, y: -0.6419399, z: 0.2864713, w: 0.65305096} + m_LocalPosition: {x: 0.00034459, y: -0.049652, z: -0.87038} + m_LocalScale: {x: 0.19560985, y: 0.19896418, z: 0.20918402} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: -0.010000001, y: -89.021, z: 47.381} +--- !u!33 &7070871459202071146 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5520447375319628230} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &6915871607808941355 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5520447375319628230} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5598353280596395805 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5601278951885008473} + - component: {fileID: 5603387523512952843} + - component: {fileID: 5613735759601062555} + m_Layer: 0 + m_Name: symbol_tri + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5601278951885008473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5598353280596395805} + m_LocalRotation: {x: 0.09461005, y: -0.7007489, z: -0.09461005, w: 0.7007488} + m_LocalPosition: {x: 0, y: 0.545, z: 0.274} + m_LocalScale: {x: 0.2471312, y: 0.25136903, z: 0.26428065} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: -15.378} +--- !u!33 &5603387523512952843 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5598353280596395805} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &5613735759601062555 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5598353280596395805} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6268900308998503817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847014809095299248} + - component: {fileID: 627403496043531113} + - component: {fileID: 3700390254873412171} + - component: {fileID: 777397809615346599} + m_Layer: 0 + m_Name: Base + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1847014809095299248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6268900308998503817} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.51799995, z: 0} + m_LocalScale: {x: 1.0200038, y: 0.36920372, z: 0.4360794} + m_Children: [] + m_Father: {fileID: 3787047094105629174} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &627403496043531113 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6268900308998503817} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3700390254873412171 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6268900308998503817} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6fdf8e49597ff42648c9e99d7ecfc005, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &777397809615346599 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6268900308998503817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6782654587070147852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1729219874895944510} + - component: {fileID: 2732782813754607553} + - component: {fileID: 1356632120503500534} + - component: {fileID: 1299975169627824584} + m_Layer: 0 + m_Name: Base (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1729219874895944510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6782654587070147852} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.19200003, z: 0} + m_LocalScale: {x: 0.8813762, y: 1.1947674, z: 0.27564585} + m_Children: [] + m_Father: {fileID: 3787047094105629174} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2732782813754607553 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6782654587070147852} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1356632120503500534 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6782654587070147852} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6fdf8e49597ff42648c9e99d7ecfc005, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1299975169627824584 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6782654587070147852} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7008580144096699899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2958191645010248863} + - component: {fileID: 4048913347822061948} + - component: {fileID: 1932283588779249622} + m_Layer: 0 + m_Name: brow (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2958191645010248863 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008580144096699899} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.277, y: 0.188, z: 0.354} + m_LocalScale: {x: 0.34619895, y: 0.071193695, z: 0.38559937} + m_Children: [] + m_Father: {fileID: 5077650080554994339} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4048913347822061948 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008580144096699899} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1932283588779249622 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008580144096699899} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7164677553690102025 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4460202611073496445} + - component: {fileID: 5787439358656849900} + - component: {fileID: 7509957720396500838} + m_Layer: 0 + m_Name: Cylinder (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4460202611073496445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7164677553690102025} + m_LocalRotation: {x: -0, y: -0, z: 0.70710677, w: 0.7071069} + m_LocalPosition: {x: 0, y: 0.071, z: -0.269} + m_LocalScale: {x: 0.25573382, y: 0.5136488, z: 0.25573382} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90.00001} +--- !u!33 &5787439358656849900 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7164677553690102025} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7509957720396500838 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7164677553690102025} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8509354141486642307 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3787047094105629174} + m_Layer: 0 + m_Name: TombStone + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3787047094105629174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8509354141486642307} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 7.96} + m_LocalScale: {x: 1.1888, y: 1.1888, z: 1.1888} + m_Children: + - {fileID: 1847014809095299248} + - {fileID: 1729219874895944510} + - {fileID: 727239225} + m_Father: {fileID: 2512227112770887927} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8624242337151513329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6943226055311585957} + - component: {fileID: 8215587267412856540} + - component: {fileID: 5613370021170606344} + m_Layer: 0 + m_Name: symbol_tri (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6943226055311585957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8624242337151513329} + m_LocalRotation: {x: 0.012624189, y: -0.7069941, z: -0.012624161, w: 0.70699406} + m_LocalPosition: {x: 0, y: 0.52854455, z: -0.22534148} + m_LocalScale: {x: 0.19463895, y: 0.19797663, z: 0.20814574} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: -2.046} +--- !u!33 &8215587267412856540 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8624242337151513329} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &5613370021170606344 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8624242337151513329} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8635476436308142936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1507483723289043153} + - component: {fileID: 6577654365092337681} + - component: {fileID: 5134633199650899105} + m_Layer: 0 + m_Name: symbol_tri (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1507483723289043153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635476436308142936} + m_LocalRotation: {x: -0.13768795, y: -0.693572, z: 0.13768798, w: 0.6935719} + m_LocalPosition: {x: 0, y: 0.49497733, z: -0.2775967} + m_LocalScale: {x: 0.19463895, y: 0.19797663, z: 0.20814574} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 22.457} +--- !u!33 &6577654365092337681 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635476436308142936} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &5134633199650899105 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635476436308142936} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8779779321292819045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779321292819043} + - component: {fileID: 8779779321292819044} + - component: {fileID: 1113207653574249446} + m_Layer: 0 + m_Name: Key + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779321292819043 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321292819045} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -6.18} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5252180348008708632} + - {fileID: 8779779321760246598} + - {fileID: 8779779322006024940} + - {fileID: 8779779322909390961} + - {fileID: 6938592742642531128} + m_Father: {fileID: 2512227112770887927} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8779779321292819044 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321292819045} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.2106373, y: 0.45549554, z: 0.17897394} + m_Center: {x: -0.18605793, y: 0, z: 0} +--- !u!54 &1113207653574249446 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321292819045} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &8779779321335571797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779321335571798} + - component: {fileID: 8779779321335571800} + - component: {fileID: 8779779321335571799} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779321335571798 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321335571797} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.193, y: -0.104, z: 0} + m_LocalScale: {x: 0.09221716, y: 0.22793984, z: 0.021225972} + m_Children: [] + m_Father: {fileID: 8779779322856150852} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8779779321335571800 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321335571797} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8779779321335571799 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321335571797} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8779779321760246599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779321760246598} + - component: {fileID: 8779779321760246596} + - component: {fileID: 8779779321760246597} + m_Layer: 0 + m_Name: Cube + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779321760246598 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321760246599} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.76183397, y: 0.16375361, z: 0.092911} + m_Children: [] + m_Father: {fileID: 8779779321292819043} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8779779321760246596 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321760246599} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8779779321760246597 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779321760246599} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8779779322006024941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779322006024940} + - component: {fileID: 8779779322006024938} + - component: {fileID: 8779779322006024939} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779322006024940 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322006024941} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.327, y: -0.104, z: 0} + m_LocalScale: {x: 0.09221716, y: 0.22793984, z: 0.021225972} + m_Children: [] + m_Father: {fileID: 8779779321292819043} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8779779322006024938 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322006024941} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8779779322006024939 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322006024941} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8779779322512584650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779322512584651} + - component: {fileID: 8779779322512584653} + - component: {fileID: 8779779322512584652} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779322512584651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322512584650} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.327, y: -0.104, z: 0} + m_LocalScale: {x: 0.09221716, y: 0.22793984, z: 0.021225972} + m_Children: [] + m_Father: {fileID: 8779779322856150852} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8779779322512584653 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322512584650} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8779779322512584652 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322512584650} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8779779322856150850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779322856150852} + - component: {fileID: 8779779322856150851} + m_Layer: 0 + m_Name: Key + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779322856150852 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322856150850} + m_LocalRotation: {x: -0, y: -1, z: -0, w: -0.00000043213362} + m_LocalPosition: {x: -0, y: -0.245, z: 0.626} + m_LocalScale: {x: 0.6666667, y: 0.6666667, z: 0.6666667} + m_Children: + - {fileID: 5252180349589071679} + - {fileID: 8779779323323577953} + - {fileID: 8779779322512584651} + - {fileID: 8779779321335571798} + - {fileID: 8036081884762782462} + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8779779322856150851 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322856150850} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.2106373, y: 0.45549554, z: 0.17897394} + m_Center: {x: -0.18605793, y: 0, z: 0} +--- !u!1 &8779779322909390962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779322909390961} + - component: {fileID: 8779779322909390975} + - component: {fileID: 8779779322909390960} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779322909390961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322909390962} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.193, y: -0.104, z: 0} + m_LocalScale: {x: 0.09221716, y: 0.22793984, z: 0.021225972} + m_Children: [] + m_Father: {fileID: 8779779321292819043} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8779779322909390975 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322909390962} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8779779322909390960 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779322909390962} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8779779323323577952 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8779779323323577953} + - component: {fileID: 8779779323323577955} + - component: {fileID: 8779779323323577954} + m_Layer: 0 + m_Name: Cube + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8779779323323577953 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779323323577952} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.76183397, y: 0.16375361, z: 0.092911} + m_Children: [] + m_Father: {fileID: 8779779322856150852} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8779779323323577955 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779323323577952} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8779779323323577954 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8779779323323577952} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &9116515103692363163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3953429833550893063} + - component: {fileID: 1518515895689722077} + - component: {fileID: 4135946774714765614} + m_Layer: 0 + m_Name: symbol_tri (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3953429833550893063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9116515103692363163} + m_LocalRotation: {x: -0.009743731, y: -0.7070397, z: 0.009743738, w: 0.7070396} + m_LocalPosition: {x: 0, y: 0.501, z: 0.095} + m_LocalScale: {x: 0.2471312, y: 0.25136903, z: 0.26428065} + m_Children: [] + m_Father: {fileID: 5077650082126629012} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 1.5790001} +--- !u!33 &1518515895689722077 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9116515103692363163} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &4135946774714765614 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9116515103692363163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1001 &2509355368631357320 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Name + value: Cave + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_TagString + value: portal + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalPosition.x + value: 11.58 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalPosition.y + value: 0.73 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalPosition.z + value: -11.59 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3826832 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238796 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45.000004 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalScale.x + value: 3.0007749 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalScale.y + value: 3.4470768 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalScale.z + value: 1.3172948 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Materials.Array.data[1] + value: + objectReference: {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + - target: {fileID: 2300000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 16fb7514bd09f43f8ae773b97bf3819d, type: 2} + - target: {fileID: 2300000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Materials.Array.data[2] + value: + objectReference: {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} +--- !u!1 &2509355368631257384 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, + type: 3} + m_PrefabInstance: {fileID: 2509355368631357320} + m_PrefabAsset: {fileID: 0} +--- !u!4 &2509355368631227656 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, + type: 3} + m_PrefabInstance: {fileID: 2509355368631357320} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &2908099531758426629 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.x + value: -4.5 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.z + value: -4 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5184265935082300294, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_Name + value: Column (6) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 69a64861a32794a5db3bcea0cae3bef2, type: 3} +--- !u!4 &3256266078125681910 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + m_PrefabInstance: {fileID: 2908099531758426629} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &4228082564882595016 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.x + value: 4.5 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.z + value: -4 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5184265935082300294, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_Name + value: Column (5) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 69a64861a32794a5db3bcea0cae3bef2, type: 3} +--- !u!4 &4595390234605931067 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + m_PrefabInstance: {fileID: 4228082564882595016} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6212902035242730432 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.x + value: 4.5 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.z + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5184265935082300294, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_Name + value: Column (4) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 69a64861a32794a5db3bcea0cae3bef2, type: 3} +--- !u!4 &6004310785920398643 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + m_PrefabInstance: {fileID: 6212902035242730432} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6343703853638268719 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 4828233698206621445, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_Name + value: DungeonEscapeAgent + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.x + value: -2.99 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.58 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.z + value: 1.1 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3c5280e4ae094a9a9b8b6702630c941, type: 3} +--- !u!114 &1947817820235474989 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4828233698206621442, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + m_PrefabInstance: {fileID: 6343703853638268719} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c960fbbc7844c269d4d14ae68abfc8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1946577846877886252 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + m_PrefabInstance: {fileID: 6343703853638268719} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6836821016094846379 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.x + value: -4.5 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalPosition.z + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5184265935082300294, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + propertyPath: m_Name + value: Column (7) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 69a64861a32794a5db3bcea0cae3bef2, type: 3} +--- !u!4 &6596214203003378520 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 390460369537414899, guid: 69a64861a32794a5db3bcea0cae3bef2, + type: 3} + m_PrefabInstance: {fileID: 6836821016094846379} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &7390245021363782781 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 4796904010917588665, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_Model + value: + objectReference: {fileID: 11400000, guid: b56a13a0e996e4f719001b218cb87d5a, + type: 3} + - target: {fileID: 4796904010917588665, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_BehaviorType + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4828233698206621445, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_Name + value: DungeonEscapeAgent (1) + objectReference: {fileID: 0} + - target: {fileID: 4829017773430270460, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: ShowGizmos + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.01 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.58 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.z + value: 1.0999999 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3c5280e4ae094a9a9b8b6702630c941, type: 3} +--- !u!114 &2706162302604925823 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4828233698206621442, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + m_PrefabInstance: {fileID: 7390245021363782781} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c960fbbc7844c269d4d14ae68abfc8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &2703729361278952574 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + m_PrefabInstance: {fileID: 7390245021363782781} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &7513572358868350209 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2512227112770887927} + m_Modifications: + - target: {fileID: 4796904010917588665, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_Model + value: + objectReference: {fileID: 11400000, guid: b56a13a0e996e4f719001b218cb87d5a, + type: 3} + - target: {fileID: 4796904010917588665, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_BehaviorType + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4828233698206621445, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_Name + value: DungeonEscapeAgent (2) + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.x + value: 3.01 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.58 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalPosition.z + value: 1.0999999 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3c5280e4ae094a9a9b8b6702630c941, type: 3} +--- !u!114 &3117835335064070659 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4828233698206621442, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + m_PrefabInstance: {fileID: 7513572358868350209} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c960fbbc7844c269d4d14ae68abfc8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &3120833420669031682 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4830954159424380931, guid: f3c5280e4ae094a9a9b8b6702630c941, + type: 3} + m_PrefabInstance: {fileID: 7513572358868350209} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapePlatform.prefab.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapePlatform.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..8c9333187f6599cf8787cad400f001e169978c4a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/DungeonEscapePlatform.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5878a6d7527854d0a84b133c7c6efe55 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Sword.prefab b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Sword.prefab new file mode 100644 index 0000000000000000000000000000000000000000..e4ccf54c11f316fcc95a7d7dd84f6442a8b86630 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Sword.prefab @@ -0,0 +1,578 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &880523008701045142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6336432208962364492} + - component: {fileID: 7171523569959246079} + - component: {fileID: 7979107975059020850} + m_Layer: 0 + m_Name: Cube + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6336432208962364492 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 880523008701045142} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.16384082, y: 0.69100887, z: 0.04210779} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7171523569959246079 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 880523008701045142} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7979107975059020850 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 880523008701045142} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6fdf8e49597ff42648c9e99d7ecfc005, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2981109370270338809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3509013554597332474} + - component: {fileID: 5798697336692697841} + - component: {fileID: 7290655559508665360} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3509013554597332474 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2981109370270338809} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.378, z: 0} + m_LocalScale: {x: 0.12343061, y: 0.12343061, z: 0.32400537} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5798697336692697841 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2981109370270338809} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &7290655559508665360 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2981109370270338809} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3926071613285613986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8893163176571066595} + - component: {fileID: 5916335186314198833} + - component: {fileID: 3298868567831570272} + m_Layer: 0 + m_Name: Cylinder (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8893163176571066595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3926071613285613986} + m_LocalRotation: {x: -0.70710677, y: 2.8421706e-14, z: -0, w: 0.7071069} + m_LocalPosition: {x: 0, y: -0.38, z: 0} + m_LocalScale: {x: 0.1681245, y: 0.060624015, z: 0.1681245} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: -90.00001, y: 0, z: 0} +--- !u!33 &5916335186314198833 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3926071613285613986} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3298868567831570272 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3926071613285613986} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4906921352773174966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7831757270307252616} + - component: {fileID: 3220919968159847475} + - component: {fileID: 5435862911997543179} + m_Layer: 0 + m_Name: symbol_tri (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7831757270307252616 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4906921352773174966} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.413, z: 0} + m_LocalScale: {x: 0.090800464, y: 0.11799568, z: 0.11799568} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3220919968159847475 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4906921352773174966} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &5435862911997543179 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4906921352773174966} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6fdf8e49597ff42648c9e99d7ecfc005, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4997696087336533843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5561100400066123843} + - component: {fileID: 895235124130169443} + - component: {fileID: 452513402949209409} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5561100400066123843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4997696087336533843} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.381, z: 0} + m_LocalScale: {x: 0.3745031, y: 0.094451435, z: 0.10686698} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895235124130169443 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4997696087336533843} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &452513402949209409 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4997696087336533843} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5531443850584416103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2663616659132156189} + - component: {fileID: 6946795223150584703} + - component: {fileID: 4550853145762769995} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2663616659132156189 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5531443850584416103} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.559, z: 0} + m_LocalScale: {x: 0.15990455, y: 0.39524767, z: 0.08766782} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6946795223150584703 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5531443850584416103} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4550853145762769995 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5531443850584416103} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6285520391000694526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8772105788424992950} + m_Layer: 0 + m_Name: Sword + m_TagString: key + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8772105788424992950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6285520391000694526} + m_LocalRotation: {x: -0, y: -0.00000043213362, z: -0, w: 1} + m_LocalPosition: {x: -5.06, y: 5.33, z: -1.86} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3496700650422646169} + - {fileID: 7831757270307252616} + - {fileID: 3509013554597332474} + - {fileID: 6336432208962364492} + - {fileID: 2663616659132156189} + - {fileID: 5561100400066123843} + - {fileID: 8893163176571066595} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7618810706562414047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3496700650422646169} + - component: {fileID: 2938354221899943890} + - component: {fileID: 4767159747164160553} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3496700650422646169 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7618810706562414047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.595, z: 0} + m_LocalScale: {x: 0.15200818, y: 0.15200818, z: 0.10670974} + m_Children: [] + m_Father: {fileID: 8772105788424992950} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2938354221899943890 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7618810706562414047} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4767159747164160553 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7618810706562414047} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Sword.prefab.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Sword.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..9cab601dcbe5549256d634edf93eb3ae3060a735 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Prefabs/Sword.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2e7a35edaf71a428eb9473e1e0dd60d8 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..1262a87ac4e5644b5d434ff0f29374d3ac94925e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18bd62bca21784541a3ef42aff1e4950 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes/DungeonEscape.unity b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes/DungeonEscape.unity new file mode 100644 index 0000000000000000000000000000000000000000..dabaeb2bf508013703b3c51ea8385900b14609fc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes/DungeonEscape.unity @@ -0,0 +1,2869 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &17818024 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (2) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -13.35 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1001 &173285734 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1098058649} + m_Modifications: + - target: {fileID: 100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Name + value: Cave (1) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_TagString + value: portal + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalPosition.x + value: 10.02 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalPosition.y + value: -0.49 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalPosition.z + value: -10.03 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.y + value: -0.38268322 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238797 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45.000004 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalScale.x + value: 2.6794443 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalScale.y + value: 4.0728016 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_LocalScale.z + value: 1.5312235 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Materials.Array.data[1] + value: + objectReference: {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + - target: {fileID: 2300000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 32b1ad7c4e23446c595136f58bd029e2, type: 2} + - target: {fileID: 2300000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} + propertyPath: m_Materials.Array.data[2] + value: + objectReference: {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, type: 3} +--- !u!4 &173285735 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: 1a4b9dc81d687497caac7ac380e5acdd, + type: 3} + m_PrefabInstance: {fileID: 173285734} + m_PrefabAsset: {fileID: 0} +--- !u!1 &173285736 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 1a4b9dc81d687497caac7ac380e5acdd, + type: 3} + m_PrefabInstance: {fileID: 173285734} + m_PrefabAsset: {fileID: 0} +--- !u!65 &173285737 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 173285736} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.5642252, y: 1.3710333, z: 1.3398124} + m_Center: {x: 0.014466446, y: 0.3198482, z: -0.23022196} +--- !u!1001 &181881484 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (7) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: -32.7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -6.8 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1001 &193836179 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537121661968964, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_Name + value: Directional_Light (1) + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.07134617 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.78060937 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.090664804 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.614279 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 13.25 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -103.6 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Color.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Color.g + value: 0.5308633 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Color.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Intensity + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_RenderMode + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &217755128 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 217755129} + - component: {fileID: 217755131} + - component: {fileID: 217755130} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &217755129 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 217755128} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.079, z: 0} + m_LocalScale: {x: 1.8438, y: -0.010202298, z: 1.8438} + m_Children: [] + m_Father: {fileID: 1166194418} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &217755130 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 217755128} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &217755131 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 217755128} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &265172814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 265172815} + m_Layer: 0 + m_Name: GameObject (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &265172815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265172814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 758716584} + m_Father: {fileID: 1098058649} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &325022185 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (9) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: -32.7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -27.47 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &447778170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 447778171} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &447778171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447778170} + m_LocalRotation: {x: -0, y: -0.75311875, z: -0, w: -0.6578846} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1642302954} + m_Father: {fileID: 1098058649} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -262.27698, z: 0} +--- !u!1001 &502449554 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537121661968964, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Intensity + value: 0.3 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_RenderMode + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &567024547 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (11) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: -32.7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -34.66 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1001 &645444467 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (5) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -34.66 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &758716583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758716584} + m_Layer: 0 + m_Name: Column (8) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &758716584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758716583} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 11, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1138856772} + - {fileID: 1002431229} + - {fileID: 1297166137} + m_Father: {fileID: 265172815} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &775780880 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 775780881} + - component: {fileID: 775780884} + - component: {fileID: 775780883} + - component: {fileID: 775780882} + m_Layer: 0 + m_Name: Column + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &775780881 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775780880} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.74, z: 0} + m_LocalScale: {x: 1.4362822, y: 1.7236917, z: 1.4362822} + m_Children: [] + m_Father: {fileID: 1119869061} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &775780882 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775780880} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &775780883 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775780880} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &775780884 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775780880} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &912141533 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (3) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -20.15 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1001 &947059763 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (10) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: -32.7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -13.35 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &1002431228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1002431229} + - component: {fileID: 1002431232} + - component: {fileID: 1002431231} + - component: {fileID: 1002431230} + m_Layer: 0 + m_Name: Base + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1002431229 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002431228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 758716584} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1002431230 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002431228} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1002431231 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002431228} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1002431232 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002431228} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: SingleCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 20, z: -14.17} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 56.2 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1098058648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1098058649} + m_Layer: 0 + m_Name: Arena + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1098058649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098058648} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 5.28, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 173285735} + - {fileID: 1166194418} + - {fileID: 447778171} + - {fileID: 1191551622} + - {fileID: 265172815} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1119869060 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1119869061} + m_Layer: 0 + m_Name: Column (8) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1119869061 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119869060} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1832528958} + - {fileID: 1177016902} + - {fileID: 775780881} + m_Father: {fileID: 1191551622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1123926674 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (6) + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: -32.7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &1138856771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1138856772} + - component: {fileID: 1138856775} + - component: {fileID: 1138856774} + - component: {fileID: 1138856773} + m_Layer: 0 + m_Name: Top + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1138856772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138856771} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.504, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 758716584} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1138856773 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138856771} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1138856774 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138856771} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1138856775 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138856771} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &1166194417 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1098058649} + m_Modifications: + - target: {fileID: 100000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_Name + value: ArenaWalls + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalScale.x + value: 15.371 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalScale.y + value: 15.371 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_LocalScale.z + value: 15.371 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} +--- !u!4 &1166194418 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: f6ecb5c7cab484e639c060714bfd6d51, + type: 3} + m_PrefabInstance: {fileID: 1166194417} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1177016901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1177016902} + - component: {fileID: 1177016905} + - component: {fileID: 1177016904} + - component: {fileID: 1177016903} + m_Layer: 0 + m_Name: Base + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1177016902 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1177016901} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 1119869061} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1177016903 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1177016901} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1177016904 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1177016901} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1177016905 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1177016901} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1191551621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1191551622} + m_Layer: 0 + m_Name: GameObject (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1191551622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191551621} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1119869061} + m_Father: {fileID: 1098058649} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1266796624 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (8) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: -32.7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -20.15 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &1297166136 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1297166137} + - component: {fileID: 1297166140} + - component: {fileID: 1297166139} + - component: {fileID: 1297166138} + m_Layer: 0 + m_Name: Column + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1297166137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297166136} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.74, z: 0} + m_LocalScale: {x: 1.4362822, y: 1.7236917, z: 1.4362822} + m_Children: [] + m_Father: {fileID: 758716584} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &1297166138 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297166136} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &1297166139 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297166136} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1297166140 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297166136} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1461663079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1461663080} + - component: {fileID: 1461663083} + - component: {fileID: 1461663082} + - component: {fileID: 1461663081} + m_Layer: 0 + m_Name: Column + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1461663080 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461663079} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.74, z: 0} + m_LocalScale: {x: 1.4362822, y: 1.7236917, z: 1.4362822} + m_Children: [] + m_Father: {fileID: 1642302954} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &1461663081 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461663079} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &1461663082 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461663079} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1461663083 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461663079} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &1462033492 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (4) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -27.47 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &1467769737 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1467769738} + - component: {fileID: 1467769741} + - component: {fileID: 1467769740} + - component: {fileID: 1467769739} + m_Layer: 0 + m_Name: Base + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1467769738 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467769737} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 1642302954} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1467769739 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467769737} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1467769740 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467769737} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1467769741 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467769737} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1472984957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1472984958} + - component: {fileID: 1472984961} + - component: {fileID: 1472984960} + - component: {fileID: 1472984959} + m_Layer: 0 + m_Name: Top + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1472984958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472984957} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.504, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 1642302954} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1472984959 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472984957} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1472984960 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472984957} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1472984961 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472984957} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236050} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: PushBlockSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1.5 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 3 + agentRotationSpeed: 15 + spawnAreaMarginMultiplier: 0.5 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} +--- !u!1 &1642302953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1642302954} + m_Layer: 0 + m_Name: Column (8) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1642302954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1642302953} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1472984958} + - {fileID: 1467769738} + - {fileID: 1461663080} + m_Father: {fileID: 447778171} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1685928000 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform (1) + objectReference: {fileID: 0} + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: -6.8 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} +--- !u!1 &1832528957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1832528958} + - component: {fileID: 1832528961} + - component: {fileID: 1832528960} + - component: {fileID: 1832528959} + m_Layer: 0 + m_Name: Top + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1832528958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832528957} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.504, z: 0} + m_LocalScale: {x: 1.6948129, y: 0.36920372, z: 1.6948129} + m_Children: [] + m_Father: {fileID: 1119869061} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1832528959 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832528957} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1832528960 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832528957} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1832528961 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832528957} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &1900462655 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &2509355369448722377 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2508780962454810567, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_Name + value: DungeonEscapePlatform + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2512227112770887927, guid: 5878a6d7527854d0a84b133c7c6efe55, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5878a6d7527854d0a84b133c7c6efe55, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes/DungeonEscape.unity.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes/DungeonEscape.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..405987f09e281d2caf672c41689ebb565be60148 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scenes/DungeonEscape.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d00d2995d83c94f5da81bb19644a00ac +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..b4d4811fb62d2e1218e7ea51e37530fd9e1a9643 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1aeac7dad8bb42fb92cfa7dc7bc3d3f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/DungeonEscapeEnvController.cs b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/DungeonEscapeEnvController.cs new file mode 100644 index 0000000000000000000000000000000000000000..d9a8d80cd32c8a3fd46e1b8c380d1428ab513e73 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/DungeonEscapeEnvController.cs @@ -0,0 +1,258 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.MLAgents; +using UnityEngine; + +public class DungeonEscapeEnvController : MonoBehaviour +{ + [System.Serializable] + public class PlayerInfo + { + public PushAgentEscape Agent; + [HideInInspector] + public Vector3 StartingPos; + [HideInInspector] + public Quaternion StartingRot; + [HideInInspector] + public Rigidbody Rb; + [HideInInspector] + public Collider Col; + } + + [System.Serializable] + public class DragonInfo + { + public SimpleNPC Agent; + [HideInInspector] + public Vector3 StartingPos; + [HideInInspector] + public Quaternion StartingRot; + [HideInInspector] + public Rigidbody Rb; + [HideInInspector] + public Collider Col; + public Transform T; + public bool IsDead; + } + + /// + /// Max Academy steps before this platform resets + /// + /// + [Header("Max Environment Steps")] public int MaxEnvironmentSteps = 25000; + private int m_ResetTimer; + + /// + /// The area bounds. + /// + [HideInInspector] + public Bounds areaBounds; + /// + /// The ground. The bounds are used to spawn the elements. + /// + public GameObject ground; + + Material m_GroundMaterial; //cached on Awake() + + /// + /// We will be changing the ground material based on success/failue + /// + Renderer m_GroundRenderer; + + public List AgentsList = new List(); + public List DragonsList = new List(); + private Dictionary m_PlayerDict = new Dictionary(); + public bool UseRandomAgentRotation = true; + public bool UseRandomAgentPosition = true; + PushBlockSettings m_PushBlockSettings; + + private int m_NumberOfRemainingPlayers; + public GameObject Key; + public GameObject Tombstone; + private SimpleMultiAgentGroup m_AgentGroup; + void Start() + { + + // Get the ground's bounds + areaBounds = ground.GetComponent().bounds; + // Get the ground renderer so we can change the material when a goal is scored + m_GroundRenderer = ground.GetComponent(); + // Starting material + m_GroundMaterial = m_GroundRenderer.material; + m_PushBlockSettings = FindObjectOfType(); + + //Reset Players Remaining + m_NumberOfRemainingPlayers = AgentsList.Count; + + //Hide The Key + Key.SetActive(false); + + // Initialize TeamManager + m_AgentGroup = new SimpleMultiAgentGroup(); + foreach (var item in AgentsList) + { + item.StartingPos = item.Agent.transform.position; + item.StartingRot = item.Agent.transform.rotation; + item.Rb = item.Agent.GetComponent(); + item.Col = item.Agent.GetComponent(); + // Add to team manager + m_AgentGroup.RegisterAgent(item.Agent); + } + foreach (var item in DragonsList) + { + item.StartingPos = item.Agent.transform.position; + item.StartingRot = item.Agent.transform.rotation; + item.T = item.Agent.transform; + item.Col = item.Agent.GetComponent(); + } + + ResetScene(); + } + + // Update is called once per frame + void FixedUpdate() + { + m_ResetTimer += 1; + if (m_ResetTimer >= MaxEnvironmentSteps && MaxEnvironmentSteps > 0) + { + m_AgentGroup.GroupEpisodeInterrupted(); + ResetScene(); + } + } + + public void TouchedHazard(PushAgentEscape agent) + { + m_NumberOfRemainingPlayers--; + if (m_NumberOfRemainingPlayers == 0 || agent.IHaveAKey) + { + m_AgentGroup.EndGroupEpisode(); + ResetScene(); + } + else + { + agent.gameObject.SetActive(false); + } + } + + public void UnlockDoor() + { + m_AgentGroup.AddGroupReward(1f); + StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f)); + + print("Unlocked Door"); + m_AgentGroup.EndGroupEpisode(); + + ResetScene(); + } + + public void KilledByBaddie(PushAgentEscape agent, Collision baddieCol) + { + baddieCol.gameObject.SetActive(false); + m_NumberOfRemainingPlayers--; + agent.gameObject.SetActive(false); + print($"{baddieCol.gameObject.name} ate {agent.transform.name}"); + + //Spawn Tombstone + Tombstone.transform.SetPositionAndRotation(agent.transform.position, agent.transform.rotation); + Tombstone.SetActive(true); + + //Spawn the Key Pickup + Key.transform.SetPositionAndRotation(baddieCol.collider.transform.position, baddieCol.collider.transform.rotation); + Key.SetActive(true); + } + + /// + /// Use the ground's bounds to pick a random spawn position. + /// + public Vector3 GetRandomSpawnPos() + { + var foundNewSpawnLocation = false; + var randomSpawnPos = Vector3.zero; + while (foundNewSpawnLocation == false) + { + var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier); + + var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier); + randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ); + if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false) + { + foundNewSpawnLocation = true; + } + } + return randomSpawnPos; + } + + /// + /// Swap ground material, wait time seconds, then swap back to the regular material. + /// + IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time) + { + m_GroundRenderer.material = mat; + yield return new WaitForSeconds(time); // Wait for 2 sec + m_GroundRenderer.material = m_GroundMaterial; + } + + public void BaddieTouchedBlock() + { + m_AgentGroup.EndGroupEpisode(); + + // Swap ground material for a bit to indicate we scored. + StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.failMaterial, 0.5f)); + ResetScene(); + } + + Quaternion GetRandomRot() + { + return Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0); + } + + void ResetScene() + { + + //Reset counter + m_ResetTimer = 0; + + //Reset Players Remaining + m_NumberOfRemainingPlayers = AgentsList.Count; + + //Random platform rot + var rotation = Random.Range(0, 4); + var rotationAngle = rotation * 90f; + transform.Rotate(new Vector3(0f, rotationAngle, 0f)); + + //Reset Agents + foreach (var item in AgentsList) + { + var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos; + var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot; + + item.Agent.transform.SetPositionAndRotation(pos, rot); + item.Rb.velocity = Vector3.zero; + item.Rb.angularVelocity = Vector3.zero; + item.Agent.MyKey.SetActive(false); + item.Agent.IHaveAKey = false; + item.Agent.gameObject.SetActive(true); + m_AgentGroup.RegisterAgent(item.Agent); + } + + //Reset Key + Key.SetActive(false); + + //Reset Tombstone + Tombstone.SetActive(false); + + //End Episode + foreach (var item in DragonsList) + { + if (!item.Agent) + { + return; + } + item.Agent.transform.SetPositionAndRotation(item.StartingPos, item.StartingRot); + item.Agent.SetRandomWalkSpeed(); + item.Agent.gameObject.SetActive(true); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/DungeonEscapeEnvController.cs.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/DungeonEscapeEnvController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..012517d2f06769c5fb83314bd0ee0b5138fb7b64 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/DungeonEscapeEnvController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f0d060d8c3074edf80fc69e847d4c60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/PushAgentEscape.cs b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/PushAgentEscape.cs new file mode 100644 index 0000000000000000000000000000000000000000..52c8e57b1087e5b6dbf5091eb510130925cf9e3b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/PushAgentEscape.cs @@ -0,0 +1,135 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Actuators; + +public class PushAgentEscape : Agent +{ + + public GameObject MyKey; //my key gameobject. will be enabled when key picked up. + public bool IHaveAKey; //have i picked up a key + private PushBlockSettings m_PushBlockSettings; + private Rigidbody m_AgentRb; + private DungeonEscapeEnvController m_GameController; + + public override void Initialize() + { + m_GameController = GetComponentInParent(); + m_AgentRb = GetComponent(); + m_PushBlockSettings = FindObjectOfType(); + MyKey.SetActive(false); + IHaveAKey = false; + } + + public override void OnEpisodeBegin() + { + MyKey.SetActive(false); + IHaveAKey = false; + } + + public override void CollectObservations(VectorSensor sensor) + { + sensor.AddObservation(IHaveAKey); + } + + /// + /// Moves the agent according to the selected action. + /// + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var action = act[0]; + + switch (action) + { + case 1: + dirToGo = transform.forward * 1f; + break; + case 2: + dirToGo = transform.forward * -1f; + break; + case 3: + rotateDir = transform.up * 1f; + break; + case 4: + rotateDir = transform.up * -1f; + break; + case 5: + dirToGo = transform.right * -0.75f; + break; + case 6: + dirToGo = transform.right * 0.75f; + break; + } + transform.Rotate(rotateDir, Time.fixedDeltaTime * 200f); + m_AgentRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed, + ForceMode.VelocityChange); + } + + /// + /// Called every step of the engine. Here the agent takes an action. + /// + public override void OnActionReceived(ActionBuffers actionBuffers) + { + // Move the agent using the action. + MoveAgent(actionBuffers.DiscreteActions); + } + + void OnCollisionEnter(Collision col) + { + if (col.transform.CompareTag("lock")) + { + if (IHaveAKey) + { + MyKey.SetActive(false); + IHaveAKey = false; + m_GameController.UnlockDoor(); + } + } + if (col.transform.CompareTag("dragon")) + { + m_GameController.KilledByBaddie(this, col); + MyKey.SetActive(false); + IHaveAKey = false; + } + if (col.transform.CompareTag("portal")) + { + m_GameController.TouchedHazard(this); + } + } + + void OnTriggerEnter(Collider col) + { + //if we find a key and it's parent is the main platform we can pick it up + if (col.transform.CompareTag("key") && col.transform.parent == transform.parent && gameObject.activeInHierarchy) + { + print("Picked up key"); + MyKey.SetActive(true); + IHaveAKey = true; + col.gameObject.SetActive(false); + } + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[0] = 3; + } + else if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + else if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[0] = 4; + } + else if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/PushAgentEscape.cs.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/PushAgentEscape.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c2ecbc7099c1b026992bacd2c1d6f0c1e45f2895 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/PushAgentEscape.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 78c960fbbc7844c269d4d14ae68abfc8 +timeCreated: 1506829537 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/SimpleNPC.cs b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/SimpleNPC.cs new file mode 100644 index 0000000000000000000000000000000000000000..e498fbf4255c5cac91deec231859eb58496f1b55 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/SimpleNPC.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +public class SimpleNPC : MonoBehaviour +{ + + public Transform target; + + private Rigidbody rb; + + public float walkSpeed = 1; + // public ForceMode walkForceMode; + private Vector3 dirToGo; + + // private Vector3 m_StartingPos; + // Start is called before the first frame update + void Awake() + { + rb = GetComponent(); + // m_StartingPos = transform.position; + } + + // Update is called once per frame + void Update() + { + } + + void FixedUpdate() + { + dirToGo = target.position - transform.position; + dirToGo.y = 0; + rb.rotation = Quaternion.LookRotation(dirToGo); + // rb.AddForce(dirToGo.normalized * walkSpeed * Time.fixedDeltaTime, walkForceMode); + // rb.MovePosition(rb.transform.TransformDirection(Vector3.forward * walkSpeed * Time.deltaTime)); + // rb.MovePosition(rb.transform.TransformVector() (Vector3.forward * walkSpeed * Time.deltaTime)); + rb.MovePosition(transform.position + transform.forward * walkSpeed * Time.deltaTime); + } + + public void SetRandomWalkSpeed() + { + walkSpeed = Random.Range(1f, 7f); + } +} diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/SimpleNPC.cs.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/SimpleNPC.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a229486ef27f59eacda3c4f6cb82b115555fca7d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/Scripts/SimpleNPC.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9685bac759362440ea71765cdece3305 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..9d415654d91ec0050faaf85fa58e7dd2d1cbb5f4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 28cc4e23163ed4144be9a5100f66585b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx b/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx new file mode 100644 index 0000000000000000000000000000000000000000..68db7550bbfd1e5aa7babf0eff2b6986fbfaa8c5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee4f1de94423fb05235ec6b77cbe4341d43e9a899806898263a0dc22a3e0c7b1 +size 653744 diff --git a/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx.meta b/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..654174ac99f10a5af3dcb30bbdfa419d2ec81cf1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/DungeonEscape/TFModels/DungeonEscape.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: b56a13a0e996e4f719001b218cb87d5a +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector.meta b/Project/Assets/ML-Agents/Examples/FoodCollector.meta new file mode 100644 index 0000000000000000000000000000000000000000..73069b5b8104b0d5f4c43c3436001854c97cfad5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 570a4b05478c54aabb612b2dd0ff4259 +folderAsset: yes +timeCreated: 1517447132 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Materials.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..c72a5be0aab67b76709088eda6a4721040f78201 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Materials.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c51a1ab5a2d834185ac70158bfb425e0 +folderAsset: yes +timeCreated: 1513126762 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Materials/lazer.mat b/Project/Assets/ML-Agents/Examples/FoodCollector/Materials/lazer.mat new file mode 100644 index 0000000000000000000000000000000000000000..6f21cfd14ce032c7bf7a9199d8c2bab9221c1800 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Materials/lazer.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: lazer + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHABLEND_ON _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 0 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0.132 + - _Mode: 2 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 1 + - _SpecularHighlights: 1 + - _SrcBlend: 5 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 1, g: 0, b: 0.93103456, a: 0.23529412} + - _EmissionColor: {r: 0.18910186, g: 0.040765576, b: 0.19117647, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Materials/lazer.mat.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Materials/lazer.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..cc71293f2724d7de94d25e17c4d59a3b217e39ba --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Materials/lazer.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 262d8cbc02b104990841408098431457 +timeCreated: 1513127898 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..d48332feb17aed9df18b98aca19c52ce81ce6bc8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 660b2218564f2e94c902fa64f5d20561 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes/Court.fbx b/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes/Court.fbx new file mode 100644 index 0000000000000000000000000000000000000000..17804392857cd1545099801e3f65cbcc7b987b74 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes/Court.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes/Court.fbx.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes/Court.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..001ca3a2da62bcb9b5fa23ff0632303cecc997f5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Meshes/Court.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: a9d8f499f5b9848438d280dc28b3b52e +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 100002: Floor + 100004: WallsOuter + 400000: //RootNode + 400002: Floor + 400004: WallsOuter + 2100000: rep_WhiteWalls + 2100002: rep_Floor + 2300000: Floor + 2300002: WallsOuter + 3300000: Floor + 3300002: WallsOuter + 4300000: WallsOuter + 4300002: Floor + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Floor + second: {fileID: 2100000, guid: 9705566e6ddfaac4ca6e57f5c0f9b879, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_WhiteWalls + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..15814ac40167904616020a79c033943f1156ec2f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ed5ab3de6984c442fbc99ccc0e820132 +folderAsset: yes +timeCreated: 1513126711 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/BadFood.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/BadFood.prefab new file mode 100644 index 0000000000000000000000000000000000000000..9fbdc898c6dfb75bf56ea6e3aa885232e53e0f37 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/BadFood.prefab @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1853821981215314} + m_IsPrefabParent: 1 +--- !u!1 &1853821981215314 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4094284922894548} + - component: {fileID: 33861055306973786} + - component: {fileID: 135398688903115902} + - component: {fileID: 23534414619488192} + - component: {fileID: 54488530251212230} + - component: {fileID: 114054540722299252} + m_Layer: 0 + m_Name: BadFood + m_TagString: badFood + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4094284922894548 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853821981215314} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -32.01, y: 2, z: -12.46} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23534414619488192 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853821981215314} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33861055306973786 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853821981215314} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &54488530251212230 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853821981215314} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &114054540722299252 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853821981215314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49a4e5684f6ac49b19183e8423231284, type: 3} + m_Name: + m_EditorClassIdentifier: + respawn: 0 + myArea: {fileID: 0} +--- !u!135 &135398688903115902 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853821981215314} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.75 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/BadFood.prefab.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/BadFood.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..d98b76056c28fd6c65936cbd950d84af5fd4a12c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/BadFood.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 350871b865967466daa1f596193cc22e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/Food.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/Food.prefab new file mode 100644 index 0000000000000000000000000000000000000000..90c0a2eccd865ba37c4f923ad11f13a77d5ac37f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/Food.prefab @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1699568242032636} + m_IsPrefabParent: 1 +--- !u!1 &1699568242032636 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4317744128851916} + - component: {fileID: 33865088620820440} + - component: {fileID: 135161629589834772} + - component: {fileID: 23208712281262040} + - component: {fileID: 54759831802293544} + - component: {fileID: 114154930672833238} + m_Layer: 0 + m_Name: Food + m_TagString: food + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4317744128851916 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1699568242032636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -32.01, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23208712281262040 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1699568242032636} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33865088620820440 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1699568242032636} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &54759831802293544 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1699568242032636} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &114154930672833238 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1699568242032636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49a4e5684f6ac49b19183e8423231284, type: 3} + m_Name: + m_EditorClassIdentifier: + respawn: 0 + myArea: {fileID: 0} +--- !u!135 &135161629589834772 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1699568242032636} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.75 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/Food.prefab.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/Food.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c306f099a5a78924bfc62da335fe351ae708541 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/Food.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b59e4a7fd76af471cadd16e90133a084 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab new file mode 100644 index 0000000000000000000000000000000000000000..16b9544903926e92f01d25d61a45876dbdf83c8d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab @@ -0,0 +1,4635 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1004751371378786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4016740412294058} + - component: {fileID: 20495002359041422} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4016740412294058 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004751371378786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4938758966936906} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20495002359041422 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004751371378786} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1045923826166930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4522727213527220} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4522727213527220 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045923826166930} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4628244018821590} + - {fileID: 4942777147710886} + m_Father: {fileID: 4137908820211030} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1050257840814314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4567168396714458} + - component: {fileID: 33904271726129436} + - component: {fileID: 65813940169399712} + - component: {fileID: 23670481059589226} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4567168396714458 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050257840814314} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4573319268845388} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33904271726129436 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050257840814314} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65813940169399712 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050257840814314} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23670481059589226 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050257840814314} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1081721624670010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4978680367261844} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4978680367261844 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1081721624670010} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4360876370799098} + - {fileID: 4909090634432460} + m_Father: {fileID: 4419274671784554} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1105439264909570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4179525879190592} + - component: {fileID: 33083298912190480} + - component: {fileID: 23704745980249856} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4179525879190592 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105439264909570} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4558819155563340} + - {fileID: 4165396427339296} + - {fileID: 4011037650862854} + - {fileID: 4536607624674844} + - {fileID: 4797833373477322} + m_Father: {fileID: 4426245476092464} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33083298912190480 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105439264909570} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23704745980249856 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105439264909570} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1135709540847232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4143889720967442} + - component: {fileID: 33334575744960420} + - component: {fileID: 23341432965009368} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4143889720967442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1135709540847232} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4376909360226160} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33334575744960420 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1135709540847232} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23341432965009368 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1135709540847232} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1142118416241152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4797833373477322} + - component: {fileID: 33354718167487840} + - component: {fileID: 23747898481678246} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4797833373477322 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142118416241152} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4179525879190592} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33354718167487840 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142118416241152} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23747898481678246 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142118416241152} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1157781566444334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4558819155563340} + - component: {fileID: 20612013516668386} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4558819155563340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157781566444334} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4179525879190592} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20612013516668386 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157781566444334} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1158982680388630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4798830718289576} + - component: {fileID: 20111475902919090} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4798830718289576 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158982680388630} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4343281584596502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20111475902919090 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158982680388630} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1161164364638642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4248986177165852} + - component: {fileID: 33742296699332264} + - component: {fileID: 23975741858407592} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4248986177165852 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161164364638642} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4863308503741448} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33742296699332264 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161164364638642} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23975741858407592 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161164364638642} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1163782207505368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4360876370799098} + - component: {fileID: 33025882344299528} + - component: {fileID: 65354505920864336} + - component: {fileID: 23231680800386488} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4360876370799098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163782207505368} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4978680367261844} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33025882344299528 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163782207505368} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65354505920864336 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163782207505368} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23231680800386488 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163782207505368} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1190492283346676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4430881949022472} + - component: {fileID: 33640192513867290} + - component: {fileID: 23637226378815632} + - component: {fileID: 65153930110053452} + m_Layer: 0 + m_Name: Floor + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4430881949022472 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190492283346676} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4842597515579046} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33640192513867290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190492283346676} + m_Mesh: {fileID: 4300002, guid: a9d8f499f5b9848438d280dc28b3b52e, type: 3} +--- !u!23 &23637226378815632 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190492283346676} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65153930110053452 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190492283346676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10000, y: 2.220446e-12, z: 10000} + m_Center: {x: 0, y: -3.111633e-13, z: 0} +--- !u!1 &1208232927556240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4928045358059034} + - component: {fileID: 33434321274046506} + - component: {fileID: 23918353146837096} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4928045358059034 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208232927556240} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4343281584596502} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33434321274046506 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208232927556240} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23918353146837096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208232927556240} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1261982685906694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4376909360226160} + - component: {fileID: 33598087031752636} + - component: {fileID: 23207617770673806} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4376909360226160 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261982685906694} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4408041489605896} + - {fileID: 4342949239672590} + - {fileID: 4992335726090706} + - {fileID: 4143889720967442} + - {fileID: 4342470149378440} + m_Father: {fileID: 4259834826122778} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33598087031752636 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261982685906694} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23207617770673806 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261982685906694} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1264374049395100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4343281584596502} + - component: {fileID: 33805168646623140} + - component: {fileID: 23607206098832178} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4343281584596502 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264374049395100} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4798830718289576} + - {fileID: 4052944510292810} + - {fileID: 4928045358059034} + - {fileID: 4614517822681800} + - {fileID: 4279282668995084} + m_Father: {fileID: 4756368533889646} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33805168646623140 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264374049395100} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23607206098832178 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264374049395100} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1265511327613192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4842597515579046} + m_Layer: 0 + m_Name: Court + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4842597515579046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265511327613192} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4430881949022472} + - {fileID: 4534035899647546} + m_Father: {fileID: 4688212428263696} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1288627264482826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967556344437934} + - component: {fileID: 33341018729223600} + - component: {fileID: 65319547882626302} + - component: {fileID: 23655279563649666} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4967556344437934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288627264482826} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4955631281465514} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33341018729223600 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288627264482826} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65319547882626302 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288627264482826} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23655279563649666 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288627264482826} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1289317325350534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4815655783331066} + - component: {fileID: 33797642203439586} + - component: {fileID: 65825948695401364} + - component: {fileID: 23804249467165384} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4815655783331066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1289317325350534} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4955631281465514} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33797642203439586 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1289317325350534} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65825948695401364 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1289317325350534} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23804249467165384 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1289317325350534} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1306761489756722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4654509261143776} + - component: {fileID: 33656509789743148} + - component: {fileID: 23666107060658374} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4654509261143776 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306761489756722} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4938758966936906} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33656509789743148 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306761489756722} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23666107060658374 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306761489756722} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1314000637148530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4614517822681800} + - component: {fileID: 33280347452365448} + - component: {fileID: 23061304985491162} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4614517822681800 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1314000637148530} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4343281584596502} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33280347452365448 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1314000637148530} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23061304985491162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1314000637148530} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1325899929228958 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4938758966936906} + - component: {fileID: 33722191191099118} + - component: {fileID: 23705420798816180} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4938758966936906 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325899929228958} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4016740412294058} + - {fileID: 4654509261143776} + - {fileID: 4840142534561424} + - {fileID: 4216551812515560} + - {fileID: 4416428241152546} + m_Father: {fileID: 4137908820211030} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33722191191099118 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325899929228958} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23705420798816180 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325899929228958} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1331946141655186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4840142534561424} + - component: {fileID: 33232076493926782} + - component: {fileID: 23863542327230028} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4840142534561424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1331946141655186} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4938758966936906} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33232076493926782 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1331946141655186} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23863542327230028 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1331946141655186} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1356983692258842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4011037650862854} + - component: {fileID: 33728518391865520} + - component: {fileID: 23798271499311078} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4011037650862854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356983692258842} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4179525879190592} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33728518391865520 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356983692258842} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23798271499311078 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356983692258842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1372648567162546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4216551812515560} + - component: {fileID: 33884172207852646} + - component: {fileID: 23214453523585886} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4216551812515560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372648567162546} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4938758966936906} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33884172207852646 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372648567162546} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23214453523585886 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372648567162546} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1421240237750412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4573319268845388} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4573319268845388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421240237750412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4567168396714458} + - {fileID: 4535316500108726} + m_Father: {fileID: 4426245476092464} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1421790665675520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4599271014211466} + - component: {fileID: 33715418751802622} + - component: {fileID: 65370178229129306} + - component: {fileID: 23586362064428440} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4599271014211466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421790665675520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4937005382015814} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33715418751802622 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421790665675520} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65370178229129306 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421790665675520} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23586362064428440 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421790665675520} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1426794459463976 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4582932118026694} + - component: {fileID: 33360945191853662} + - component: {fileID: 65032123296962936} + - component: {fileID: 23137236490554150} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4582932118026694 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426794459463976} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4937005382015814} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33360945191853662 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426794459463976} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65032123296962936 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426794459463976} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23137236490554150 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426794459463976} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1457179540742082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4534035899647546} + - component: {fileID: 33647856952271108} + - component: {fileID: 23492855479220302} + - component: {fileID: 64215839085980018} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4534035899647546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457179540742082} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.025, z: 0.01} + m_Children: [] + m_Father: {fileID: 4842597515579046} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33647856952271108 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457179540742082} + m_Mesh: {fileID: 4300000, guid: a9d8f499f5b9848438d280dc28b3b52e, type: 3} +--- !u!23 &23492855479220302 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457179540742082} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &64215839085980018 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457179540742082} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: a9d8f499f5b9848438d280dc28b3b52e, type: 3} +--- !u!1 &1464820575638702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4419274671784554} + - component: {fileID: 65550728419070768} + - component: {fileID: 54936164982484646} + - component: {fileID: 114374774605792098} + - component: {fileID: 114176228333253036} + - component: {fileID: 8297075921230369060} + - component: {fileID: 1222199865870203693} + - component: {fileID: 2106566910232743969} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4419274671784554 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -34.2, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4863308503741448} + - {fileID: 4978680367261844} + m_Father: {fileID: 4688212428263696} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65550728419070768 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54936164982484646 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114374774605792098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: f4b8757bd574543b1aa06d9294a5d707, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114176228333253036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1819751139121548} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1081721624670010} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 0 +--- !u!114 &8297075921230369060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &1222199865870203693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &2106566910232743969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464820575638702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a501962d056745d1a30e99146ee39fe, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: GridSensor + m_CellScale: {x: 1, y: 0.01, z: 1} + m_GridSize: {x: 40, y: 1, z: 40} + m_RotateWithAgent: 1 + m_DetectableTags: + - food + - agent + - wall + - badFood + - frozenAgent + m_ColliderMask: + serializedVersion: 2 + m_Bits: 307 + m_MaxColliderBufferSize: 500 + m_InitialColliderBufferSize: 4 + m_DebugColors: + - {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 0} + - {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 0} + - {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 0} + - {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + m_GizmoYOffset: 0 + m_ShowGizmos: 0 + m_CompressionType: 1 + m_ObservationStacks: 1 + m_UseOneHotTag: 1 + m_CountColliders: 0 +--- !u!1 &1482701732800114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4408041489605896} + - component: {fileID: 20412523133977066} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4408041489605896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1482701732800114} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4376909360226160} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20412523133977066 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1482701732800114} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1490796556420086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4942777147710886} + - component: {fileID: 33484012574791510} + - component: {fileID: 65524619536332628} + - component: {fileID: 23599897942997262} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4942777147710886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1490796556420086} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4522727213527220} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33484012574791510 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1490796556420086} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65524619536332628 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1490796556420086} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23599897942997262 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1490796556420086} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1495617568563208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4756368533889646} + - component: {fileID: 65905012397919158} + - component: {fileID: 54504078365531932} + - component: {fileID: 114522573150607728} + - component: {fileID: 114711827726849508} + - component: {fileID: 259154752087955944} + - component: {fileID: 556732721703992837} + m_Layer: 0 + m_Name: Agent (1) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4756368533889646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -34.2, y: 2, z: -9.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4343281584596502} + - {fileID: 4955631281465514} + m_Father: {fileID: 4688212428263696} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65905012397919158 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54504078365531932 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114522573150607728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: f4b8757bd574543b1aa06d9294a5d707, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114711827726849508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1819751139121548} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1941433838307300} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 0 +--- !u!114 &259154752087955944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &556732721703992837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495617568563208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a501962d056745d1a30e99146ee39fe, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: GridSensor + m_CellScale: {x: 1, y: 0.01, z: 1} + m_GridSize: {x: 40, y: 1, z: 40} + m_RotateWithAgent: 1 + m_DetectableTags: + - food + - agent + - wall + - badFood + - frozenAgent + m_ColliderMask: + serializedVersion: 2 + m_Bits: 307 + m_MaxColliderBufferSize: 500 + m_InitialColliderBufferSize: 4 + m_DebugColors: + - {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 0} + - {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 0} + - {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 0} + - {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + m_GizmoYOffset: 0 + m_ShowGizmos: 0 + m_CompressionType: 1 + m_ObservationStacks: 1 + m_UseOneHotTag: 1 + m_CountColliders: 0 +--- !u!1 &1528397385587768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4628244018821590} + - component: {fileID: 33690506307351342} + - component: {fileID: 65210404821033132} + - component: {fileID: 23737933071597416} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4628244018821590 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528397385587768} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4522727213527220} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33690506307351342 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528397385587768} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65210404821033132 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528397385587768} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23737933071597416 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528397385587768} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1574067311314706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4279282668995084} + - component: {fileID: 33060285942274112} + - component: {fileID: 23276403747503912} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4279282668995084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574067311314706} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4343281584596502} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33060285942274112 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574067311314706} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23276403747503912 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574067311314706} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1601500200010266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4426245476092464} + - component: {fileID: 65152194455140476} + - component: {fileID: 54961653455021136} + - component: {fileID: 114980787530065684} + - component: {fileID: 114542632553128056} + - component: {fileID: 5519119940433428255} + - component: {fileID: 1408842157152425307} + m_Layer: 0 + m_Name: Agent (2) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4426245476092464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -34.2, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4179525879190592} + - {fileID: 4573319268845388} + m_Father: {fileID: 4688212428263696} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65152194455140476 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54961653455021136 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114980787530065684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: f4b8757bd574543b1aa06d9294a5d707, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114542632553128056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1819751139121548} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1421240237750412} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 0 +--- !u!114 &5519119940433428255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &1408842157152425307 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601500200010266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a501962d056745d1a30e99146ee39fe, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: GridSensor + m_CellScale: {x: 1, y: 0.01, z: 1} + m_GridSize: {x: 40, y: 1, z: 40} + m_RotateWithAgent: 1 + m_DetectableTags: + - food + - agent + - wall + - badFood + - frozenAgent + m_ColliderMask: + serializedVersion: 2 + m_Bits: 307 + m_MaxColliderBufferSize: 500 + m_InitialColliderBufferSize: 4 + m_DebugColors: + - {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 0} + - {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 0} + - {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 0} + - {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + m_GizmoYOffset: 0 + m_ShowGizmos: 0 + m_CompressionType: 1 + m_ObservationStacks: 1 + m_UseOneHotTag: 1 + m_CountColliders: 0 +--- !u!1 &1617924810425504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4937005382015814} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4937005382015814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617924810425504} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4582932118026694} + - {fileID: 4599271014211466} + m_Father: {fileID: 4259834826122778} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1618648442086682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4052944510292810} + - component: {fileID: 33324032526246336} + - component: {fileID: 23226214730292784} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4052944510292810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618648442086682} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4343281584596502} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33324032526246336 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618648442086682} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23226214730292784 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618648442086682} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1638806402294040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4110904743159654} + - component: {fileID: 33104252697647546} + - component: {fileID: 23895018003535718} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4110904743159654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638806402294040} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4863308503741448} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33104252697647546 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638806402294040} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23895018003535718 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638806402294040} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1643846525668720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4909090634432460} + - component: {fileID: 33711003775834886} + - component: {fileID: 65424810526260318} + - component: {fileID: 23325276038369808} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4909090634432460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643846525668720} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4978680367261844} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33711003775834886 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643846525668720} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65424810526260318 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643846525668720} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23325276038369808 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643846525668720} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1661095858276598 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4342949239672590} + - component: {fileID: 33258721570895068} + - component: {fileID: 23052870883914942} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4342949239672590 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661095858276598} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4376909360226160} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33258721570895068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661095858276598} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23052870883914942 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661095858276598} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1665857020163740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4342470149378440} + - component: {fileID: 33495910772868068} + - component: {fileID: 23748284751942412} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4342470149378440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665857020163740} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4376909360226160} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33495910772868068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665857020163740} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23748284751942412 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665857020163740} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1672905243433088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4259834826122778} + - component: {fileID: 65761952312736034} + - component: {fileID: 54819001862035794} + - component: {fileID: 114878550018296316} + - component: {fileID: 114189751434580810} + - component: {fileID: 5884750436653390196} + - component: {fileID: 455231854019269609} + m_Layer: 0 + m_Name: Agent (4) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4259834826122778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -34.2, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4376909360226160} + - {fileID: 4937005382015814} + m_Father: {fileID: 4688212428263696} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65761952312736034 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54819001862035794 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114878550018296316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: f4b8757bd574543b1aa06d9294a5d707, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114189751434580810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1819751139121548} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1617924810425504} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 0 +--- !u!114 &5884750436653390196 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &455231854019269609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672905243433088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a501962d056745d1a30e99146ee39fe, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: GridSensor + m_CellScale: {x: 1, y: 0.01, z: 1} + m_GridSize: {x: 40, y: 1, z: 40} + m_RotateWithAgent: 1 + m_DetectableTags: + - food + - agent + - wall + - badFood + - frozenAgent + m_ColliderMask: + serializedVersion: 2 + m_Bits: 307 + m_MaxColliderBufferSize: 500 + m_InitialColliderBufferSize: 4 + m_DebugColors: + - {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 0} + - {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 0} + - {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 0} + - {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + m_GizmoYOffset: 0 + m_ShowGizmos: 0 + m_CompressionType: 1 + m_ObservationStacks: 1 + m_UseOneHotTag: 1 + m_CountColliders: 0 +--- !u!1 &1688105343773098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4165396427339296} + - component: {fileID: 33135397501257932} + - component: {fileID: 23575645719807712} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4165396427339296 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1688105343773098} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4179525879190592} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33135397501257932 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1688105343773098} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23575645719807712 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1688105343773098} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1697125512713780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4681812955171404} + - component: {fileID: 33750144468177076} + - component: {fileID: 23148426617266414} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4681812955171404 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697125512713780} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4863308503741448} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33750144468177076 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697125512713780} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23148426617266414 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697125512713780} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1706274796045088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4137908820211030} + - component: {fileID: 65367560123033576} + - component: {fileID: 54895479068989492} + - component: {fileID: 114035338027591536} + - component: {fileID: 114235147148547996} + - component: {fileID: 4768752321433982785} + - component: {fileID: 653284020512459243} + m_Layer: 0 + m_Name: Agent (3) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4137908820211030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -34.2, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4938758966936906} + - {fileID: 4522727213527220} + m_Father: {fileID: 4688212428263696} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65367560123033576 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54895479068989492 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114035338027591536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: f4b8757bd574543b1aa06d9294a5d707, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114235147148547996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1819751139121548} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1045923826166930} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 0 +--- !u!114 &4768752321433982785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &653284020512459243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706274796045088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a501962d056745d1a30e99146ee39fe, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: GridSensor + m_CellScale: {x: 1, y: 0.01, z: 1} + m_GridSize: {x: 40, y: 1, z: 40} + m_RotateWithAgent: 1 + m_DetectableTags: + - food + - agent + - wall + - badFood + - frozenAgent + m_ColliderMask: + serializedVersion: 2 + m_Bits: 307 + m_MaxColliderBufferSize: 500 + m_InitialColliderBufferSize: 4 + m_DebugColors: + - {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 0} + - {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 0} + - {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 0} + - {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + m_GizmoYOffset: 0 + m_ShowGizmos: 0 + m_CompressionType: 1 + m_ObservationStacks: 1 + m_UseOneHotTag: 1 + m_CountColliders: 0 +--- !u!1 &1729825611722018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4027436774056926} + - component: {fileID: 33660830607341294} + - component: {fileID: 23203790344771604} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4027436774056926 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729825611722018} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4863308503741448} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33660830607341294 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729825611722018} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23203790344771604 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729825611722018} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1779969260804002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4535316500108726} + - component: {fileID: 33106558318768744} + - component: {fileID: 65444475611833866} + - component: {fileID: 23348137950253348} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4535316500108726 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779969260804002} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4573319268845388} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33106558318768744 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779969260804002} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65444475611833866 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779969260804002} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23348137950253348 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779969260804002} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1785780591970450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4536607624674844} + - component: {fileID: 33687229327501620} + - component: {fileID: 23347289614191744} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4536607624674844 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785780591970450} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4179525879190592} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33687229327501620 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785780591970450} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23347289614191744 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785780591970450} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1819751139121548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4688212428263696} + - component: {fileID: 114181230191376748} + m_Layer: 0 + m_Name: FoodCollectorArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4688212428263696 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1819751139121548} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 12.3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4842597515579046} + - {fileID: 4419274671784554} + - {fileID: 4756368533889646} + - {fileID: 4426245476092464} + - {fileID: 4137908820211030} + - {fileID: 4259834826122778} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114181230191376748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1819751139121548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e14a1d4accf634e3fb9b5bc94d023393, type: 3} + m_Name: + m_EditorClassIdentifier: + food: {fileID: 1699568242032636, guid: b59e4a7fd76af471cadd16e90133a084, type: 3} + badFood: {fileID: 1853821981215314, guid: 350871b865967466daa1f596193cc22e, type: 3} + numFood: 25 + numBadFood: 25 + respawnFood: 1 + range: 45 +--- !u!1 &1904006146885458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4863308503741448} + - component: {fileID: 33286170759955688} + - component: {fileID: 23677892901527780} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4863308503741448 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904006146885458} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4326003174347432} + - {fileID: 4027436774056926} + - {fileID: 4110904743159654} + - {fileID: 4681812955171404} + - {fileID: 4248986177165852} + m_Father: {fileID: 4419274671784554} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33286170759955688 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904006146885458} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23677892901527780 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904006146885458} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1941433838307300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4955631281465514} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4955631281465514 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1941433838307300} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967556344437934} + - {fileID: 4815655783331066} + m_Father: {fileID: 4756368533889646} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1946057994373464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4326003174347432} + - component: {fileID: 20371053960203416} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4326003174347432 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946057994373464} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4863308503741448} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20371053960203416 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946057994373464} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1958548322856504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4416428241152546} + - component: {fileID: 33928756707514246} + - component: {fileID: 23283428263615716} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4416428241152546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958548322856504} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4938758966936906} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33928756707514246 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958548322856504} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23283428263615716 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958548322856504} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1998947340403150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4992335726090706} + - component: {fileID: 33343165119480046} + - component: {fileID: 23618145525580064} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4992335726090706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998947340403150} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4376909360226160} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33343165119480046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998947340403150} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23618145525580064 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998947340403150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..6416e74691ddda5dbd022a12a1e214ccd032c5f8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b5339e4b990ade14f992aadf3bf8591b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab new file mode 100644 index 0000000000000000000000000000000000000000..68f96d9ebab44528fc0959a2d3241a65f9450329 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab @@ -0,0 +1,3731 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1014600383792522 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4894325195052674} + - component: {fileID: 33398962914955792} + - component: {fileID: 23417508503027462} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4894325195052674 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1014600383792522} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4352047625778706} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33398962914955792 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1014600383792522} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23417508503027462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1014600383792522} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1078242976093628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4600586535679462} + - component: {fileID: 33311110033190690} + - component: {fileID: 23553176880752320} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4600586535679462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078242976093628} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4151762782664136} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33311110033190690 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078242976093628} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23553176880752320 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078242976093628} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1079907389665764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4175232870171330} + - component: {fileID: 33834256339971282} + - component: {fileID: 23493511592802438} + - component: {fileID: 65589377080510240} + m_Layer: 0 + m_Name: Floor + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4175232870171330 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079907389665764} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4470879573182666} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33834256339971282 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079907389665764} + m_Mesh: {fileID: 4300002, guid: a9d8f499f5b9848438d280dc28b3b52e, type: 3} +--- !u!23 &23493511592802438 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079907389665764} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65589377080510240 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079907389665764} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10000, y: 2.220446e-12, z: 10000} + m_Center: {x: 0, y: -3.111633e-13, z: 0} +--- !u!1 &1121462989228714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4949994601996280} + - component: {fileID: 33639571011425304} + - component: {fileID: 65918024835619606} + - component: {fileID: 23940763941071586} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4949994601996280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121462989228714} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4393500247777624} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33639571011425304 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121462989228714} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65918024835619606 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121462989228714} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23940763941071586 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121462989228714} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1122318382191954 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4125811064954314} + - component: {fileID: 33064880745139274} + - component: {fileID: 23593994518387712} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4125811064954314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1122318382191954} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4210008090221700} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33064880745139274 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1122318382191954} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23593994518387712 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1122318382191954} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1135489216937854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4146134314971664} + - component: {fileID: 33007201079611444} + - component: {fileID: 23187340099814854} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4146134314971664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1135489216937854} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4322704766028316} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33007201079611444 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1135489216937854} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23187340099814854 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1135489216937854} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1145096862361766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4307641258646068} + - component: {fileID: 114422602055470240} + m_Layer: 0 + m_Name: VisualFoodCollectorArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4307641258646068 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145096862361766} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4470879573182666} + - {fileID: 4875680222761558} + - {fileID: 4701006000910250} + - {fileID: 4796822391050334} + - {fileID: 4755605325663294} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114422602055470240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145096862361766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e14a1d4accf634e3fb9b5bc94d023393, type: 3} + m_Name: + m_EditorClassIdentifier: + food: {fileID: 1699568242032636, guid: b59e4a7fd76af471cadd16e90133a084, type: 3} + badFood: {fileID: 1853821981215314, guid: 350871b865967466daa1f596193cc22e, type: 3} + numFood: 25 + numBadFood: 25 + respawnFood: 1 + range: 45 +--- !u!1 &1165679820726490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4755605325663294} + - component: {fileID: 65589463239440526} + - component: {fileID: 54289954206234004} + - component: {fileID: 114724832030926412} + - component: {fileID: 114380897261200276} + - component: {fileID: 114326390494230518} + - component: {fileID: 4034342608499629224} + - component: {fileID: 3681854374749311046} + m_Layer: 0 + m_Name: Agent (3) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4755605325663294 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30.56, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4210008090221700} + - {fileID: 4083604007501892} + m_Father: {fileID: 4307641258646068} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65589463239440526 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54289954206234004 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114724832030926412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: VisualFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114380897261200276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1145096862361766} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1900094563283840} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 1 +--- !u!114 &114326390494230518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 20380145723616022} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 84 + m_Grayscale: 0 + m_ObservationType: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &4034342608499629224 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &3681854374749311046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165679820726490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1179319070824364 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4607515801962882} + - component: {fileID: 33656934514913342} + - component: {fileID: 23075609872029122} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4607515801962882 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179319070824364} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4151762782664136} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33656934514913342 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179319070824364} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23075609872029122 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179319070824364} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1193448108562946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4301723466142562} + - component: {fileID: 33487151372684152} + - component: {fileID: 65682238052370530} + - component: {fileID: 23805066794631192} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4301723466142562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193448108562946} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4083604007501892} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33487151372684152 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193448108562946} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65682238052370530 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193448108562946} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23805066794631192 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193448108562946} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1214419816843726 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4904660447404230} + - component: {fileID: 33608516916290782} + - component: {fileID: 23451884464532582} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4904660447404230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214419816843726} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4151762782664136} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33608516916290782 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214419816843726} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23451884464532582 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214419816843726} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1225293932999958 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4581276532766838} + - component: {fileID: 33173463307667788} + - component: {fileID: 23949188537607370} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4581276532766838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225293932999958} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4352047625778706} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33173463307667788 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225293932999958} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23949188537607370 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225293932999958} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1270392021614266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4881244176857118} + - component: {fileID: 33112832585894242} + - component: {fileID: 23018451675943198} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4881244176857118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270392021614266} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4322704766028316} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33112832585894242 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270392021614266} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23018451675943198 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270392021614266} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1307818939507544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4812724525373012} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4812724525373012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307818939507544} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4770596166774728} + - {fileID: 4888051724348932} + m_Father: {fileID: 4701006000910250} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1317136368302180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4701006000910250} + - component: {fileID: 65739180902805812} + - component: {fileID: 54578239364845406} + - component: {fileID: 114942033465821694} + - component: {fileID: 114869844339180154} + - component: {fileID: 114429222608880102} + - component: {fileID: 7234640249101665162} + - component: {fileID: 3300832746663767942} + m_Layer: 0 + m_Name: Agent (1) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4701006000910250 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30.56, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4322704766028316} + - {fileID: 4812724525373012} + m_Father: {fileID: 4307641258646068} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65739180902805812 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54578239364845406 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114942033465821694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: VisualFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114869844339180154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1145096862361766} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1307818939507544} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 1 +--- !u!114 &114429222608880102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 20863703825242712} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 84 + m_Grayscale: 0 + m_ObservationType: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &7234640249101665162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &3300832746663767942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1317136368302180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1353209702154624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4928645405444414} + - component: {fileID: 33433944005396330} + - component: {fileID: 65722116964617048} + - component: {fileID: 23285836828984498} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4928645405444414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353209702154624} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4083604007501892} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33433944005396330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353209702154624} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65722116964617048 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353209702154624} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23285836828984498 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353209702154624} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1358824403081850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4351896595866570} + - component: {fileID: 33220378165577016} + - component: {fileID: 23183609615186614} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4351896595866570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358824403081850} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4322704766028316} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33220378165577016 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358824403081850} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23183609615186614 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358824403081850} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1363680577697298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4555536896909124} + - component: {fileID: 33437997913177172} + - component: {fileID: 23618215726505526} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4555536896909124 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1363680577697298} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4210008090221700} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33437997913177172 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1363680577697298} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23618215726505526 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1363680577697298} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1373801553976666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4875680222761558} + - component: {fileID: 65913236404058334} + - component: {fileID: 54260679202702464} + - component: {fileID: 114556471765155272} + - component: {fileID: 114484596947519388} + - component: {fileID: 114036270357198286} + - component: {fileID: 3164735207755090463} + - component: {fileID: 8027755491947001153} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4875680222761558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30.56, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4352047625778706} + - {fileID: 4198767113946998} + m_Father: {fileID: 4307641258646068} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65913236404058334 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54260679202702464 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114556471765155272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: VisualFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114484596947519388 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1145096862361766} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1898252046043334} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 1 +--- !u!114 &114036270357198286 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 20696931947702132} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 84 + m_Grayscale: 0 + m_ObservationType: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &3164735207755090463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &8027755491947001153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373801553976666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1399553220224106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4340505092436632} + - component: {fileID: 33104902330510722} + - component: {fileID: 23861339133111532} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4340505092436632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399553220224106} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4210008090221700} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33104902330510722 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399553220224106} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23861339133111532 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399553220224106} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1420568803306334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4662781185182020} + - component: {fileID: 33985812240333934} + - component: {fileID: 23229943995234896} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4662781185182020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420568803306334} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4352047625778706} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33985812240333934 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420568803306334} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23229943995234896 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420568803306334} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1445621402098048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4322704766028316} + - component: {fileID: 33618847153425232} + - component: {fileID: 23842657651682012} + m_Layer: 0 + m_Name: AgentCubeWithCamera_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4322704766028316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445621402098048} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4254909729027978} + - {fileID: 4146134314971664} + - {fileID: 4351896595866570} + - {fileID: 4881244176857118} + - {fileID: 4340962090815832} + m_Father: {fileID: 4701006000910250} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33618847153425232 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445621402098048} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23842657651682012 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445621402098048} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1446822082845914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4257515355332200} + - component: {fileID: 33845612629305896} + - component: {fileID: 65357436224164412} + - component: {fileID: 23328732370008150} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4257515355332200 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446822082845914} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4198767113946998} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33845612629305896 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446822082845914} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65357436224164412 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446822082845914} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23328732370008150 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446822082845914} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1494700324769970 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4172060812915152} + - component: {fileID: 20380145723616022} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4172060812915152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1494700324769970} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4210008090221700} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20380145723616022 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1494700324769970} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1501061473632398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4293457799811454} + - component: {fileID: 20696931947702132} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4293457799811454 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501061473632398} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4352047625778706} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20696931947702132 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501061473632398} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1558211054879664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4424041022055208} + - component: {fileID: 33497420207122002} + - component: {fileID: 23710656781028902} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4424041022055208 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558211054879664} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4210008090221700} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33497420207122002 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558211054879664} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23710656781028902 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558211054879664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1598006908151838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4254909729027978} + - component: {fileID: 20863703825242712} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4254909729027978 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598006908151838} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4322704766028316} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20863703825242712 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598006908151838} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1605878135356198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4470879573182666} + m_Layer: 0 + m_Name: Court + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4470879573182666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1605878135356198} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4175232870171330} + - {fileID: 4980287366775932} + m_Father: {fileID: 4307641258646068} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1644999083152214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4048009962245794} + - component: {fileID: 20363738094913048} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4048009962245794 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644999083152214} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4151762782664136} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20363738094913048 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644999083152214} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1661059072361910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4340962090815832} + - component: {fileID: 33251900124875064} + - component: {fileID: 23381564833934054} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4340962090815832 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661059072361910} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4322704766028316} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33251900124875064 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661059072361910} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23381564833934054 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661059072361910} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1669654006840182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4573279692837578} + - component: {fileID: 33007244417731778} + - component: {fileID: 23763015239766136} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4573279692837578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669654006840182} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4352047625778706} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33007244417731778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669654006840182} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23763015239766136 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669654006840182} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1681006282972324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4300712180700360} + - component: {fileID: 33706362889224244} + - component: {fileID: 23348621273683864} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4300712180700360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681006282972324} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4151762782664136} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33706362889224244 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681006282972324} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23348621273683864 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681006282972324} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1682998971059402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4770596166774728} + - component: {fileID: 33437662427228988} + - component: {fileID: 65949213028989648} + - component: {fileID: 23249721641656990} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4770596166774728 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682998971059402} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4812724525373012} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33437662427228988 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682998971059402} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65949213028989648 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682998971059402} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23249721641656990 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682998971059402} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1715767492872126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4151762782664136} + - component: {fileID: 33795060429981700} + - component: {fileID: 23746622875505272} + m_Layer: 0 + m_Name: AgentCubeWithCamera_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4151762782664136 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715767492872126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4048009962245794} + - {fileID: 4300712180700360} + - {fileID: 4904660447404230} + - {fileID: 4600586535679462} + - {fileID: 4607515801962882} + m_Father: {fileID: 4796822391050334} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33795060429981700 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715767492872126} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23746622875505272 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715767492872126} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1725685797327414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4352047625778706} + - component: {fileID: 33441042292940994} + - component: {fileID: 23477035516712264} + m_Layer: 0 + m_Name: AgentCubeWithCamera_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4352047625778706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725685797327414} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4293457799811454} + - {fileID: 4894325195052674} + - {fileID: 4573279692837578} + - {fileID: 4662781185182020} + - {fileID: 4581276532766838} + m_Father: {fileID: 4875680222761558} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33441042292940994 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725685797327414} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23477035516712264 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725685797327414} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1779831409734062 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4393500247777624} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4393500247777624 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779831409734062} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4949994601996280} + - {fileID: 4981707683050382} + m_Father: {fileID: 4796822391050334} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1841305616332738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4210008090221700} + - component: {fileID: 33994336694509784} + - component: {fileID: 23937488998945520} + m_Layer: 0 + m_Name: AgentCubeWithCamera_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4210008090221700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841305616332738} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4172060812915152} + - {fileID: 4424041022055208} + - {fileID: 4555536896909124} + - {fileID: 4340505092436632} + - {fileID: 4125811064954314} + m_Father: {fileID: 4755605325663294} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33994336694509784 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841305616332738} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23937488998945520 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841305616332738} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1873124424911068 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4232991942739224} + - component: {fileID: 33657416383297052} + - component: {fileID: 65738389332670280} + - component: {fileID: 23431158324231992} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4232991942739224 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873124424911068} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.35, y: 0.13, z: 20} + m_Children: [] + m_Father: {fileID: 4198767113946998} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33657416383297052 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873124424911068} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65738389332670280 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873124424911068} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23431158324231992 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873124424911068} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1898252046043334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4198767113946998} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4198767113946998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898252046043334} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4232991942739224} + - {fileID: 4257515355332200} + m_Father: {fileID: 4875680222761558} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1900094563283840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4083604007501892} + m_Layer: 0 + m_Name: Laser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4083604007501892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1900094563283840} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4928645405444414} + - {fileID: 4301723466142562} + m_Father: {fileID: 4755605325663294} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1907470464862992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4888051724348932} + - component: {fileID: 33291922297337334} + - component: {fileID: 65057825353511568} + - component: {fileID: 23615217600355662} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4888051724348932 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907470464862992} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4812724525373012} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33291922297337334 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907470464862992} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65057825353511568 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907470464862992} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23615217600355662 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907470464862992} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1930612303318000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4981707683050382} + - component: {fileID: 33345590301219576} + - component: {fileID: 65015492267237124} + - component: {fileID: 23755052841482864} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4981707683050382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930612303318000} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.060000002, z: 10} + m_LocalScale: {x: 0.77, y: 0.26, z: 20} + m_Children: [] + m_Father: {fileID: 4393500247777624} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33345590301219576 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930612303318000} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65015492267237124 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930612303318000} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23755052841482864 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930612303318000} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 262d8cbc02b104990841408098431457, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1939112378710628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4796822391050334} + - component: {fileID: 65814032642346288} + - component: {fileID: 54017759129031336} + - component: {fileID: 114799611184247278} + - component: {fileID: 114729119221978826} + - component: {fileID: 114322691115031348} + - component: {fileID: 5903164052970896384} + - component: {fileID: 7317454953167631695} + m_Layer: 0 + m_Name: Agent (2) + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4796822391050334 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30.56, y: 2, z: -9.559753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4151762782664136} + - {fileID: 4393500247777624} + m_Father: {fileID: 4307641258646068} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65814032642346288 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54017759129031336 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114799611184247278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: VisualFoodCollector + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114729119221978826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c66e6845309d241c78a6d77ee2567928, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1145096862361766} + turnSpeed: 300 + moveSpeed: 2 + normalMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + badMaterial: {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + goodMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + frozenMaterial: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + myLaser: {fileID: 1779831409734062} + contribute: 0 + useVectorObs: 0 + useVectorFrozenFlag: 1 +--- !u!114 &114322691115031348 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 20363738094913048} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 84 + m_Grayscale: 0 + m_ObservationType: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &5903164052970896384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &7317454953167631695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939112378710628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1971119195936814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4980287366775932} + - component: {fileID: 33886886862843664} + - component: {fileID: 23021469306627962} + - component: {fileID: 64888510637481462} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4980287366775932 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971119195936814} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.025, z: 0.01} + m_Children: [] + m_Father: {fileID: 4470879573182666} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33886886862843664 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971119195936814} + m_Mesh: {fileID: 4300000, guid: a9d8f499f5b9848438d280dc28b3b52e, type: 3} +--- !u!23 &23021469306627962 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971119195936814} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &64888510637481462 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971119195936814} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: a9d8f499f5b9848438d280dc28b3b52e, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..baee954d8ede1143449ab60276e391395bffe78b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c85b585836e104587b4efdc4d8b9d62b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..8387c1cc7c56f6024b9a548afb6f351a2a2d1319 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 506387099da9e4bea907fdb2ac09b051 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/FoodCollector.unity b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/FoodCollector.unity new file mode 100644 index 0000000000000000000000000000000000000000..00e815749f69a11ee5b4ea3608769cf912f811e0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/FoodCollector.unity @@ -0,0 +1,1038 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.6965513, g: 0, b: 1, a: 1} + m_AmbientGroundColor: {r: 1, g: 0.45977026, b: 0, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971168, g: 0.4997775, b: 0.57563686, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, + type: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &190823800 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_Name + value: GridFoodCollectorArea + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} +--- !u!1001 &392794583 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_Name + value: GridFoodCollectorArea (1) + objectReference: {fileID: 0} + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.y + value: -50 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 6035497842152854922, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 3067525015186813280, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 8466013622553267624, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 5837508007780682603, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 6247312751399400490, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} +--- !u!1 &625137506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 625137507} + - component: {fileID: 625137509} + - component: {fileID: 625137508} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &625137507 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625137506} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 965533424} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &625137508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625137506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9338235, g: 0.9338235, b: 0.9338235, a: 0.784} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 8 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: NOM +--- !u!222 &625137509 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625137506} + m_CullTransparentMesh: 0 +--- !u!1001 &916917435 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &965533423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965533424} + - component: {fileID: 965533426} + - component: {fileID: 965533425} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &965533424 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965533423} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 625137507} + m_Father: {fileID: 1064449898} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &965533425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965533423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.472} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &965533426 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965533423} + m_CullTransparentMesh: 0 +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: OverviewCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.2588191, y: 0, z: 0, w: 0.9659258} + m_LocalPosition: {x: 0, y: 75, z: -140} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 30, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 30 + orthographic: 0 + orthographic size: 35.13 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 1 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1043871087 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_Name + value: GridFoodCollectorArea (2) + objectReference: {fileID: 0} + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.y + value: -100 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 6035497842152854922, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 3067525015186813280, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 8466013622553267624, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 5837508007780682603, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 6247312751399400490, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} +--- !u!1 &1064449894 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1064449898} + - component: {fileID: 1064449897} + - component: {fileID: 1064449896} + - component: {fileID: 1064449895} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1064449895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064449894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1064449896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064449894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1064449897 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064449894} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1064449898 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064449894} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 965533424} + - {fileID: 1418304525} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1418304524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418304525} + - component: {fileID: 1418304527} + - component: {fileID: 1418304526} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1418304525 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418304524} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1064449898} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1000, y: -239.57645} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1418304526 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418304524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: New Text +--- !u!222 &1418304527 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418304524} + m_CullTransparentMesh: 0 +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: FoodCollectorSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: be4599983abb14917a1c76329db0b6b0, type: 3} + m_Name: + m_EditorClassIdentifier: + agents: [] + listArea: [] + totalScore: 0 + scoreText: {fileID: 1418304526} +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.71938086, y: 0.27357092, z: 4.1970553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1956702417 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1956702420} + - component: {fileID: 1956702419} + - component: {fileID: 1956702418} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1956702418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956702417} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1956702419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956702417} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1956702420 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956702417} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1985725465 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_Name + value: GridFoodCollectorArea (3) + objectReference: {fileID: 0} + - target: {fileID: 1819751139121548, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.y + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4688212428263696, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 6035497842152854922, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 3067525015186813280, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 8466013622553267624, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 5837508007780682603, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + - {fileID: 6247312751399400490, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: b5339e4b990ade14f992aadf3bf8591b, type: 3} +--- !u!1001 &2124876351 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/FoodCollector.unity.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/FoodCollector.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..447b4f0f394377d19400a6f74dd2a519b152e399 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/FoodCollector.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 74aeee1f5073c4998840fc784793f1ef +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/VisualFoodCollector.unity b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/VisualFoodCollector.unity new file mode 100644 index 0000000000000000000000000000000000000000..31b02e26db11b6b24094721182c9d58d1c1f818a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/VisualFoodCollector.unity @@ -0,0 +1,820 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.6965513, g: 0, b: 1, a: 1} + m_AmbientGroundColor: {r: 1, g: 0.45977026, b: 0, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &273651478 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 273651479} + - component: {fileID: 273651481} + - component: {fileID: 273651480} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &273651479 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273651478} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1799584681} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &273651480 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273651478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9338235, g: 0.9338235, b: 0.9338235, a: 0.784} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 8 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: NOM +--- !u!222 &273651481 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273651478} + m_CullTransparentMesh: 0 +--- !u!1 &378228137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 378228141} + - component: {fileID: 378228140} + - component: {fileID: 378228139} + - component: {fileID: 378228138} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &378228138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378228137} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &378228139 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378228137} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &378228140 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378228137} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &378228141 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378228137} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1799584681} + - {fileID: 1086444498} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &611835165 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &868060419 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1145096862361766, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_Name + value: VisualFoodCollectorArea + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: OverviewCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.2588191, y: 0, z: 0, w: 0.9659258} + m_LocalPosition: {x: 0, y: 75, z: -140} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 30, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 30 + orthographic: 0 + orthographic size: 35.13 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 1 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1086444495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1086444498} + - component: {fileID: 1086444497} + - component: {fileID: 1086444496} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1086444496 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1086444495} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: New Text +--- !u!222 &1086444497 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1086444495} + m_CullTransparentMesh: 0 +--- !u!224 &1086444498 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1086444495} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 378228141} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1000, y: -239.57645} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &1094805673 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1145096862361766, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_Name + value: VisualFoodCollectorArea (1) + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalPosition.y + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4307641258646068, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c85b585836e104587b4efdc4d8b9d62b, type: 3} +--- !u!1001 &1232021009 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537121661968964, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_Name + value: Directional Light + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: FoodCollectorSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: be4599983abb14917a1c76329db0b6b0, type: 3} + m_Name: + m_EditorClassIdentifier: + agents: [] + listArea: [] + totalScore: 0 + scoreText: {fileID: 1086444496} +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.71938086, y: 0.27357092, z: 4.1970553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1799584680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1799584681} + - component: {fileID: 1799584683} + - component: {fileID: 1799584682} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1799584681 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799584680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 273651479} + m_Father: {fileID: 378228141} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1799584682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799584680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.472} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &1799584683 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799584680} + m_CullTransparentMesh: 0 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/VisualFoodCollector.unity.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/VisualFoodCollector.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..16d66877209fde915c9cc8a0314a13b25e4b861b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scenes/VisualFoodCollector.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dbc5c542957ef47bd8ebe87fc1000c37 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..9cd88c8288421ed2c0eb48658d987d03b719f154 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 24167e7d4a558450dafd9e849146018a +folderAsset: yes +timeCreated: 1513126642 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..3bb6a0749292862adcd9112ad54666b9494a582e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs @@ -0,0 +1,272 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Random = UnityEngine.Random; + +public class FoodCollectorAgent : Agent +{ + FoodCollectorSettings m_FoodCollecterSettings; + public GameObject area; + FoodCollectorArea m_MyArea; + bool m_Frozen; + bool m_Poisoned; + bool m_Satiated; + bool m_Shoot; + float m_FrozenTime; + float m_EffectTime; + Rigidbody m_AgentRb; + float m_LaserLength; + // Speed of agent rotation. + public float turnSpeed = 300; + + // Speed of agent movement. + public float moveSpeed = 2; + public Material normalMaterial; + public Material badMaterial; + public Material goodMaterial; + public Material frozenMaterial; + public GameObject myLaser; + public bool contribute; + public bool useVectorObs; + [Tooltip("Use only the frozen flag in vector observations. If \"Use Vector Obs\" " + + "is checked, this option has no effect. This option is necessary for the " + + "VisualFoodCollector scene.")] + public bool useVectorFrozenFlag; + + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + m_AgentRb = GetComponent(); + m_MyArea = area.GetComponent(); + m_FoodCollecterSettings = FindObjectOfType(); + m_ResetParams = Academy.Instance.EnvironmentParameters; + SetResetParameters(); + } + + public override void CollectObservations(VectorSensor sensor) + { + if (useVectorObs) + { + var localVelocity = transform.InverseTransformDirection(m_AgentRb.velocity); + sensor.AddObservation(localVelocity.x); + sensor.AddObservation(localVelocity.z); + sensor.AddObservation(m_Frozen); + sensor.AddObservation(m_Shoot); + } + else if (useVectorFrozenFlag) + { + sensor.AddObservation(m_Frozen); + } + } + + public Color32 ToColor(int hexVal) + { + var r = (byte)((hexVal >> 16) & 0xFF); + var g = (byte)((hexVal >> 8) & 0xFF); + var b = (byte)(hexVal & 0xFF); + return new Color32(r, g, b, 255); + } + + public void MoveAgent(ActionBuffers actionBuffers) + { + m_Shoot = false; + + if (Time.time > m_FrozenTime + 4f && m_Frozen) + { + Unfreeze(); + } + if (Time.time > m_EffectTime + 0.5f) + { + if (m_Poisoned) + { + Unpoison(); + } + if (m_Satiated) + { + Unsatiate(); + } + } + + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var continuousActions = actionBuffers.ContinuousActions; + var discreteActions = actionBuffers.DiscreteActions; + + if (!m_Frozen) + { + var forward = Mathf.Clamp(continuousActions[0], -1f, 1f); + var right = Mathf.Clamp(continuousActions[1], -1f, 1f); + var rotate = Mathf.Clamp(continuousActions[2], -1f, 1f); + + dirToGo = transform.forward * forward; + dirToGo += transform.right * right; + rotateDir = -transform.up * rotate; + + var shootCommand = discreteActions[0] > 0; + if (shootCommand) + { + m_Shoot = true; + dirToGo *= 0.5f; + m_AgentRb.velocity *= 0.75f; + } + m_AgentRb.AddForce(dirToGo * moveSpeed, ForceMode.VelocityChange); + transform.Rotate(rotateDir, Time.fixedDeltaTime * turnSpeed); + } + + if (m_AgentRb.velocity.sqrMagnitude > 25f) // slow it down + { + m_AgentRb.velocity *= 0.95f; + } + + if (m_Shoot) + { + var myTransform = transform; + myLaser.transform.localScale = new Vector3(1f, 1f, m_LaserLength); + var rayDir = 25.0f * myTransform.forward; + Debug.DrawRay(myTransform.position, rayDir, Color.red, 0f, true); + RaycastHit hit; + if (Physics.SphereCast(transform.position, 2f, rayDir, out hit, 25f)) + { + if (hit.collider.gameObject.CompareTag("agent")) + { + hit.collider.gameObject.GetComponent().Freeze(); + } + } + } + else + { + myLaser.transform.localScale = new Vector3(0f, 0f, 0f); + } + } + + void Freeze() + { + gameObject.tag = "frozenAgent"; + m_Frozen = true; + m_FrozenTime = Time.time; + gameObject.GetComponentInChildren().material = frozenMaterial; + } + + void Unfreeze() + { + m_Frozen = false; + gameObject.tag = "agent"; + gameObject.GetComponentInChildren().material = normalMaterial; + } + + void Poison() + { + m_Poisoned = true; + m_EffectTime = Time.time; + gameObject.GetComponentInChildren().material = badMaterial; + } + + void Unpoison() + { + m_Poisoned = false; + gameObject.GetComponentInChildren().material = normalMaterial; + } + + void Satiate() + { + m_Satiated = true; + m_EffectTime = Time.time; + gameObject.GetComponentInChildren().material = goodMaterial; + } + + void Unsatiate() + { + m_Satiated = false; + gameObject.GetComponentInChildren().material = normalMaterial; + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + MoveAgent(actionBuffers); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var continuousActionsOut = actionsOut.ContinuousActions; + if (Input.GetKey(KeyCode.D)) + { + continuousActionsOut[2] = 1; + } + if (Input.GetKey(KeyCode.W)) + { + continuousActionsOut[0] = 1; + } + if (Input.GetKey(KeyCode.A)) + { + continuousActionsOut[2] = -1; + } + if (Input.GetKey(KeyCode.S)) + { + continuousActionsOut[0] = -1; + } + var discreteActionsOut = actionsOut.DiscreteActions; + discreteActionsOut[0] = Input.GetKey(KeyCode.Space) ? 1 : 0; + } + + public override void OnEpisodeBegin() + { + Unfreeze(); + Unpoison(); + Unsatiate(); + m_Shoot = false; + m_AgentRb.velocity = Vector3.zero; + myLaser.transform.localScale = new Vector3(0f, 0f, 0f); + transform.position = new Vector3(Random.Range(-m_MyArea.range, m_MyArea.range), + 2f, Random.Range(-m_MyArea.range, m_MyArea.range)) + + area.transform.position; + transform.rotation = Quaternion.Euler(new Vector3(0f, Random.Range(0, 360))); + + SetResetParameters(); + } + + void OnCollisionEnter(Collision collision) + { + if (collision.gameObject.CompareTag("food")) + { + Satiate(); + collision.gameObject.GetComponent().OnEaten(); + AddReward(1f); + if (contribute) + { + m_FoodCollecterSettings.totalScore += 1; + } + } + if (collision.gameObject.CompareTag("badFood")) + { + Poison(); + collision.gameObject.GetComponent().OnEaten(); + + AddReward(-1f); + if (contribute) + { + m_FoodCollecterSettings.totalScore -= 1; + } + } + } + + public void SetLaserLengths() + { + m_LaserLength = m_ResetParams.GetWithDefault("laser_length", 1.0f); + } + + public void SetAgentScale() + { + float agentScale = m_ResetParams.GetWithDefault("agent_scale", 1.0f); + gameObject.transform.localScale = new Vector3(agentScale, agentScale, agentScale); + } + + public void SetResetParameters() + { + SetLaserLengths(); + SetAgentScale(); + } +} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f44011ff63ed3313d4772f92374e32bdf8e241c6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c66e6845309d241c78a6d77ee2567928 +timeCreated: 1506829537 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorArea.cs b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorArea.cs new file mode 100644 index 0000000000000000000000000000000000000000..7fa3c911443d58545fb2741134a1f84cc19aec24 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorArea.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using Unity.MLAgentsExamples; + +public class FoodCollectorArea : Area +{ + public GameObject food; + public GameObject badFood; + public int numFood; + public int numBadFood; + public bool respawnFood; + public float range; + + void CreateFood(int num, GameObject type) + { + for (int i = 0; i < num; i++) + { + GameObject f = Instantiate(type, new Vector3(Random.Range(-range, range), 1f, + Random.Range(-range, range)) + transform.position, + Quaternion.Euler(new Vector3(0f, Random.Range(0f, 360f), 90f))); + f.GetComponent().respawn = respawnFood; + f.GetComponent().myArea = this; + } + } + + public void ResetFoodArea(GameObject[] agents) + { + foreach (GameObject agent in agents) + { + if (agent.transform.parent == gameObject.transform) + { + agent.transform.position = new Vector3(Random.Range(-range, range), 2f, + Random.Range(-range, range)) + + transform.position; + agent.transform.rotation = Quaternion.Euler(new Vector3(0f, Random.Range(0, 360))); + } + } + + CreateFood(numFood, food); + CreateFood(numBadFood, badFood); + } + + public override void ResetArea() + { + } +} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorArea.cs.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorArea.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..46c51778537f660594e660309488227ad0cd02b2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorArea.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e14a1d4accf634e3fb9b5bc94d023393 +timeCreated: 1506809696 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..640911332f16ec7f9d6e8ea68ef5a2d23aad8f5c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using UnityEngine.UI; +using Unity.MLAgents; + +public class FoodCollectorSettings : MonoBehaviour +{ + [HideInInspector] + public GameObject[] agents; + [HideInInspector] + public FoodCollectorArea[] listArea; + + public int totalScore; + public Text scoreText; + + StatsRecorder m_Recorder; + + public void Awake() + { + Academy.Instance.OnEnvironmentReset += EnvironmentReset; + m_Recorder = Academy.Instance.StatsRecorder; + } + + void EnvironmentReset() + { + ClearObjects(GameObject.FindGameObjectsWithTag("food")); + ClearObjects(GameObject.FindGameObjectsWithTag("badFood")); + + agents = GameObject.FindGameObjectsWithTag("agent"); + listArea = FindObjectsOfType(); + foreach (var fa in listArea) + { + fa.ResetFoodArea(agents); + } + + totalScore = 0; + } + + void ClearObjects(GameObject[] objects) + { + foreach (var food in objects) + { + Destroy(food); + } + } + + public void Update() + { + scoreText.text = $"Score: {totalScore}"; + + // Send stats via SideChannel so that they'll appear in TensorBoard. + // These values get averaged every summary_frequency steps, so we don't + // need to send every Update() call. + if ((Time.frameCount % 100) == 0) + { + m_Recorder.Add("TotalScore", totalScore); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..52648be21d835b9d12b46bbe5dcc7ee5b191d7c6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be4599983abb14917a1c76329db0b6b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodLogic.cs b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodLogic.cs new file mode 100644 index 0000000000000000000000000000000000000000..4e961d99d20f30e730d916addb43fe5624df986d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodLogic.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +public class FoodLogic : MonoBehaviour +{ + public bool respawn; + public FoodCollectorArea myArea; + + public void OnEaten() + { + if (respawn) + { + transform.position = new Vector3(Random.Range(-myArea.range, myArea.range), + 3f, + Random.Range(-myArea.range, myArea.range)) + myArea.transform.position; + } + else + { + Destroy(gameObject); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodLogic.cs.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodLogic.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d094216d030427102e8a76fbb0a8f73ba8b2c511 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodLogic.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 49a4e5684f6ac49b19183e8423231284 +timeCreated: 1513129991 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..4e8570e73dee05cd0cc66d2f0d939b108e8cf25f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fa21ae56285ad4f6d9dfcd3fef4cd462 +folderAsset: yes +timeCreated: 1513126685 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx new file mode 100644 index 0000000000000000000000000000000000000000..63e47cff08035670201d8231fa495893de323f2f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0fbc59d9948765c0521ab785a0b97e227185cea148ddf41d9082538d53c6d7f +size 621416 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..c803e398bfc0ab2d4a5313a19db2ae3309f607c1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: f4b8757bd574543b1aa06d9294a5d707 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx new file mode 100644 index 0000000000000000000000000000000000000000..015ff78f1c47d1c66c879995a8416200d60c5779 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ef12bc423aee4bf253d08026dcd38be570e7e8ce47328ed5741b359d8a55089 +size 1512131 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebb608bfe5439be64888cba6c09d9fbb7bd53aa8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: ec4b31b5d66ca4e51ae3ac41945facb2 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx b/Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx new file mode 100644 index 0000000000000000000000000000000000000000..e47f6de06b23fb8b2be302fa1ebff92ccc78efed --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51077f37966fbe6a37d96b8744024c2abac6c1c6227b863388aafb82859e2bbd +size 621416 diff --git a/Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx.meta b/Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..b762b1b66f6bf4593d2dcd9cdc967f6ae083487c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridFoodCollector.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 49be8866460a44d34b25fe7a67208eaa +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld.meta b/Project/Assets/ML-Agents/Examples/GridWorld.meta new file mode 100644 index 0000000000000000000000000000000000000000..ba952e55dbfa585e4d084e901f9b3d09dc129ef4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4ae2a938a48094ad5ba642af7b6027ea +folderAsset: yes +timeCreated: 1517366517 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Demos.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..45c3c54b6836260819abbebb4f8ef9c0c07b1e90 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 334ae08b3f6dd45b0a1ac913bea6edac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo b/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo new file mode 100644 index 0000000000000000000000000000000000000000..1c2ff3b079df5b08295298adf01805df777a85a7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0b76bc0372fc0030fe1b08e1c811d0a172adf4545927147eb2e7e330b5b22cf +size 3421482 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..2a4d92b513836ee71f092732388b2cc1f98419e6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0092f2e4aece345aea4730a37eeebf68 +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400002 + second: Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGridWorld.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d5f5ef7b63a098e2de7768c3e3e8f9d77042a36c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7858069efa4794699844aa77e7effb64 +folderAsset: yes +timeCreated: 1504978425 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/Area.prefab b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/Area.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6cf59dd39f47aaa4c4c11e4e4ebabd2e4d0a7371 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/Area.prefab @@ -0,0 +1,2009 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1220141488340396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4007504045862718} + - component: {fileID: 33222498917940530} + - component: {fileID: 65623874337418966} + - component: {fileID: 23631786362770220} + m_Layer: 0 + m_Name: sS + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4007504045862718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &33222498917940530 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65623874337418966 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23631786362770220 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1324124466577712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4036590373541758} + m_Layer: 0 + m_Name: scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4036590373541758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324124466577712} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4558725385767926} + - {fileID: 4088684435237278} + - {fileID: 4399229758781002} + - {fileID: 4479182187388718} + - {fileID: 4007504045862718} + m_Father: {fileID: 4124767863011510} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1376404096451388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4206155882393090} + - component: {fileID: 33152597024021804} + - component: {fileID: 65829039252076494} + - component: {fileID: 23027717151182946} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4206155882393090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33152597024021804 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65829039252076494 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23027717151182946 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1394424645070404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4890346887087870} + - component: {fileID: 20743940359151984} + m_Layer: 0 + m_Name: agentCam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4890346887087870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394424645070404} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4124767863011510} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!20 &20743940359151984 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394424645070404} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1488387672112076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4034807106460652} + - component: {fileID: 33823710649932060} + - component: {fileID: 65073501172061214} + - component: {fileID: 114935253044749092} + - component: {fileID: 114650561397225712} + - component: {fileID: 114889700908650620} + - component: {fileID: 7980686505185502968} + - component: {fileID: 8594362037450380977} + m_Layer: 8 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4034807106460652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1887170508549532943} + - {fileID: 4973675812163709526} + - {fileID: 4067739522719805371} + m_Father: {fileID: 4124767863011510} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33823710649932060 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65073501172061214 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114935253044749092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 05000000 + VectorActionSize: 05000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 255872f7c70ca4901b80bd5aed4a630f, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridWorld + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114650561397225712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 857707f3f352541d5b858efca4479b95, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 100 + area: {fileID: 114704252266302846} + timeBetweenDecisionsAtInference: 0.15 + renderCamera: {fileID: 0} + GreenBottom: {fileID: 8920732062626264647} + RedBottom: {fileID: 4581466698767512273} + maskActions: 1 +--- !u!114 &114889700908650620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 20743940359151984} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 64 + m_Grayscale: 0 + m_ObservationType: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &7980686505185502968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &8594362037450380977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 38b7cc1f5819445aa85e9a9b054552dc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: VectorSensor + m_ObservationSize: 2 + m_ObservationType: 1 +--- !u!1 &1625008366184734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4124767863011510} + - component: {fileID: 114704252266302846} + m_Layer: 0 + m_Name: Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4124767863011510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625008366184734} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4036590373541758} + - {fileID: 4034807106460652} + - {fileID: 4890346887087870} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114704252266302846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625008366184734} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 676658555cb2d4884aa8285062aab2a1, type: 3} + m_Name: + m_EditorClassIdentifier: + actorObjs: [] + players: + trueAgent: {fileID: 1488387672112076} + PlusPref: {fileID: 1508142483324970, guid: 1ec4e4e96e7514d45b7ebc3ba5a9a481, type: 3} + ExPref: {fileID: 1811317785436014, guid: d13ee2db77b3a4dcc8664d2fe2a0f219, type: 3} + numberOfPlus: 1 + numberOfEx: 1 +--- !u!1 &1656910849934022 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4399229758781002} + - component: {fileID: 33099526047820694} + - component: {fileID: 65461269218509740} + - component: {fileID: 23289473826438240} + m_Layer: 0 + m_Name: sW + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4399229758781002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33099526047820694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65461269218509740 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23289473826438240 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1659433968697430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4269224463113992} + - component: {fileID: 33813191588135886} + - component: {fileID: 65922560747716658} + - component: {fileID: 23740566138369150} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4269224463113992 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33813191588135886 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65922560747716658 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23740566138369150 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1696233368146792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4616835664324708} + - component: {fileID: 33825707296015202} + - component: {fileID: 65020466233620882} + - component: {fileID: 23205928308810388} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4616835664324708 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33825707296015202 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65020466233620882 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23205928308810388 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1805019891541352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4041386967126538} + - component: {fileID: 33172111281575160} + - component: {fileID: 65321351298141546} + - component: {fileID: 23200653194041678} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4041386967126538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33172111281575160 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65321351298141546 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23200653194041678 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1817050562469182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4088684435237278} + - component: {fileID: 33550006272110778} + - component: {fileID: 65782631683949718} + - component: {fileID: 23048682015641784} + m_Layer: 0 + m_Name: sE + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4088684435237278 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33550006272110778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65782631683949718 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23048682015641784 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1881546218232006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4558725385767926} + - component: {fileID: 33934167732208046} + - component: {fileID: 64291102267821286} + - component: {fileID: 23096611355272904} + m_Layer: 8 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4558725385767926 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.5, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33934167732208046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!64 &64291102267821286 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23096611355272904 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1898983423426052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4479182187388718} + - component: {fileID: 33572314435256338} + - component: {fileID: 65944324207520424} + - component: {fileID: 23171092457376468} + m_Layer: 0 + m_Name: sN + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4479182187388718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &33572314435256338 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65944324207520424 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23171092457376468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &462420252240335615 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4330763733777060503} + - component: {fileID: 8435613835109386977} + - component: {fileID: 3156974850325288354} + - component: {fileID: 1839010821600771210} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4330763733777060503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8435613835109386977 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3156974850325288354 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1839010821600771210 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2140658693492366245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8139227632564183964} + - component: {fileID: 4441789264695109679} + - component: {fileID: 3147603231634508380} + - component: {fileID: 9040646333384890017} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8139227632564183964 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4441789264695109679 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3147603231634508380 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &9040646333384890017 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2434355380895249150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3147246490325979217} + - component: {fileID: 8169197181194967258} + - component: {fileID: 1509650541629713148} + - component: {fileID: 5441975983057232048} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3147246490325979217 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8169197181194967258 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1509650541629713148 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &5441975983057232048 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3626447536540640153 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 285043643249855503} + - component: {fileID: 4813994350244858160} + - component: {fileID: 4299335526686865903} + - component: {fileID: 4749183378958426266} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &285043643249855503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4813994350244858160 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &4299335526686865903 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &4749183378958426266 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3953431543902180633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8588407358000093335} + - component: {fileID: 4808436284804927424} + - component: {fileID: 6779118034279698010} + - component: {fileID: 5114579664306028427} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8588407358000093335 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4808436284804927424 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6779118034279698010 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &5114579664306028427 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4472785895906345941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 185096777859856055} + - component: {fileID: 5181354088122057621} + - component: {fileID: 6364443950699486206} + - component: {fileID: 8304070115246987804} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &185096777859856055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5181354088122057621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6364443950699486206 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8304070115246987804 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4581466698767512273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4067739522719805371} + m_Layer: 8 + m_Name: Bottom-Red + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4067739522719805371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4581466698767512273} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 2580315339548055252} + - {fileID: 285043643249855503} + - {fileID: 8139227632564183964} + - {fileID: 4330763733777060503} + m_Father: {fileID: 4034807106460652} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5770321103113468817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2580315339548055252} + - component: {fileID: 2649567833276537042} + - component: {fileID: 6760739988300919339} + - component: {fileID: 1106153669054352} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2580315339548055252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2649567833276537042 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6760739988300919339 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1106153669054352 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6495503354550094147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1887170508549532943} + m_Layer: 8 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1887170508549532943 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495503354550094147} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0} + m_LocalScale: {x: 1, y: 0.3, z: 1} + m_Children: + - {fileID: 4269224463113992} + - {fileID: 4206155882393090} + - {fileID: 4041386967126538} + - {fileID: 4616835664324708} + m_Father: {fileID: 4034807106460652} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7814121189520934378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4619882085342295572} + - component: {fileID: 8051799667743417835} + - component: {fileID: 2212299054001097616} + - component: {fileID: 3530237456059440266} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4619882085342295572 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8051799667743417835 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &2212299054001097616 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3530237456059440266 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8920732062626264647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4973675812163709526} + m_Layer: 8 + m_Name: Bottom-Green + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4973675812163709526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8920732062626264647} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 8588407358000093335} + - {fileID: 185096777859856055} + - {fileID: 3147246490325979217} + - {fileID: 4619882085342295572} + m_Father: {fileID: 4034807106460652} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/Area.prefab.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/Area.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..080b95065783226798a7aa05dc55ea0eba9d92ce --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/Area.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c2bd19e4bbda4991b74387ca5d28156 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/AreaColab.prefab b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/AreaColab.prefab new file mode 100644 index 0000000000000000000000000000000000000000..5b1a4e44341e517202e31a04515e9238aee4c3db --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/AreaColab.prefab @@ -0,0 +1,2029 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1220141488340396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4007504045862718} + - component: {fileID: 33222498917940530} + - component: {fileID: 65623874337418966} + - component: {fileID: 23631786362770220} + m_Layer: 0 + m_Name: sS + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4007504045862718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &33222498917940530 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65623874337418966 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23631786362770220 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220141488340396} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1324124466577712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4036590373541758} + m_Layer: 0 + m_Name: scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4036590373541758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324124466577712} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4558725385767926} + - {fileID: 4088684435237278} + - {fileID: 4399229758781002} + - {fileID: 4479182187388718} + - {fileID: 4007504045862718} + m_Father: {fileID: 4124767863011510} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1376404096451388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4206155882393090} + - component: {fileID: 33152597024021804} + - component: {fileID: 65829039252076494} + - component: {fileID: 23027717151182946} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4206155882393090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33152597024021804 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65829039252076494 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23027717151182946 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376404096451388} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1394424645070404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4890346887087870} + - component: {fileID: 20743940359151984} + m_Layer: 0 + m_Name: agentCam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4890346887087870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394424645070404} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4124767863011510} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!20 &20743940359151984 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394424645070404} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1488387672112076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4034807106460652} + - component: {fileID: 33823710649932060} + - component: {fileID: 65073501172061214} + - component: {fileID: 114935253044749092} + - component: {fileID: 114650561397225712} + - component: {fileID: 114889700908650620} + - component: {fileID: 7980686505185502968} + m_Layer: 8 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4034807106460652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1887170508549532943} + - {fileID: 4973675812163709526} + - {fileID: 4067739522719805371} + m_Father: {fileID: 4124767863011510} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33823710649932060 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65073501172061214 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114935253044749092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 05000000 + VectorActionSize: 05000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: fa541e2e31feaa144a9ebcc21e151fb5, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridWorld + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114650561397225712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 857707f3f352541d5b858efca4479b95, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 100 + area: {fileID: 114704252266302846} + timeBetweenDecisionsAtInference: 0.15 + renderCamera: {fileID: 0} + GreenBottom: {fileID: 8920732062626264647} + RedBottom: {fileID: 4581466698767512273} + maskActions: 0 +--- !u!114 &114889700908650620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 282f342c2ab144bf38be65d4d0c4e07d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 20743940359151984} + m_SensorName: CameraSensor + m_Width: 84 + m_Height: 64 + m_Grayscale: 0 + m_ObservationType: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &7980686505185502968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488387672112076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1625008366184734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4124767863011510} + - component: {fileID: 114704252266302846} + m_Layer: 0 + m_Name: AreaColab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4124767863011510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625008366184734} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4036590373541758} + - {fileID: 4034807106460652} + - {fileID: 4890346887087870} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114704252266302846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625008366184734} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 676658555cb2d4884aa8285062aab2a1, type: 3} + m_Name: + m_EditorClassIdentifier: + actorObjs: [] + players: + trueAgent: {fileID: 1488387672112076} + GreenPlusPrefab: {fileID: 1508142483324970, guid: 1ec4e4e96e7514d45b7ebc3ba5a9a481, + type: 3} + RedExPrefab: {fileID: 1811317785436014, guid: d13ee2db77b3a4dcc8664d2fe2a0f219, + type: 3} + numberOfPlus: 1 + numberOfEx: 1 +--- !u!1 &1656910849934022 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4399229758781002} + - component: {fileID: 33099526047820694} + - component: {fileID: 65461269218509740} + - component: {fileID: 23289473826438240} + m_Layer: 0 + m_Name: sW + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4399229758781002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33099526047820694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65461269218509740 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23289473826438240 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656910849934022} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1659433968697430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4269224463113992} + - component: {fileID: 33813191588135886} + - component: {fileID: 65922560747716658} + - component: {fileID: 23740566138369150} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4269224463113992 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33813191588135886 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65922560747716658 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23740566138369150 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659433968697430} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1696233368146792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4616835664324708} + - component: {fileID: 33825707296015202} + - component: {fileID: 65020466233620882} + - component: {fileID: 23205928308810388} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4616835664324708 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33825707296015202 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65020466233620882 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23205928308810388 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696233368146792} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1805019891541352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4041386967126538} + - component: {fileID: 33172111281575160} + - component: {fileID: 65321351298141546} + - component: {fileID: 23200653194041678} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4041386967126538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1887170508549532943} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33172111281575160 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65321351298141546 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23200653194041678 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805019891541352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1817050562469182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4088684435237278} + - component: {fileID: 33550006272110778} + - component: {fileID: 65782631683949718} + - component: {fileID: 23048682015641784} + m_Layer: 0 + m_Name: sE + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4088684435237278 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33550006272110778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65782631683949718 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23048682015641784 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817050562469182} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1881546218232006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4558725385767926} + - component: {fileID: 33934167732208046} + - component: {fileID: 64291102267821286} + - component: {fileID: 23096611355272904} + m_Layer: 8 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4558725385767926 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.5, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33934167732208046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!64 &64291102267821286 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23096611355272904 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881546218232006} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1898983423426052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4479182187388718} + - component: {fileID: 33572314435256338} + - component: {fileID: 65944324207520424} + - component: {fileID: 23171092457376468} + m_Layer: 0 + m_Name: sN + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4479182187388718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 4036590373541758} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &33572314435256338 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65944324207520424 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23171092457376468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898983423426052} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &462420252240335615 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4330763733777060503} + - component: {fileID: 8435613835109386977} + - component: {fileID: 3156974850325288354} + - component: {fileID: 1839010821600771210} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4330763733777060503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8435613835109386977 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3156974850325288354 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1839010821600771210 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462420252240335615} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2140658693492366245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8139227632564183964} + - component: {fileID: 4441789264695109679} + - component: {fileID: 3147603231634508380} + - component: {fileID: 9040646333384890017} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8139227632564183964 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4441789264695109679 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3147603231634508380 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &9040646333384890017 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140658693492366245} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2434355380895249150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3147246490325979217} + - component: {fileID: 8169197181194967258} + - component: {fileID: 1509650541629713148} + - component: {fileID: 5441975983057232048} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3147246490325979217 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8169197181194967258 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1509650541629713148 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &5441975983057232048 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2434355380895249150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3626447536540640153 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 285043643249855503} + - component: {fileID: 4813994350244858160} + - component: {fileID: 4299335526686865903} + - component: {fileID: 4749183378958426266} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &285043643249855503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4813994350244858160 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &4299335526686865903 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &4749183378958426266 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3626447536540640153} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3953431543902180633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8588407358000093335} + - component: {fileID: 4808436284804927424} + - component: {fileID: 6779118034279698010} + - component: {fileID: 5114579664306028427} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8588407358000093335 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4808436284804927424 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6779118034279698010 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &5114579664306028427 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3953431543902180633} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &4472785895906345941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 185096777859856055} + - component: {fileID: 5181354088122057621} + - component: {fileID: 6364443950699486206} + - component: {fileID: 8304070115246987804} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &185096777859856055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5181354088122057621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6364443950699486206 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8304070115246987804 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4472785895906345941} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &4581466698767512273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4067739522719805371} + m_Layer: 8 + m_Name: Bottom-Red + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4067739522719805371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4581466698767512273} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 2580315339548055252} + - {fileID: 285043643249855503} + - {fileID: 8139227632564183964} + - {fileID: 4330763733777060503} + m_Father: {fileID: 4034807106460652} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5770321103113468817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2580315339548055252} + - component: {fileID: 2649567833276537042} + - component: {fileID: 6760739988300919339} + - component: {fileID: 1106153669054352} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2580315339548055252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4067739522719805371} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2649567833276537042 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6760739988300919339 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1106153669054352 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5770321103113468817} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6495503354550094147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1887170508549532943} + m_Layer: 8 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1887170508549532943 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495503354550094147} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0} + m_LocalScale: {x: 1, y: 0.3, z: 1} + m_Children: + - {fileID: 4269224463113992} + - {fileID: 4206155882393090} + - {fileID: 4041386967126538} + - {fileID: 4616835664324708} + m_Father: {fileID: 4034807106460652} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7814121189520934378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4619882085342295572} + - component: {fileID: 8051799667743417835} + - component: {fileID: 2212299054001097616} + - component: {fileID: 3530237456059440266} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4619882085342295572 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4973675812163709526} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8051799667743417835 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &2212299054001097616 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3530237456059440266 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7814121189520934378} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8920732062626264647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4973675812163709526} + m_Layer: 8 + m_Name: Bottom-Green + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4973675812163709526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8920732062626264647} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 8588407358000093335} + - {fileID: 185096777859856055} + - {fileID: 3147246490325979217} + - {fileID: 4619882085342295572} + m_Father: {fileID: 4034807106460652} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/AreaColab.prefab.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/AreaColab.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..957991d90535b3294563e000a86202628dc3c081 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/AreaColab.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9841d390cbbc64944afad281be2e9034 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/agentRenderTexture.renderTexture b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/agentRenderTexture.renderTexture new file mode 100644 index 0000000000000000000000000000000000000000..3c2366415f128b0913b86bc1f95e18e261fc8f31 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/agentRenderTexture.renderTexture @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: agentRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_Width: 84 + m_Height: 64 + m_AntiAliasing: 1 + m_DepthFormat: 1 + m_ColorFormat: 0 + m_MipMap: 0 + m_GenerateMips: 0 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/agentRenderTexture.renderTexture.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/agentRenderTexture.renderTexture.meta new file mode 100644 index 0000000000000000000000000000000000000000..9813782439c56147fe6c0edef87a8f8a35f5d40c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/agentRenderTexture.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 114608d5384404f89bff4b6f88432958 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-ex.prefab b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-ex.prefab new file mode 100644 index 0000000000000000000000000000000000000000..0551239705b399fa9c4f045b2c07b8ff56a3efe2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-ex.prefab @@ -0,0 +1,283 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1308998153656692 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4873889445063974} + - component: {fileID: 33297748647671602} + - component: {fileID: 65439704505015706} + - component: {fileID: 23833739472231758} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4873889445063974 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308998153656692} + m_LocalRotation: {x: -0, y: -0.38268343, z: -0, w: 0.92387956} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.20000002, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4302184315941402} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: -45, z: 0} +--- !u!33 &33297748647671602 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308998153656692} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65439704505015706 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308998153656692} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23833739472231758 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308998153656692} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1778744900735866 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4012045820321770} + - component: {fileID: 33355843709390916} + - component: {fileID: 65087511814012390} + - component: {fileID: 23151230937589412} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4012045820321770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778744900735866} + m_LocalRotation: {x: -0, y: 0.38268343, z: -0, w: 0.92387956} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.20000002, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4302184315941402} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 45, z: 0} +--- !u!33 &33355843709390916 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778744900735866} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65087511814012390 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778744900735866} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23151230937589412 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778744900735866} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1811317785436014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4302184315941402} + - component: {fileID: 33217562963522382} + - component: {fileID: 65172047905851350} + - component: {fileID: 23740670609665506} + m_Layer: 0 + m_Name: goal-ex + m_TagString: ex + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4302184315941402 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811317785436014} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4012045820321770} + - {fileID: 4873889445063974} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33217562963522382 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811317785436014} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65172047905851350 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811317785436014} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.9, y: 0.9, z: 0.9} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23740670609665506 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811317785436014} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-ex.prefab.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-ex.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..e9aeed46b0ee8c3aa2373dafec20647697a3b7ed --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-ex.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d13ee2db77b3a4dcc8664d2fe2a0f219 +timeCreated: 1504978468 +licenseType: Pro +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-plus.prefab b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-plus.prefab new file mode 100644 index 0000000000000000000000000000000000000000..c032e4512d7b27221b33a71d6105dcdccaf5d207 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-plus.prefab @@ -0,0 +1,283 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1508142483324970 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4266498611226432} + - component: {fileID: 33776711028771674} + - component: {fileID: 65981801441420474} + - component: {fileID: 23936659159756770} + m_Layer: 0 + m_Name: goal-plus + m_TagString: plus + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4266498611226432 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508142483324970} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4889404563930382} + - {fileID: 4401303026649678} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33776711028771674 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508142483324970} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65981801441420474 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508142483324970} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.9, y: 0.9, z: 0.9} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23936659159756770 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508142483324970} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1765554778432800 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4401303026649678} + - component: {fileID: 33048545948983598} + - component: {fileID: 65991532807116388} + - component: {fileID: 23889676296172340} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4401303026649678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1765554778432800} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4266498611226432} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33048545948983598 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1765554778432800} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65991532807116388 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1765554778432800} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23889676296172340 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1765554778432800} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1823577511622086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4889404563930382} + - component: {fileID: 33298529236581638} + - component: {fileID: 65392370003653392} + - component: {fileID: 23079780473834094} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4889404563930382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823577511622086} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 4266498611226432} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33298529236581638 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823577511622086} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65392370003653392 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823577511622086} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23079780473834094 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823577511622086} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-plus.prefab.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-plus.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..4e87137e2f9387b1c908f64a1979122f9f775a59 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Prefabs/goal-plus.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1ec4e4e96e7514d45b7ebc3ba5a9a481 +timeCreated: 1504978468 +licenseType: Pro +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scenes.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..2b603b2ef19016f025872e82a48ba3a970b30e61 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7f01678223eb4dd69f8c41857f79a0d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity new file mode 100644 index 0000000000000000000000000000000000000000..aedee626ffc6ec97a08a49320e276fdd459b9e4c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity @@ -0,0 +1,3171 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971168, g: 0.4997775, b: 0.57563686, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 7f0b1be1ff5294d44a42985b3d87b2df, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &2047662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2047664} + - component: {fileID: 2047663} + m_Layer: 0 + m_Name: GridSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2047663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2047662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b93320f838a5465296582bcbf7e4bac, type: 3} + m_Name: + m_EditorClassIdentifier: + MainCamera: {fileID: 99095115} +--- !u!4 &2047664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2047662} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 9.52, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &99095112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 99095116} + - component: {fileID: 99095115} + - component: {fileID: 99095113} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &99095113 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99095112} + m_Enabled: 1 +--- !u!20 &99095115 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99095112} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 58 + orthographic: 1 + orthographic size: 5.46 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &99095116 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99095112} + m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} + m_LocalPosition: {x: -5, y: 8.2, z: -5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} +--- !u!1 &125487785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1488387672112076, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 125487786} + - component: {fileID: 125487789} + - component: {fileID: 125487788} + - component: {fileID: 125487790} + - component: {fileID: 125487787} + - component: {fileID: 125487791} + - component: {fileID: 125487792} + m_Layer: 8 + m_Name: RenderTextureAgent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &125487786 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4034807106460652, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 718770070} + - {fileID: 299607778} + - {fileID: 1559803815} + m_Father: {fileID: 1795599558} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &125487787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 114650561397225712, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 857707f3f352541d5b858efca4479b95, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 100 + hasUpgradedFromAgentParameters: 1 + MaxStep: 100 + area: {fileID: 1795599557} + timeBetweenDecisionsAtInference: 0.15 + renderCamera: {fileID: 797520692} + GreenBottom: {fileID: 299607777} + RedBottom: {fileID: 1559803814} + maskActions: 1 +--- !u!65 &125487788 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65073501172061214, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &125487789 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33823710649932060, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &125487790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 05000000 + VectorActionSize: 05000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 255872f7c70ca4901b80bd5aed4a630f, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridWorld + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &125487791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 132e1194facb64429b007ea1edf562d0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderTexture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2} + m_SensorName: RenderTextureSensor + m_Grayscale: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!114 &125487792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 38b7cc1f5819445aa85e9a9b054552dc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: VectorlSensor + m_ObservationSize: 2 + m_ObservationType: 1 +--- !u!1 &299607777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 299607778} + m_Layer: 8 + m_Name: Bottom-Green + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &299607778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 299607777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 686883666} + - {fileID: 1468557422} + - {fileID: 1382787854} + - {fileID: 527080937} + m_Father: {fileID: 125487786} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &331700282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 331700283} + - component: {fileID: 331700286} + - component: {fileID: 331700285} + - component: {fileID: 331700284} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &331700283 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &331700284 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &331700285 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &331700286 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &363761396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 363761400} + - component: {fileID: 363761399} + - component: {fileID: 363761398} + - component: {fileID: 363761397} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &363761397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &363761398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &363761399 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &363761400 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1553342943} + - {fileID: 918893359} + - {fileID: 1305247360} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &486401523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1324124466577712, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 486401524} + m_Layer: 0 + m_Name: scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &486401524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4036590373541758, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486401523} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1208586861} + - {fileID: 1045409644} + - {fileID: 959566332} + - {fileID: 1938864793} + - {fileID: 1726089814} + m_Father: {fileID: 1795599558} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &527080936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 527080937} + - component: {fileID: 527080940} + - component: {fileID: 527080939} + - component: {fileID: 527080938} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &527080937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &527080938 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &527080939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &527080940 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &561544094 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (6) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &638135089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 638135090} + - component: {fileID: 638135093} + - component: {fileID: 638135092} + - component: {fileID: 638135091} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &638135090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &638135091 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &638135092 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &638135093 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &673061833 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &686883665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 686883666} + - component: {fileID: 686883669} + - component: {fileID: 686883668} + - component: {fileID: 686883667} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &686883666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &686883667 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &686883668 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &686883669 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &703155814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 703155815} + - component: {fileID: 703155818} + - component: {fileID: 703155817} + - component: {fileID: 703155816} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &703155815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &703155816 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &703155817 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &703155818 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &715789529 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &718770069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 718770070} + m_Layer: 8 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &718770070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718770069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0} + m_LocalScale: {x: 1, y: 0.29999998, z: 1} + m_Children: + - {fileID: 638135090} + - {fileID: 1747589537} + - {fileID: 331700283} + - {fileID: 2041478814} + m_Father: {fileID: 125487786} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &742849316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742849319} + - component: {fileID: 742849318} + - component: {fileID: 742849317} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &742849317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742849316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &742849318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742849316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &742849319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742849316} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &790097508 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (2) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &797520691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1394424645070404, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 797520693} + - component: {fileID: 797520692} + m_Layer: 0 + m_Name: agentCam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &797520692 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 20743940359151984, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797520691} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &797520693 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4890346887087870, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797520691} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1795599558} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &862412531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 862412532} + - component: {fileID: 862412535} + - component: {fileID: 862412534} + - component: {fileID: 862412533} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &862412532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &862412533 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &862412534 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &862412535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &885582225 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (5) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &918893358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 918893359} + - component: {fileID: 918893361} + - component: {fileID: 918893360} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &918893359 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918893358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 363761400} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 150, y: -230} + m_SizeDelta: {x: 160, y: 55.599976} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &918893360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918893358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 7 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Agent View + + (RenderTexture)' +--- !u!222 &918893361 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918893358} + m_CullTransparentMesh: 0 +--- !u!1001 &949576938 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &949789229 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (4) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &959566328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1656910849934022, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 959566332} + - component: {fileID: 959566331} + - component: {fileID: 959566330} + - component: {fileID: 959566329} + m_Layer: 0 + m_Name: sW + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &959566329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23289473826438240, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &959566330 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65461269218509740, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &959566331 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33099526047820694, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &959566332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4399229758781002, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1045409640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1817050562469182, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1045409644} + - component: {fileID: 1045409643} + - component: {fileID: 1045409642} + - component: {fileID: 1045409641} + m_Layer: 0 + m_Name: sE + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1045409641 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23048682015641784, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1045409642 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65782631683949718, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1045409643 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33550006272110778, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1045409644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4088684435237278, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1208586857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1881546218232006, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1208586861} + - component: {fileID: 1208586860} + - component: {fileID: 1208586859} + - component: {fileID: 1208586858} + m_Layer: 8 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1208586858 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23096611355272904, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1208586859 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 64291102267821286, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1208586860 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33934167732208046, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1208586861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4558725385767926, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.5, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1305247359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1305247360} + - component: {fileID: 1305247362} + - component: {fileID: 1305247361} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1305247360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305247359} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 363761400} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 150, y: -128} + m_SizeDelta: {x: 200, y: 152} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1305247361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305247359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1305247362 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305247359} + m_CullTransparentMesh: 0 +--- !u!1001 &1305594059 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (3) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &1382787853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1382787854} + - component: {fileID: 1382787857} + - component: {fileID: 1382787856} + - component: {fileID: 1382787855} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1382787854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1382787855 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1382787856 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1382787857 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1468557421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1468557422} + - component: {fileID: 1468557425} + - component: {fileID: 1468557424} + - component: {fileID: 1468557423} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1468557422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1468557423 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1468557424 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1468557425 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1553342942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1553342943} + - component: {fileID: 1553342945} + - component: {fileID: 1553342944} + m_Layer: 5 + m_Name: DebugTxt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1553342943 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553342942} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 363761400} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 179.2, y: -78.9} + m_SizeDelta: {x: 300, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1553342944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553342942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1553342945 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553342942} + m_CullTransparentMesh: 0 +--- !u!1001 &1558187638 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (1) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} +--- !u!1 &1559803814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1559803815} + m_Layer: 8 + m_Name: Bottom-Red + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1559803815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559803814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 1880938766} + - {fileID: 1929077700} + - {fileID: 862412532} + - {fileID: 703155815} + m_Father: {fileID: 125487786} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1726089810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1220141488340396, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1726089814} + - component: {fileID: 1726089813} + - component: {fileID: 1726089812} + - component: {fileID: 1726089811} + m_Layer: 0 + m_Name: sS + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1726089811 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23631786362770220, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1726089812 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65623874337418966, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1726089813 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33222498917940530, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1726089814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4007504045862718, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!1 &1747589536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1747589537} + - component: {fileID: 1747589540} + - component: {fileID: 1747589539} + - component: {fileID: 1747589538} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1747589537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1747589538 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1747589539 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1747589540 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1795599556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1795599558} + - component: {fileID: 1795599557} + m_Layer: 0 + m_Name: AreaRenderTexture + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1795599557 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 114704252266302846, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795599556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 676658555cb2d4884aa8285062aab2a1, type: 3} + m_Name: + m_EditorClassIdentifier: + actorObjs: [] + players: + trueAgent: {fileID: 125487785} + PlusPref: {fileID: 1508142483324970, guid: 1ec4e4e96e7514d45b7ebc3ba5a9a481, type: 3} + ExPref: {fileID: 1811317785436014, guid: d13ee2db77b3a4dcc8664d2fe2a0f219, type: 3} + numberOfPlus: 1 + numberOfEx: 1 +--- !u!4 &1795599558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795599556} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 486401524} + - {fileID: 125487786} + - {fileID: 797520693} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1880938765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1880938766} + - component: {fileID: 1880938769} + - component: {fileID: 1880938768} + - component: {fileID: 1880938767} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1880938766 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1880938767 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1880938768 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1880938769 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1929077699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1929077700} + - component: {fileID: 1929077703} + - component: {fileID: 1929077702} + - component: {fileID: 1929077701} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1929077700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1929077701 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1929077702 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1929077703 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1938864789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1898983423426052, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1938864793} + - component: {fileID: 1938864792} + - component: {fileID: 1938864791} + - component: {fileID: 1938864790} + m_Layer: 0 + m_Name: sN + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1938864790 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23171092457376468, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1938864791 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65944324207520424, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1938864792 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33572314435256338, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1938864793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4479182187388718, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!1 &2041478813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041478814} + - component: {fileID: 2041478817} + - component: {fileID: 2041478816} + - component: {fileID: 2041478815} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2041478814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2041478815 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2041478816 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &2041478817 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &2140226864 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_Name + value: Area (7) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5c2bd19e4bbda4991b74387ca5d28156, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..799db073c7bf968b10c77c96a2ae7e86bd513b06 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6fdbb551d80c435abe6fc911b1ea11f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorldColab.unity b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorldColab.unity new file mode 100644 index 0000000000000000000000000000000000000000..7d71d8ed8efb92f21ecda244855c3e8de20b02e5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorldColab.unity @@ -0,0 +1,3298 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971228, g: 0.49977815, b: 0.57563734, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 7f0b1be1ff5294d44a42985b3d87b2df, + type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: 0cebef56442944347866a3aa76307a34, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &2047662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2047664} + - component: {fileID: 2047663} + m_Layer: 0 + m_Name: GridSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2047663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2047662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b93320f838a5465296582bcbf7e4bac, type: 3} + m_Name: + m_EditorClassIdentifier: + MainCamera: {fileID: 99095115} +--- !u!4 &2047664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2047662} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 9.52, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &77576403 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (7) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1 &99095112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 99095116} + - component: {fileID: 99095115} + - component: {fileID: 99095113} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &99095113 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99095112} + m_Enabled: 1 +--- !u!20 &99095115 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99095112} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 58 + orthographic: 1 + orthographic size: 5.46 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &99095116 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99095112} + m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} + m_LocalPosition: {x: -5, y: 8.2, z: -5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} +--- !u!1 &125487785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1488387672112076, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 125487786} + - component: {fileID: 125487789} + - component: {fileID: 125487788} + - component: {fileID: 125487790} + - component: {fileID: 125487787} + - component: {fileID: 125487791} + m_Layer: 8 + m_Name: RenderTextureAgent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &125487786 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4034807106460652, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 718770070} + - {fileID: 299607778} + - {fileID: 1559803815} + m_Father: {fileID: 1795599558} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &125487787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 114650561397225712, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 857707f3f352541d5b858efca4479b95, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 100 + hasUpgradedFromAgentParameters: 1 + MaxStep: 100 + area: {fileID: 1795599557} + timeBetweenDecisionsAtInference: 0.15 + renderCamera: {fileID: 797520692} + GreenBottom: {fileID: 299607777} + RedBottom: {fileID: 1559803814} + maskActions: 0 +--- !u!65 &125487788 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65073501172061214, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &125487789 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33823710649932060, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &125487790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 05000000 + VectorActionSize: 05000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: fa541e2e31feaa144a9ebcc21e151fb5, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: GridWorld + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &125487791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125487785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 132e1194facb64429b007ea1edf562d0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderTexture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2} + m_SensorName: RenderTextureSensor + m_Grayscale: 0 + m_ObservationStacks: 1 + m_Compression: 1 +--- !u!1001 &142724422 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1 &299607777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 299607778} + m_Layer: 8 + m_Name: Bottom-Green + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &299607778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 299607777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 686883666} + - {fileID: 1468557422} + - {fileID: 1382787854} + - {fileID: 527080937} + m_Father: {fileID: 125487786} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &331700282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 331700283} + - component: {fileID: 331700286} + - component: {fileID: 331700285} + - component: {fileID: 331700284} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &331700283 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &331700284 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &331700285 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &331700286 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 331700282} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &363761396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 363761400} + - component: {fileID: 363761399} + - component: {fileID: 363761398} + - component: {fileID: 363761397} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &363761397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &363761398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &363761399 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &363761400 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 363761396} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1553342943} + - {fileID: 918893359} + - {fileID: 1305247360} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &486401523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1324124466577712, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 486401524} + m_Layer: 0 + m_Name: scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &486401524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4036590373541758, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486401523} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1208586861} + - {fileID: 1045409644} + - {fileID: 959566332} + - {fileID: 1938864793} + - {fileID: 1726089814} + m_Father: {fileID: 1795599558} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &527080936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 527080937} + - component: {fileID: 527080940} + - component: {fileID: 527080939} + - component: {fileID: 527080938} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &527080937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &527080938 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &527080939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &527080940 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527080936} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &638135089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 638135090} + - component: {fileID: 638135093} + - component: {fileID: 638135092} + - component: {fileID: 638135091} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &638135090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &638135091 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &638135092 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &638135093 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638135089} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &686883665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 686883666} + - component: {fileID: 686883669} + - component: {fileID: 686883668} + - component: {fileID: 686883667} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &686883666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &686883667 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &686883668 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &686883669 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686883665} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &703155814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 703155815} + - component: {fileID: 703155818} + - component: {fileID: 703155817} + - component: {fileID: 703155816} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &703155815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &703155816 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &703155817 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &703155818 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 703155814} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &715789529 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &718770069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 718770070} + m_Layer: 8 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &718770070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718770069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0} + m_LocalScale: {x: 1, y: 0.29999998, z: 1} + m_Children: + - {fileID: 638135090} + - {fileID: 1747589537} + - {fileID: 331700283} + - {fileID: 2041478814} + m_Father: {fileID: 125487786} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &742849316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742849319} + - component: {fileID: 742849318} + - component: {fileID: 742849317} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &742849317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742849316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &742849318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742849316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &742849319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742849316} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &797520691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1394424645070404, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 797520693} + - component: {fileID: 797520692} + m_Layer: 0 + m_Name: agentCam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &797520692 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 20743940359151984, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797520691} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &797520693 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4890346887087870, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797520691} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1795599558} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &862412531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 862412532} + - component: {fileID: 862412535} + - component: {fileID: 862412534} + - component: {fileID: 862412533} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &862412532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &862412533 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &862412534 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &862412535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862412531} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &918893358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 918893359} + - component: {fileID: 918893361} + - component: {fileID: 918893360} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &918893359 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918893358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 363761400} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 150, y: -230} + m_SizeDelta: {x: 160, y: 55.599976} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &918893360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918893358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 7 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Agent View + + (RenderTexture)' +--- !u!222 &918893361 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918893358} + m_CullTransparentMesh: 0 +--- !u!1001 &949576938 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1 &959566328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1656910849934022, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 959566332} + - component: {fileID: 959566331} + - component: {fileID: 959566330} + - component: {fileID: 959566329} + m_Layer: 0 + m_Name: sW + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &959566329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23289473826438240, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &959566330 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65461269218509740, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &959566331 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33099526047820694, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &959566332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4399229758781002, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959566328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &995288635 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (3) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1 &1045409640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1817050562469182, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1045409644} + - component: {fileID: 1045409643} + - component: {fileID: 1045409642} + - component: {fileID: 1045409641} + m_Layer: 0 + m_Name: sE + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1045409641 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23048682015641784, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1045409642 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65782631683949718, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1045409643 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33550006272110778, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1045409644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4088684435237278, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045409640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1107096728 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (4) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1001 &1109387392 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (5) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1 &1208586857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1881546218232006, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1208586861} + - component: {fileID: 1208586860} + - component: {fileID: 1208586859} + - component: {fileID: 1208586858} + m_Layer: 8 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1208586858 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23096611355272904, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!64 &1208586859 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 64291102267821286, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1208586860 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33934167732208046, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1208586861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4558725385767926, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208586857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.5, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1305247359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1305247360} + - component: {fileID: 1305247362} + - component: {fileID: 1305247361} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1305247360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305247359} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 363761400} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 150, y: -128} + m_SizeDelta: {x: 200, y: 152} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1305247361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305247359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1305247362 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305247359} + m_CullTransparentMesh: 0 +--- !u!1 &1382787853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1382787854} + - component: {fileID: 1382787857} + - component: {fileID: 1382787856} + - component: {fileID: 1382787855} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1382787854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1382787855 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1382787856 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1382787857 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1382787853} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &1439638635 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (2) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1 &1468557421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1468557422} + - component: {fileID: 1468557425} + - component: {fileID: 1468557424} + - component: {fileID: 1468557423} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1468557422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 299607778} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1468557423 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1468557424 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1468557425 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468557421} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1553342942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1553342943} + - component: {fileID: 1553342945} + - component: {fileID: 1553342944} + m_Layer: 5 + m_Name: DebugTxt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1553342943 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553342942} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 363761400} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 179.2, y: -78.9} + m_SizeDelta: {x: 300, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1553342944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553342942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1553342945 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553342942} + m_CullTransparentMesh: 0 +--- !u!1 &1559803814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1559803815} + m_Layer: 8 + m_Name: Bottom-Red + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1559803815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559803814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.099, z: 0} + m_LocalScale: {x: 1, y: 0.7, z: 1} + m_Children: + - {fileID: 1880938766} + - {fileID: 1929077700} + - {fileID: 862412532} + - {fileID: 703155815} + m_Father: {fileID: 125487786} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1564215297 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (1) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1001 &1673869178 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1625008366184734, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_Name + value: AreaColab (6) + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4124767863011510, guid: 9841d390cbbc64944afad281be2e9034, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9841d390cbbc64944afad281be2e9034, type: 3} +--- !u!1 &1726089810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1220141488340396, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1726089814} + - component: {fileID: 1726089813} + - component: {fileID: 1726089812} + - component: {fileID: 1726089811} + m_Layer: 0 + m_Name: sS + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1726089811 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23631786362770220, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1726089812 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65623874337418966, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1726089813 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33222498917940530, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1726089814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4007504045862718, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726089810} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!1 &1747589536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1747589537} + - component: {fileID: 1747589540} + - component: {fileID: 1747589539} + - component: {fileID: 1747589538} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1747589537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1747589538 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1747589539 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1747589540 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747589536} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1795599556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1625008366184734, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1795599558} + - component: {fileID: 1795599557} + m_Layer: 0 + m_Name: AreaRenderTexture + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1795599557 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 114704252266302846, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795599556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 676658555cb2d4884aa8285062aab2a1, type: 3} + m_Name: + m_EditorClassIdentifier: + actorObjs: [] + players: + trueAgent: {fileID: 125487785} + GreenPlusPrefab: {fileID: 1508142483324970, guid: 1ec4e4e96e7514d45b7ebc3ba5a9a481, + type: 3} + RedExPrefab: {fileID: 1811317785436014, guid: d13ee2db77b3a4dcc8664d2fe2a0f219, + type: 3} + numberOfPlus: 1 + numberOfEx: 1 +--- !u!4 &1795599558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4124767863011510, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795599556} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 486401524} + - {fileID: 125487786} + - {fileID: 797520693} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1880938765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1880938766} + - component: {fileID: 1880938769} + - component: {fileID: 1880938768} + - component: {fileID: 1880938767} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1880938766 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1880938767 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1880938768 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1880938769 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880938765} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1929077699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1929077700} + - component: {fileID: 1929077703} + - component: {fileID: 1929077702} + - component: {fileID: 1929077701} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1929077700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1559803815} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1929077701 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1929077702 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1929077703 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929077699} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1938864789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1898983423426052, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1938864793} + - component: {fileID: 1938864792} + - component: {fileID: 1938864791} + - component: {fileID: 1938864790} + m_Layer: 0 + m_Name: sN + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1938864790 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 23171092457376468, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1938864791 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 65944324207520424, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1938864792 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 33572314435256338, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1938864793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 4479182187388718, guid: 5c2bd19e4bbda4991b74387ca5d28156, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938864789} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 0.5, z: 2} + m_Children: [] + m_Father: {fileID: 486401524} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!1 &2041478813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041478814} + - component: {fileID: 2041478817} + - component: {fileID: 2041478816} + - component: {fileID: 2041478815} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2041478814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4} + m_LocalScale: {x: 1, y: 1, z: 0.2} + m_Children: [] + m_Father: {fileID: 718770070} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2041478815 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2041478816 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &2041478817 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041478813} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorldColab.unity.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorldColab.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..a7ae7b9e1bb39a2a1631a6d1b98f791428ed452d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorldColab.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 52abcf384224f764ba3f6d76f9a89dba +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac01ed2af06d3fdcf43d65a01155fb3d1a5ec27c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 14b9bd700bd0942c3884597c37ac3cf3 +folderAsset: yes +timeCreated: 1502996134 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..98325a8f5296b336964dc68ab36e8eeca55e028c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs @@ -0,0 +1,246 @@ +using System; +using UnityEngine; +using System.Linq; +using Unity.MLAgents; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Actuators; +using UnityEngine.Rendering; +using UnityEngine.Serialization; + +public class GridAgent : Agent +{ + [FormerlySerializedAs("m_Area")] + [Header("Specific to GridWorld")] + public GridArea area; + public float timeBetweenDecisionsAtInference; + float m_TimeSinceDecision; + + [Tooltip("Because we want an observation right before making a decision, we can force " + + "a camera to render before making a decision. Place the agentCam here if using " + + "RenderTexture as observations.")] + public Camera renderCamera; + + VectorSensorComponent m_GoalSensor; + + public enum GridGoal + { + GreenPlus, + RedEx, + } + + // Visual representations of the agent. Both are blue on top, but different colors on the bottom - this + // allows the user to see which corresponds to the current goal, but it's not visible to the camera. + // Only one is active at a time. + public GameObject GreenBottom; + public GameObject RedBottom; + + GridGoal m_CurrentGoal; + + public GridGoal CurrentGoal + { + get { return m_CurrentGoal; } + set + { + switch (value) + { + case GridGoal.GreenPlus: + GreenBottom.SetActive(true); + RedBottom.SetActive(false); + break; + case GridGoal.RedEx: + GreenBottom.SetActive(false); + RedBottom.SetActive(true); + break; + } + m_CurrentGoal = value; + } + } + + [Tooltip("Selecting will turn on action masking. Note that a model trained with action " + + "masking turned on may not behave optimally when action masking is turned off.")] + public bool maskActions = true; + + const int k_NoAction = 0; // do nothing! + const int k_Up = 1; + const int k_Down = 2; + const int k_Left = 3; + const int k_Right = 4; + + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + m_GoalSensor = this.GetComponent(); + m_ResetParams = Academy.Instance.EnvironmentParameters; + } + + public override void CollectObservations(VectorSensor sensor) + { + Array values = Enum.GetValues(typeof(GridGoal)); + + if (m_GoalSensor is object) + { + int goalNum = (int)CurrentGoal; + m_GoalSensor.GetSensor().AddOneHotObservation(goalNum, values.Length); + } + } + + public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + // Mask the necessary actions if selected by the user. + if (maskActions) + { + // Prevents the agent from picking an action that would make it collide with a wall + var positionX = (int)transform.localPosition.x; + var positionZ = (int)transform.localPosition.z; + var maxPosition = (int)m_ResetParams.GetWithDefault("gridSize", 5f) - 1; + + if (positionX == 0) + { + actionMask.SetActionEnabled(0, k_Left, false); + } + + if (positionX == maxPosition) + { + actionMask.SetActionEnabled(0, k_Right, false); + } + + if (positionZ == 0) + { + actionMask.SetActionEnabled(0, k_Down, false); + } + + if (positionZ == maxPosition) + { + actionMask.SetActionEnabled(0, k_Up, false); + } + } + } + + // to be implemented by the developer + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + AddReward(-0.01f); + var action = actionBuffers.DiscreteActions[0]; + + var targetPos = transform.position; + switch (action) + { + case k_NoAction: + // do nothing + break; + case k_Right: + targetPos = transform.position + new Vector3(1f, 0, 0f); + break; + case k_Left: + targetPos = transform.position + new Vector3(-1f, 0, 0f); + break; + case k_Up: + targetPos = transform.position + new Vector3(0f, 0, 1f); + break; + case k_Down: + targetPos = transform.position + new Vector3(0f, 0, -1f); + break; + default: + throw new ArgumentException("Invalid action value"); + } + + var hit = Physics.OverlapBox( + targetPos, new Vector3(0.3f, 0.3f, 0.3f)); + if (hit.Where(col => col.gameObject.CompareTag("wall")).ToArray().Length == 0) + { + transform.position = targetPos; + + if (hit.Where(col => col.gameObject.CompareTag("plus")).ToArray().Length == 1) + { + ProvideReward(GridGoal.GreenPlus); + EndEpisode(); + } + else if (hit.Where(col => col.gameObject.CompareTag("ex")).ToArray().Length == 1) + { + ProvideReward(GridGoal.RedEx); + EndEpisode(); + } + } + } + + private void ProvideReward(GridGoal hitObject) + { + if (CurrentGoal == hitObject) + { + SetReward(1f); + } + else + { + SetReward(-1f); + } + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + discreteActionsOut[0] = k_NoAction; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[0] = k_Right; + } + if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = k_Up; + } + if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[0] = k_Left; + } + if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = k_Down; + } + } + + // to be implemented by the developer + public override void OnEpisodeBegin() + { + area.AreaReset(); + Array values = Enum.GetValues(typeof(GridGoal)); + if (m_GoalSensor is object) + { + CurrentGoal = (GridGoal)values.GetValue(UnityEngine.Random.Range(0, values.Length)); + } + else + { + CurrentGoal = GridGoal.GreenPlus; + } + } + + public void FixedUpdate() + { + WaitTimeInference(); + } + + void WaitTimeInference() + { + if (renderCamera != null && SystemInfo.graphicsDeviceType != GraphicsDeviceType.Null) + { + renderCamera.Render(); + } + + if (Academy.Instance.IsCommunicatorOn) + { + RequestDecision(); + } + else + { + if (m_TimeSinceDecision >= timeBetweenDecisionsAtInference) + { + m_TimeSinceDecision = 0f; + RequestDecision(); + } + else + { + m_TimeSinceDecision += Time.fixedDeltaTime; + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f2158d9fb6159814c8473a143a265b9fe01d297f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 857707f3f352541d5b858efca4479b95 +timeCreated: 1501806151 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs new file mode 100644 index 0000000000000000000000000000000000000000..7d3c85ae74e78e3bef4310a51d39688666d07106 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs @@ -0,0 +1,118 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using Unity.MLAgents; +using UnityEngine.Serialization; + + +public class GridArea : MonoBehaviour +{ + [HideInInspector] + public List actorObjs; + [HideInInspector] + public int[] players; + + public GameObject trueAgent; + + Camera m_AgentCam; + + [FormerlySerializedAs("PlusPref")] public GameObject GreenPlusPrefab; + [FormerlySerializedAs("ExPref")] public GameObject RedExPrefab; + GameObject[] m_Objects; + public int numberOfPlus = 1; + public int numberOfEx = 1; + + GameObject m_Plane; + GameObject m_Sn; + GameObject m_Ss; + GameObject m_Se; + GameObject m_Sw; + + Vector3 m_InitialPosition; + + EnvironmentParameters m_ResetParams; + + public void Start() + { + m_ResetParams = Academy.Instance.EnvironmentParameters; + + m_Objects = new[] { GreenPlusPrefab, RedExPrefab }; + + m_AgentCam = transform.Find("agentCam").GetComponent(); + + actorObjs = new List(); + + var sceneTransform = transform.Find("scene"); + + m_Plane = sceneTransform.Find("Plane").gameObject; + m_Sn = sceneTransform.Find("sN").gameObject; + m_Ss = sceneTransform.Find("sS").gameObject; + m_Sw = sceneTransform.Find("sW").gameObject; + m_Se = sceneTransform.Find("sE").gameObject; + m_InitialPosition = transform.position; + } + + void SetEnvironment() + { + transform.position = m_InitialPosition * (m_ResetParams.GetWithDefault("gridSize", 5f) + 1); + var playersList = new List(); + + for (var i = 0; i < (int)m_ResetParams.GetWithDefault("numPlusGoals", numberOfPlus); i++) + { + playersList.Add(0); + } + + for (var i = 0; i < (int)m_ResetParams.GetWithDefault("numExGoals", numberOfEx); i++) + { + playersList.Add(1); + } + players = playersList.ToArray(); + + var gridSize = (int)m_ResetParams.GetWithDefault("gridSize", 5f); + m_Plane.transform.localScale = new Vector3(gridSize / 10.0f, 1f, gridSize / 10.0f); + m_Plane.transform.localPosition = new Vector3((gridSize - 1) / 2f, -0.5f, (gridSize - 1) / 2f); + m_Sn.transform.localScale = new Vector3(1, 1, gridSize + 2); + m_Ss.transform.localScale = new Vector3(1, 1, gridSize + 2); + m_Sn.transform.localPosition = new Vector3((gridSize - 1) / 2f, 0.0f, gridSize); + m_Ss.transform.localPosition = new Vector3((gridSize - 1) / 2f, 0.0f, -1); + m_Se.transform.localScale = new Vector3(1, 1, gridSize + 2); + m_Sw.transform.localScale = new Vector3(1, 1, gridSize + 2); + m_Se.transform.localPosition = new Vector3(gridSize, 0.0f, (gridSize - 1) / 2f); + m_Sw.transform.localPosition = new Vector3(-1, 0.0f, (gridSize - 1) / 2f); + + m_AgentCam.orthographicSize = (gridSize) / 2f; + m_AgentCam.transform.localPosition = new Vector3((gridSize - 1) / 2f, gridSize + 1f, (gridSize - 1) / 2f); + } + + public void AreaReset() + { + var gridSize = (int)m_ResetParams.GetWithDefault("gridSize", 5f); + foreach (var actor in actorObjs) + { + DestroyImmediate(actor); + } + SetEnvironment(); + + actorObjs.Clear(); + + var numbers = new HashSet(); + while (numbers.Count < players.Length + 1) + { + numbers.Add(Random.Range(0, gridSize * gridSize)); + } + var numbersA = numbers.ToArray(); + + for (var i = 0; i < players.Length; i++) + { + var x = (numbersA[i]) / gridSize; + var y = (numbersA[i]) % gridSize; + var actorObj = Instantiate(m_Objects[players[i]], transform); + actorObj.transform.localPosition = new Vector3(x, -0.25f, y); + actorObjs.Add(actorObj); + } + + var xA = (numbersA[players.Length]) / gridSize; + var yA = (numbersA[players.Length]) % gridSize; + trueAgent.transform.localPosition = new Vector3(xA, -0.25f, yA); + } +} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cfac9e9f5bac2b957ebfcef5d926295fd763aea3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 676658555cb2d4884aa8285062aab2a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridSettings.cs b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..66ec1af2b052daf69d99548e0e71b940c9802a6f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridSettings.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using Unity.MLAgents; + +public class GridSettings : MonoBehaviour +{ + public Camera MainCamera; + + public void Awake() + { + Academy.Instance.EnvironmentParameters.RegisterCallback("gridSize", f => + { + MainCamera.transform.position = new Vector3(-(f - 1) / 2f, f * 1.25f, -(f - 1) / 2f); + MainCamera.orthographicSize = (f + 5f) / 2f; + }); + + } +} diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridSettings.cs.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4e150e3e95265b4024ca49410bdc9c8df87d480b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b93320f838a5465296582bcbf7e4bac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/TFModels.meta b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..d8e3c04452776e2dc984b356ee877d3f3e73a246 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9c5639f5544e49d785119b8a28305bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx new file mode 100644 index 0000000000000000000000000000000000000000..97ac49fc57d2066e7382d380fa7024cdafd77d37 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5701126cd86ed11e4c626f13a62667540ba3386c59b09022cae6786e4297d34c +size 4906293 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx.meta b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..665154fc5736c80139bcb759ed0b5319f091325d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorld.onnx.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 255872f7c70ca4901b80bd5aed4a630f +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx new file mode 100644 index 0000000000000000000000000000000000000000..1400a10dbb71baed34a9ac6fe86c3a7ab97f53f2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9bf30b7c4d8e4eb9c644e375433519206d5a332211426e115dc95721e440454 +size 920626 diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx.meta b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..eadbada55ba098cfff6ec38f2e295fe0c29595f9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/GridWorld/TFModels/GridWorldColab.onnx.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: fa541e2e31feaa144a9ebcc21e151fb5 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 + weightsTypeMode: 0 + activationTypeMode: 0 diff --git a/Project/Assets/ML-Agents/Examples/Hallway.meta b/Project/Assets/ML-Agents/Examples/Hallway.meta new file mode 100644 index 0000000000000000000000000000000000000000..0350f03e130c83fb04b8555d2b37524a75dfb74a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 595153db86e9a4835bdcd85155b706ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Demos.meta b/Project/Assets/ML-Agents/Examples/Hallway/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..ba2c29e90f7985c5ccbc5fe6b191ea528d254e10 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3b3523d54e3214c6a90424bf3ee8c934 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo b/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo new file mode 100644 index 0000000000000000000000000000000000000000..f41c16300316510d9cece27111c8dab5934246b2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14a1b1b896de8f32a25507a7e349154df1cf3947b1044dab4284a82300af5237 +size 2118641 diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta b/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..ae7115570f74dad5d14e03b4a49172f11e950ee2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 41c6af18564fe425fa1c047d603ee34e +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400000 + second: Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Meshes.meta b/Project/Assets/ML-Agents/Examples/Hallway/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..e10c67897b8a8a21a6538de1429e6579ef94e221 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04fd1173250558c459222f76803ed61a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Meshes/Ground.fbx b/Project/Assets/ML-Agents/Examples/Hallway/Meshes/Ground.fbx new file mode 100644 index 0000000000000000000000000000000000000000..cef3707fd350b7c698bd62637c6b3a3b4f2b474f Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Hallway/Meshes/Ground.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Meshes/Ground.fbx.meta b/Project/Assets/ML-Agents/Examples/Hallway/Meshes/Ground.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..7c975b5da0611ee874501373b3468a33ae5e89bb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Meshes/Ground.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: e36ed69b3747404418ab8087954fe038 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: rep_Floor + 2100002: rep_WhiteWalls + 2300000: //RootNode + 3300000: //RootNode + 4300000: Ground + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Floor + second: {fileID: 2100000, guid: e4aa5f7e085732044a5a275e15c10aa7, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_WhiteWalls + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Hallway/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..47002524a845795e13c6675d6b5b78b033ec18be --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b84a628ee2ba849289722480171596cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab b/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab new file mode 100644 index 0000000000000000000000000000000000000000..0ab65835429c32336d64f330e0c64a3dc2c78e31 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab @@ -0,0 +1,2145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6271460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6271464} + - component: {fileID: 6271463} + - component: {fileID: 6271462} + - component: {fileID: 6271461} + m_Layer: 0 + m_Name: Wall (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6271464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6271460} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9.75, y: 1.5, z: 0} + m_LocalScale: {x: 0.5, y: 4, z: 50} + m_Children: [] + m_Father: {fileID: 139180208} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6271463 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6271460} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6271462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6271460} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6271461 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6271460} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &139180207 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 139180208} + m_Layer: 0 + m_Name: Walls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &139180208 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139180207} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1877223448} + - {fileID: 6271464} + - {fileID: 1901930596} + - {fileID: 1101848052} + m_Father: {fileID: 4726744827719472} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1101848051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101848052} + - component: {fileID: 1101848055} + - component: {fileID: 1101848054} + - component: {fileID: 1101848053} + m_Layer: 0 + m_Name: Wall (3) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1101848052 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101848051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: 25} + m_LocalScale: {x: 20, y: 4, z: 0.5} + m_Children: [] + m_Father: {fileID: 139180208} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1101848055 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101848051} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1101848054 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101848051} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1101848053 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101848051} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1877223444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1877223448} + - component: {fileID: 1877223447} + - component: {fileID: 1877223446} + - component: {fileID: 1877223445} + m_Layer: 0 + m_Name: Wall + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1877223448 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877223444} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -9.75, y: 1.5, z: 0} + m_LocalScale: {x: 0.5, y: 4, z: 50} + m_Children: [] + m_Father: {fileID: 139180208} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1877223447 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877223444} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1877223446 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877223444} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1877223445 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877223444} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1901930592 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1901930596} + - component: {fileID: 1901930595} + - component: {fileID: 1901930594} + - component: {fileID: 1901930593} + m_Layer: 0 + m_Name: Wall (2) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1901930596 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901930592} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: -25} + m_LocalScale: {x: 20, y: 4, z: 0.5} + m_Children: [] + m_Father: {fileID: 139180208} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1901930595 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901930592} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1901930594 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901930592} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1901930593 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901930592} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1046873139535794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4624138086369782} + - component: {fileID: 33296066566275014} + - component: {fileID: 23958774933187984} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4624138086369782 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046873139535794} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4752404825858662} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33296066566275014 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046873139535794} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23958774933187984 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046873139535794} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1127137884775088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4614734657178490} + - component: {fileID: 33132286090031990} + - component: {fileID: 23211683354804230} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4614734657178490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127137884775088} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4752404825858662} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33132286090031990 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127137884775088} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23211683354804230 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127137884775088} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1131139661521138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4924280052202202} + - component: {fileID: 33514313420993802} + - component: {fileID: 23487883212695664} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4924280052202202 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131139661521138} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.33826} + m_LocalScale: {x: 0.37466624, y: 0.38109082, z: 1.3355573} + m_Children: [] + m_Father: {fileID: 4636946730449310} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33514313420993802 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131139661521138} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &23487883212695664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131139661521138} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1170370608586186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4636946730449310} + - component: {fileID: 33318285890349564} + - component: {fileID: 65285132357055614} + - component: {fileID: 23145288717831496} + m_Layer: 0 + m_Name: Symbol_O + m_TagString: symbol_O_Goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4636946730449310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1170370608586186} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 20, z: 0.625} + m_LocalScale: {x: 1.0202925, y: 40.1236, z: 0.286225} + m_Children: + - {fileID: 4924280052202202} + m_Father: {fileID: 4456279512133078} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33318285890349564 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1170370608586186} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65285132357055614 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1170370608586186} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23145288717831496 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1170370608586186} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1192118865501422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4679534801456310} + - component: {fileID: 33577636678661726} + - component: {fileID: 23888866990441826} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4679534801456310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192118865501422} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4752404825858662} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33577636678661726 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192118865501422} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23888866990441826 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192118865501422} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1198944108745736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4554881122711646} + - component: {fileID: 33654293673192236} + - component: {fileID: 23830736647393224} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4554881122711646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1198944108745736} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.33826} + m_LocalScale: {x: 0.37466624, y: 0.38109082, z: 1.3355573} + m_Children: [] + m_Father: {fileID: 4158078695867932} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33654293673192236 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1198944108745736} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &23830736647393224 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1198944108745736} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1277035284367498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4325680992394310} + - component: {fileID: 33329172729287166} + - component: {fileID: 23328262587496768} + m_Layer: 0 + m_Name: symbol_x + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4325680992394310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277035284367498} + m_LocalRotation: {x: -0, y: -0, z: 0.38268343, w: 0.92387956} + m_LocalPosition: {x: 0, y: 0, z: -0.337} + m_LocalScale: {x: 0.39643255, y: 0.39643255, z: 1.4011297} + m_Children: [] + m_Father: {fileID: 4919701787480650} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} +--- !u!33 &33329172729287166 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277035284367498} + m_Mesh: {fileID: 4300000, guid: df826ba32791e458caefe83b4498ce35, type: 3} +--- !u!23 &23328262587496768 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277035284367498} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1281070826951696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4953349987734454} + - component: {fileID: 33746496548982312} + - component: {fileID: 23315394391026828} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4953349987734454 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281070826951696} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4752404825858662} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33746496548982312 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281070826951696} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23315394391026828 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281070826951696} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1290334646012668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4485815012731950} + - component: {fileID: 20752592473212316} + m_Layer: 0 + m_Name: PlayerCam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4485815012731950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1290334646012668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 107, z: 4} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 4933884233896554} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20752592473212316 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1290334646012668} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5043253, g: 0.5998091, b: 0.64705884, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 60 + orthographic: 0 + orthographic size: 10 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1328953066357116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4550696105768750} + - component: {fileID: 33201491723250068} + - component: {fileID: 65896655841666290} + - component: {fileID: 23697396264494084} + m_Layer: 0 + m_Name: Symbol_X + m_TagString: symbol_X_Goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4550696105768750 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1328953066357116} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 20, z: 0.625} + m_LocalScale: {x: 1.0202925, y: 40.1236, z: 0.286225} + m_Children: + - {fileID: 4504713804428332} + m_Father: {fileID: 4888050483861444} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33201491723250068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1328953066357116} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65896655841666290 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1328953066357116} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23697396264494084 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1328953066357116} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1390180936769712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4888050483861444} + - component: {fileID: 33368765186644042} + - component: {fileID: 23052381252885230} + - component: {fileID: 65575186354124900} + m_Layer: 0 + m_Name: symbol_X_Goal + m_TagString: symbol_X_Goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4888050483861444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390180936769712} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7, y: 0.5, z: 22.29} + m_LocalScale: {x: 4, y: 0.1, z: 4} + m_Children: + - {fileID: 4550696105768750} + m_Father: {fileID: 4726744827719472} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33368765186644042 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390180936769712} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23052381252885230 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390180936769712} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65575186354124900 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390180936769712} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1410733827718496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4456279512133078} + - component: {fileID: 33644261660755068} + - component: {fileID: 23501055978969972} + - component: {fileID: 65686709839235600} + m_Layer: 0 + m_Name: symbol_O_Goal + m_TagString: symbol_O_Goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4456279512133078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410733827718496} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.588, z: 22.29} + m_LocalScale: {x: 4, y: 0.1, z: 4} + m_Children: + - {fileID: 4636946730449310} + m_Father: {fileID: 4726744827719472} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33644261660755068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410733827718496} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23501055978969972 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410733827718496} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65686709839235600 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410733827718496} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1453690758295050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4158078695867932} + - component: {fileID: 33239636981323174} + - component: {fileID: 65040888611456230} + - component: {fileID: 23936172711068940} + m_Layer: 0 + m_Name: Symbol_O + m_TagString: symbol_O + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4158078695867932 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453690758295050} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.45, z: 0} + m_LocalScale: {x: 4, y: 4, z: 1} + m_Children: + - {fileID: 4554881122711646} + m_Father: {fileID: 4726744827719472} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33239636981323174 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453690758295050} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65040888611456230 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453690758295050} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23936172711068940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453690758295050} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1471560210313468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4933884233896554} + - component: {fileID: 65639693558106190} + - component: {fileID: 54112968250075710} + - component: {fileID: 114907778469006590} + - component: {fileID: 114286701363010626} + - component: {fileID: 114388598785529460} + - component: {fileID: 1360037369662378601} + - component: {fileID: 3959905707628515947} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4933884233896554 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.54, z: -8.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4752404825858662} + - {fileID: 4485815012731950} + m_Father: {fileID: 4726744827719472} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65639693558106190 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54112968250075710 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + serializedVersion: 2 + m_Mass: 25 + m_Drag: 2 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 2 +--- !u!114 &114907778469006590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 3 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 05000000 + VectorActionSize: 05000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: 5e4f7c94351f346859ff7e00810f5d34, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Hallway + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114286701363010626 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b446afae240924105b36d07e8d17a608, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 3000 + ground: {fileID: 1510027348950282} + area: {fileID: 1745841960385024} + symbolOGoal: {fileID: 1410733827718496} + symbolXGoal: {fileID: 1390180936769712} + symbolO: {fileID: 1453690758295050} + symbolX: {fileID: 1915733999209864} + useVectorObs: 1 +--- !u!114 &114388598785529460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: + - symbol_O_Goal + - symbol_X_Goal + - symbol_O + - symbol_X + - wall + m_RaysPerDirection: 2 + m_MaxRayDegrees: 70 + m_SphereCastRadius: 0.5 + m_RayLength: 12 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!114 &1360037369662378601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 6 + TakeActionsBetweenDecisions: 1 +--- !u!114 &3959905707628515947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1471560210313468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1510027348950282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4864734910979464} + - component: {fileID: 33805377152746384} + - component: {fileID: 23867896883018740} + - component: {fileID: 65938164597791560} + m_Layer: 0 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &4864734910979464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510027348950282} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.015001526, y: 0.5, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4726744827719472} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33805377152746384 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510027348950282} + m_Mesh: {fileID: 4300000, guid: e36ed69b3747404418ab8087954fe038, type: 3} +--- !u!23 &23867896883018740 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510027348950282} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d3855c73a8adc453f89d8df66068f21f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65938164597791560 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510027348950282} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2000, y: 100, z: 5000} + m_Center: {x: -1.5001221, y: -50, z: 0} +--- !u!1 &1549559441350616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4761460213900810} + - component: {fileID: 20387232395542164} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4761460213900810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549559441350616} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4752404825858662} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20387232395542164 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549559441350616} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1578906679312610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4504713804428332} + - component: {fileID: 33834232959726380} + - component: {fileID: 23184046317628112} + m_Layer: 0 + m_Name: symbol_x + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4504713804428332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578906679312610} + m_LocalRotation: {x: -0, y: -0, z: 0.38268343, w: 0.92387956} + m_LocalPosition: {x: 0, y: 0, z: -0.337} + m_LocalScale: {x: 0.39643255, y: 0.39643255, z: 1.4011297} + m_Children: [] + m_Father: {fileID: 4550696105768750} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} +--- !u!33 &33834232959726380 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578906679312610} + m_Mesh: {fileID: 4300000, guid: df826ba32791e458caefe83b4498ce35, type: 3} +--- !u!23 &23184046317628112 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578906679312610} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1745841960385024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4726744827719472} + m_Layer: 0 + m_Name: HallwayArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4726744827719472 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745841960385024} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4864734910979464} + - {fileID: 4933884233896554} + - {fileID: 4456279512133078} + - {fileID: 4888050483861444} + - {fileID: 4919701787480650} + - {fileID: 4158078695867932} + - {fileID: 139180208} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1812630869059144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4752404825858662} + - component: {fileID: 33374723618995774} + - component: {fileID: 23888771621977816} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4752404825858662 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812630869059144} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4761460213900810} + - {fileID: 4614734657178490} + - {fileID: 4953349987734454} + - {fileID: 4624138086369782} + - {fileID: 4679534801456310} + m_Father: {fileID: 4933884233896554} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33374723618995774 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812630869059144} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23888771621977816 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812630869059144} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1915733999209864 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4919701787480650} + - component: {fileID: 33934835163861992} + - component: {fileID: 65970747268753110} + - component: {fileID: 23747272054406294} + m_Layer: 0 + m_Name: Symbol_X + m_TagString: symbol_X + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4919701787480650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915733999209864} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.45, z: 0} + m_LocalScale: {x: 4, y: 4, z: 1} + m_Children: + - {fileID: 4325680992394310} + m_Father: {fileID: 4726744827719472} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33934835163861992 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915733999209864} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65970747268753110 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915733999209864} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23747272054406294 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915733999209864} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab.meta b/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..ea07a06e1cf40a891e672eed5e82e2136766cd92 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3a451555dc514f46a69319857762eda +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scenes.meta b/Project/Assets/ML-Agents/Examples/Hallway/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb3b835c116178067dcf53d5c8a5068e1e4fdc5c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6898a815458594782920cc6ce36e5a99 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity b/Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity new file mode 100644 index 0000000000000000000000000000000000000000..6ae46f8a828fb33d4446d4b58cfd69be990df859 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity @@ -0,0 +1,1376 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &135386079 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (14) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -106 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 21 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &272051442 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (8) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &462363493 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (1) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &577214047 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (11) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &619587303 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (10) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &622035639 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &633276535 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (15) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -156 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 22 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &663705977 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (6) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -56 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &767772728 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 0} + propertyPath: m_Constraints + value: 126 + objectReference: {fileID: 0} + - target: {fileID: 1410733827718496, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: symbol1Goal + objectReference: {fileID: 0} + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: HallwayArea (1) + objectReference: {fileID: 0} + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 38.9 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &812231986 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (13) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -56 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 20 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &1000631080 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (4) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -206 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &1116736482 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (2) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1319872499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319872503} + - component: {fileID: 1319872502} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1319872502 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319872499} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 23.6 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1319872503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319872499} + m_LocalRotation: {x: 0.35355338, y: -0.35355338, z: 0.1464466, w: 0.8535535} + m_LocalPosition: {x: 17.35, y: 30, z: -20.3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 45, y: -45, z: 0} +--- !u!1001 &1351017094 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (7) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -106 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &1491785131 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (5) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -156 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &1494421365 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (9) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236051} + - component: {fileID: 1574236050} + m_Layer: 0 + m_Name: HallwaySettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 2 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!114 &1574236051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 919e0fed2d0f4447daf1db942cc6ffd9, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 1.5 + agentRotationSpeed: 1 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} +--- !u!1001 &1781369655 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.21906795 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7216353 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.2626537 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.60188437 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -100.34 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &1862562902 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (3) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &2090343071 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} +--- !u!1001 &2143733088 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1745841960385024, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_Name + value: SymbolFinderArea (12) + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.x + value: -206 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalPosition.z + value: 75.2 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4726744827719472, guid: f3a451555dc514f46a69319857762eda, type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f3a451555dc514f46a69319857762eda, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta b/Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..477494c7a8ca125a5e10b8220884c998a8256091 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6d6a33ed0e18459a8d61817d600978a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scripts.meta b/Project/Assets/ML-Agents/Examples/Hallway/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..7e7a6bad4fd95cd94db7e0a853d3eba4a40324df --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c85133268635d484daae3cbfb68cc34d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..86ed43c53321928155a1fcd51a193d2723592974 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs @@ -0,0 +1,165 @@ +using System.Collections; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class HallwayAgent : Agent +{ + public GameObject ground; + public GameObject area; + public GameObject symbolOGoal; + public GameObject symbolXGoal; + public GameObject symbolO; + public GameObject symbolX; + public bool useVectorObs; + Rigidbody m_AgentRb; + Material m_GroundMaterial; + Renderer m_GroundRenderer; + HallwaySettings m_HallwaySettings; + int m_Selection; + StatsRecorder m_statsRecorder; + + public override void Initialize() + { + m_HallwaySettings = FindObjectOfType(); + m_AgentRb = GetComponent(); + m_GroundRenderer = ground.GetComponent(); + m_GroundMaterial = m_GroundRenderer.material; + m_statsRecorder = Academy.Instance.StatsRecorder; + } + + public override void CollectObservations(VectorSensor sensor) + { + if (useVectorObs) + { + sensor.AddObservation(StepCount / (float)MaxStep); + } + } + + IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time) + { + m_GroundRenderer.material = mat; + yield return new WaitForSeconds(time); + m_GroundRenderer.material = m_GroundMaterial; + } + + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var action = act[0]; + switch (action) + { + case 1: + dirToGo = transform.forward * 1f; + break; + case 2: + dirToGo = transform.forward * -1f; + break; + case 3: + rotateDir = transform.up * 1f; + break; + case 4: + rotateDir = transform.up * -1f; + break; + } + transform.Rotate(rotateDir, Time.deltaTime * 150f); + m_AgentRb.AddForce(dirToGo * m_HallwaySettings.agentRunSpeed, ForceMode.VelocityChange); + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + AddReward(-1f / MaxStep); + MoveAgent(actionBuffers.DiscreteActions); + } + + void OnCollisionEnter(Collision col) + { + if (col.gameObject.CompareTag("symbol_O_Goal") || col.gameObject.CompareTag("symbol_X_Goal")) + { + if ((m_Selection == 0 && col.gameObject.CompareTag("symbol_O_Goal")) || + (m_Selection == 1 && col.gameObject.CompareTag("symbol_X_Goal"))) + { + SetReward(1f); + StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.goalScoredMaterial, 0.5f)); + m_statsRecorder.Add("Goal/Correct", 1, StatAggregationMethod.Sum); + } + else + { + SetReward(-0.1f); + StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.failMaterial, 0.5f)); + m_statsRecorder.Add("Goal/Wrong", 1, StatAggregationMethod.Sum); + } + EndEpisode(); + } + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[0] = 3; + } + else if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + else if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[0] = 4; + } + else if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + } + + public override void OnEpisodeBegin() + { + var agentOffset = -15f; + var blockOffset = 0f; + m_Selection = Random.Range(0, 2); + if (m_Selection == 0) + { + symbolO.transform.position = + new Vector3(0f + Random.Range(-3f, 3f), 2f, blockOffset + Random.Range(-5f, 5f)) + + ground.transform.position; + symbolX.transform.position = + new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f)) + + ground.transform.position; + } + else + { + symbolO.transform.position = + new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f)) + + ground.transform.position; + symbolX.transform.position = + new Vector3(0f, 2f, blockOffset + Random.Range(-5f, 5f)) + + ground.transform.position; + } + + transform.position = new Vector3(0f + Random.Range(-3f, 3f), + 1f, agentOffset + Random.Range(-5f, 5f)) + + ground.transform.position; + transform.rotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f); + m_AgentRb.velocity *= 0f; + + var goalPos = Random.Range(0, 2); + if (goalPos == 0) + { + symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position; + symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position; + } + else + { + symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position; + symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position; + } + m_statsRecorder.Add("Goal/Correct", 0, StatAggregationMethod.Sum); + m_statsRecorder.Add("Goal/Wrong", 0, StatAggregationMethod.Sum); + } +} diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs.meta b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb26659dde67c8942e4cd240a983ae29da8b930f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b446afae240924105b36d07e8d17a608 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwaySettings.cs b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwaySettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..4dfff28e3e555d7a657a46b0c6a34a5771b0a21b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwaySettings.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +public class HallwaySettings : MonoBehaviour +{ + public float agentRunSpeed; + public float agentRotationSpeed; + public Material goalScoredMaterial; // when a goal is scored the ground will use this material for a few seconds. + public Material failMaterial; // when fail, the ground will use this material for a few seconds. + +} diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwaySettings.cs.meta b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwaySettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a20ca080496761472f82d90a903931e769a0d722 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwaySettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 919e0fed2d0f4447daf1db942cc6ffd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/TFModels.meta b/Project/Assets/ML-Agents/Examples/Hallway/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..57d2e86ee1f78b4685feb5ce6bfc81a147d3cb29 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c630ad4900acd4468a81be1cd65bb706 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx b/Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx new file mode 100644 index 0000000000000000000000000000000000000000..b9058e6254c7ea408b34de2d6abfef1b1c85d9c9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eb05270abb0ca01dd074bb6035bdc65a98e27d20dd227a88d3f331bfc4abd80 +size 324696 diff --git a/Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx.meta b/Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..b9630279de7a1b7d2193530b6fad84c580ad2572 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Hallway/TFModels/Hallway.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 5e4f7c94351f346859ff7e00810f5d34 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/Match3.meta b/Project/Assets/ML-Agents/Examples/Match3.meta new file mode 100644 index 0000000000000000000000000000000000000000..7ab28f50f23163710fc0774398eba1cb734f818d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85094c6352d9e43c497a54fef35e4d76 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6c194ab421f3317919258c063e18ca4cca812ca2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8519802844d8d4233b4c6f6758ab8322 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX.meta new file mode 100644 index 0000000000000000000000000000000000000000..6756a743d5726717cb58d200e7a6784e0609db78 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8efb383f54b1f4f7b96462405d5ae237 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx new file mode 100644 index 0000000000000000000000000000000000000000..da0fb2a98a4382575893f6a5b6a53efce8b5c0fa Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..92c5b0f67a335b3f739bae82ba5c2bf3037fee40 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx.meta @@ -0,0 +1,97 @@ +fileFormatVersion: 2 +guid: 02d33201e78d54a67ac7b0734cd6d8aa +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: No Name + 2300000: //RootNode + 3300000: //RootNode + 4300000: Text.002 + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx new file mode 100644 index 0000000000000000000000000000000000000000..21daf38b579fce23ef2239f6665094dae9cab013 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..8b45a42f056d1f1833f0118e4f59f6130e4f5173 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx.meta @@ -0,0 +1,97 @@ +fileFormatVersion: 2 +guid: 6cb02a85514f94d7f8266348b5c021cd +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: No Name + 2300000: //RootNode + 3300000: //RootNode + 4300000: Text.001 + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6c73c669ac1bbc73abc148ad40b7ed6e872c05f7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab @@ -0,0 +1,185 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3508723250470608007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3508723250470608008} + - component: {fileID: 3508723250470608010} + - component: {fileID: 3508723250470608012} + - component: {fileID: 3508723250470608011} + - component: {fileID: 3508723250470608009} + - component: {fileID: 3508723250470608014} + - component: {fileID: 2112317463290853299} + m_Layer: 0 + m_Name: Match3 Agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3508723250470608008 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3508723250774301920} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3508723250470608010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: c34da50737a3c4a50918002b20b2b927, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Match3SmartHeuristic + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &3508723250470608012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d982f0cd92214bd2b689be838fa40c44, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + Board: {fileID: 0} + MoveTime: 0.25 + MaxMoves: 500 +--- !u!114 &3508723250470608011 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abebb7ad4a5547d7a3b04373784ff195, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugMoveIndex: -1 + CubeSpacing: 1.25 + TilePrefab: {fileID: 4007900521885639951, guid: faee4e805953b49e688bd00b45c55f2e, + type: 3} +--- !u!114 &3508723250470608009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6d852a063770348b68caa91b8e7642a5, type: 3} + m_Name: + m_EditorClassIdentifier: + MinRows: 6 + MaxRows: 9 + MinColumns: 6 + MaxColumns: 8 + NumCellTypes: 6 + NumSpecialTypes: 2 + BasicCellPoints: 1 + SpecialCell1Points: 2 + SpecialCell2Points: 3 + RandomSeed: -1 +--- !u!114 &3508723250470608014 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 530d2f105aa145bd8a00e021bdd925fd, type: 3} + m_Name: + m_EditorClassIdentifier: + SensorName: Match3 Sensor + ObservationType: 0 +--- !u!114 &2112317463290853299 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250470608007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b17adcc6c9b241da903aa134f2dac930, type: 3} + m_Name: + m_EditorClassIdentifier: + ActuatorName: Match3 Actuator + RandomSeed: -1 + ForceHeuristic: 1 +--- !u!1 &3508723250774301855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3508723250774301920} + m_Layer: 0 + m_Name: Match3Heuristic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3508723250774301920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3508723250774301855} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3508723250470608008} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..e88d26a43c5b460224d1daee5a55af93319fac96 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2fafdcd0587684641b03b11f04454f1b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab new file mode 100644 index 0000000000000000000000000000000000000000..a3ca27d00ca80aa10071fd25f1f71663feab8c12 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab @@ -0,0 +1,199 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2118285883905619929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2118285883905619878} + m_Layer: 0 + m_Name: Match3VectorObs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2118285883905619878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285883905619929} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2118285884327540686} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2118285884327540673 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2118285884327540686} + - component: {fileID: 2118285884327540684} + - component: {fileID: 2118285884327540682} + - component: {fileID: 2118285884327540685} + - component: {fileID: 2118285884327540687} + - component: {fileID: 2118285884327540680} + - component: {fileID: 3357012711826686276} + - component: {fileID: 2164669533582273470} + m_Layer: 0 + m_Name: Match3 Agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2118285884327540686 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2118285883905619878} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2118285884327540684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 9e89b8e81974148d3b7213530d00589d, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Match3VectorObs + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &2118285884327540682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d982f0cd92214bd2b689be838fa40c44, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + Board: {fileID: 0} + MoveTime: 0.25 + MaxMoves: 500 +--- !u!114 &2118285884327540685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abebb7ad4a5547d7a3b04373784ff195, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugMoveIndex: -1 + CubeSpacing: 1.25 + TilePrefab: {fileID: 4007900521885639951, guid: faee4e805953b49e688bd00b45c55f2e, + type: 3} +--- !u!114 &2118285884327540687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6d852a063770348b68caa91b8e7642a5, type: 3} + m_Name: + m_EditorClassIdentifier: + MinRows: 6 + MaxRows: 9 + MinColumns: 6 + MaxColumns: 8 + NumCellTypes: 6 + NumSpecialTypes: 2 + BasicCellPoints: 1 + SpecialCell1Points: 2 + SpecialCell2Points: 3 + RandomSeed: -1 +--- !u!114 &2118285884327540680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 530d2f105aa145bd8a00e021bdd925fd, type: 3} + m_Name: + m_EditorClassIdentifier: + SensorName: Match3 Sensor + ObservationType: 0 +--- !u!114 &3357012711826686276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b17adcc6c9b241da903aa134f2dac930, type: 3} + m_Name: + m_EditorClassIdentifier: + ActuatorName: Match3 Actuator + RandomSeed: -1 + ForceHeuristic: 0 +--- !u!114 &2164669533582273470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118285884327540673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..5bcde8be0bd86b28e6d22e5e9c89866e607fa891 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6944ca02359f5427aa13c8551236a824 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab new file mode 100644 index 0000000000000000000000000000000000000000..7a7cd8ca9708f3a3d2091027f62a8a8acf6cead8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab @@ -0,0 +1,199 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3019509691567202678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3019509691567202569} + m_Layer: 0 + m_Name: Match3VisualObs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3019509691567202569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509691567202678} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3019509692332007777} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3019509692332007790 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3019509692332007777} + - component: {fileID: 3019509692332007779} + - component: {fileID: 3019509692332007781} + - component: {fileID: 3019509692332007778} + - component: {fileID: 3019509692332007776} + - component: {fileID: 3019509692332007783} + - component: {fileID: 8270768986451624427} + - component: {fileID: 5564406567458194538} + m_Layer: 0 + m_Name: Match3 Agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3019509692332007777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3019509691567202569} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3019509692332007779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 28ccdfd7cb3d941ce8af0ab89e06130a, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Match3VisualObs + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &3019509692332007781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d982f0cd92214bd2b689be838fa40c44, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + Board: {fileID: 0} + MoveTime: 0.25 + MaxMoves: 500 +--- !u!114 &3019509692332007778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abebb7ad4a5547d7a3b04373784ff195, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugMoveIndex: -1 + CubeSpacing: 1.25 + TilePrefab: {fileID: 4007900521885639951, guid: faee4e805953b49e688bd00b45c55f2e, + type: 3} +--- !u!114 &3019509692332007776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6d852a063770348b68caa91b8e7642a5, type: 3} + m_Name: + m_EditorClassIdentifier: + MinRows: 6 + MaxRows: 9 + MinColumns: 6 + MaxColumns: 8 + NumCellTypes: 6 + NumSpecialTypes: 2 + BasicCellPoints: 1 + SpecialCell1Points: 2 + SpecialCell2Points: 3 + RandomSeed: -1 +--- !u!114 &3019509692332007783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 530d2f105aa145bd8a00e021bdd925fd, type: 3} + m_Name: + m_EditorClassIdentifier: + SensorName: Match3 Sensor + ObservationType: 2 +--- !u!114 &8270768986451624427 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b17adcc6c9b241da903aa134f2dac930, type: 3} + m_Name: + m_EditorClassIdentifier: + ActuatorName: Match3 Actuator + RandomSeed: -1 + ForceHeuristic: 0 +--- !u!114 &5564406567458194538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3019509692332007790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..87203ce0982a420092af474a40251d653bc487ec --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aaa471bd5e2014848a66917476671aed +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles.meta new file mode 100644 index 0000000000000000000000000000000000000000..3b00a3ada238a2b7ff8c69ed51ef64cec2daed9c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60b08aed5b3594e3692ec97dd72c0fdb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab new file mode 100644 index 0000000000000000000000000000000000000000..5a6431d583598514c3b4e2fae1cee6d5ddccbb20 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab @@ -0,0 +1,1774 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &392295020297985884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392295020297985883} + - component: {fileID: 392295020297985881} + - component: {fileID: 392295020297985882} + m_Layer: 0 + m_Name: pupil + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &392295020297985883 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020297985884} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.46, y: 0, z: 0} + m_LocalScale: {x: 0.116126545, y: 0.35806346, z: 0.35806346} + m_Children: [] + m_Father: {fileID: 392295021109847074} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &392295020297985881 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020297985884} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &392295020297985882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020297985884} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &392295020339198850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392295020339198849} + - component: {fileID: 392295020339198863} + - component: {fileID: 392295020339198848} + m_Layer: 0 + m_Name: pupil + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &392295020339198849 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020339198850} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.46, y: 0, z: 0} + m_LocalScale: {x: 0.116126545, y: 0.35806346, z: 0.35806346} + m_Children: [] + m_Father: {fileID: 392295020622235569} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &392295020339198863 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020339198850} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &392295020339198848 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020339198850} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &392295020622235570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392295020622235569} + - component: {fileID: 392295020622235580} + - component: {fileID: 392295020622235581} + - component: {fileID: 392295020622235582} + - component: {fileID: 392295020622235583} + - component: {fileID: 392295020622235568} + m_Layer: 0 + m_Name: eyeL + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &392295020622235569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020622235570} + m_LocalRotation: {x: -0, y: -0.6087605, z: -0, w: 0.7933541} + m_LocalPosition: {x: -0.27170944, y: 0.147, z: 0.572} + m_LocalScale: {x: 0.4188999, y: 0.41889998, z: 0.41889992} + m_Children: + - {fileID: 392295020339198849} + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: -75, z: 0} +--- !u!33 &392295020622235580 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020622235570} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &392295020622235581 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020622235570} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &392295020622235582 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020622235570} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!153 &392295020622235583 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020622235570} + m_ConnectedBody: {fileID: 0} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.27000046, y: 0.10099983, z: 0.59800005} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 2 + m_AngularYMotion: 2 + m_AngularZMotion: 2 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 15 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!135 &392295020622235568 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295020622235570} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.3 + m_Center: {x: 0, y: 0.00000023841858, z: -0.0000038146973} +--- !u!1 &392295021109847075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392295021109847074} + - component: {fileID: 392295021109847085} + - component: {fileID: 392295021109847086} + - component: {fileID: 392295021109847087} + - component: {fileID: 392295021109847072} + - component: {fileID: 392295021109847073} + m_Layer: 0 + m_Name: eyeR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &392295021109847074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295021109847075} + m_LocalRotation: {x: -0, y: -0.85473436, z: -0, w: 0.51906574} + m_LocalPosition: {x: 0.268, y: 0.099, z: 0.533} + m_LocalScale: {x: 0.41890016, y: 0.4189, z: 0.4189001} + m_Children: + - {fileID: 392295020297985883} + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -117.461006, z: 0} +--- !u!33 &392295021109847085 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295021109847075} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &392295021109847086 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295021109847075} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &392295021109847087 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295021109847075} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!153 &392295021109847072 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295021109847075} + m_ConnectedBody: {fileID: 0} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.28899956, y: 0.03999996, z: 0.64799976} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 2 + m_AngularYMotion: 2 + m_AngularZMotion: 2 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 15 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!135 &392295021109847073 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392295021109847075} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.3 + m_Center: {x: 0, y: 0.00000023841858, z: -0.0000038146973} +--- !u!1 &1409910518653866158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1412408861227266934} + - component: {fileID: 1432732241053990734} + - component: {fileID: 1424247058592799888} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1412408861227266934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409910518653866158} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &1432732241053990734 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409910518653866158} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1424247058592799888 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409910518653866158} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1410009935479931886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1411942538481084588} + - component: {fileID: 1432322058858012124} + - component: {fileID: 1424591206989828270} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1411942538481084588 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410009935479931886} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &1432322058858012124 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410009935479931886} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1424591206989828270 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410009935479931886} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1410553039563302140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1407349286346974172} + - component: {fileID: 1431306441770113382} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1407349286346974172 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410553039563302140} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1431306441770113382 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410553039563302140} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1410562997962353354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1407135295156361582} + - component: {fileID: 1436599256392627430} + - component: {fileID: 1424706664410354612} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1407135295156361582 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410562997962353354} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &1436599256392627430 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410562997962353354} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1424706664410354612 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410562997962353354} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1410620104532608312 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1412157197394092858} + - component: {fileID: 1432185495825887334} + - component: {fileID: 1424383458155015182} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1412157197394092858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410620104532608312} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &1432185495825887334 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410620104532608312} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1424383458155015182 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410620104532608312} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1410720815441052504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1407211325050618016} + - component: {fileID: 1432735495885397178} + - component: {fileID: 1425028043114049024} + m_Layer: 0 + m_Name: 0_AgentCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1407211325050618016 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410720815441052504} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.84172, y: 0.84172, z: 0.84172} + m_Children: + - {fileID: 392295021109847074} + - {fileID: 392295020622235569} + - {fileID: 1407349286346974172} + - {fileID: 1412157197394092858} + - {fileID: 1407135295156361582} + - {fileID: 1411942538481084588} + - {fileID: 1412408861227266934} + - {fileID: 5494622995632775171} + m_Father: {fileID: 1083043763294205917} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1432735495885397178 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410720815441052504} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1425028043114049024 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410720815441052504} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1556393978703309541 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7774777205371788295} + - component: {fileID: 2547434709758502163} + - component: {fileID: 7237459584384428744} + - component: {fileID: 154101288201652324} + m_Layer: 0 + m_Name: Blank + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7774777205371788295 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556393978703309541} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.128} + m_LocalScale: {x: 0.78929, y: 0.78929, z: 0.78929} + m_Children: [] + m_Father: {fileID: 1083043763294205917} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2547434709758502163 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556393978703309541} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7237459584384428744 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556393978703309541} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ecd59def9213741058b969f699d10e8e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &154101288201652324 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556393978703309541} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3770221840457372556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5494622995632775171} + - component: {fileID: 1528636354380124787} + - component: {fileID: 544194016481728281} + - component: {fileID: 155811813542216952} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5494622995632775171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3770221840457372556} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.15} + m_LocalScale: {x: 1.1931596, y: 1.1931596, z: 1.1931596} + m_Children: [] + m_Father: {fileID: 1407211325050618016} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1528636354380124787 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3770221840457372556} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &544194016481728281 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3770221840457372556} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &155811813542216952 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3770221840457372556} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &4007900521885639951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1083043763294205917} + - component: {fileID: 1552252695695419920} + m_Layer: 0 + m_Name: TILE_Base + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1083043763294205917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4007900521885639951} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 23.697287, y: 9.577991, z: -0.41} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1407211325050618016} + - {fileID: 5999479198264254500} + - {fileID: 6230063232196822711} + - {fileID: 5916659516073258429} + - {fileID: 7774777205371788295} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1552252695695419920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4007900521885639951} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52e0f5ebc9d8f4b3a895401959671896, type: 3} + m_Name: + m_EditorClassIdentifier: + emptyTile: {fileID: 1556393978703309541} + tileTypes: + - {fileID: 1410720815441052504} + - {fileID: 5999479198264425476} + - {fileID: 6230063232197319319} + materialTypes: + - {fileID: 2100000, guid: 6fdf8e49597ff42648c9e99d7ecfc005, type: 2} + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + - {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} +--- !u!1 &4259570214533840387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5916659516073258429} + - component: {fileID: 4283241418884804523} + - component: {fileID: 5215737099369963317} + - component: {fileID: 5408149481535702705} + m_Layer: 0 + m_Name: SimpleTile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5916659516073258429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4259570214533840387} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.128} + m_LocalScale: {x: 0.78929, y: 0.78929, z: 0.78929} + m_Children: + - {fileID: 721252467987611873} + m_Father: {fileID: 1083043763294205917} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4283241418884804523 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4259570214533840387} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5215737099369963317 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4259570214533840387} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &5408149481535702705 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4259570214533840387} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8154493490176683575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 721252467987611873} + - component: {fileID: 9110053526174561862} + - component: {fileID: 2435548001358484304} + - component: {fileID: 6580205249218844453} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &721252467987611873 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8154493490176683575} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.16217108} + m_LocalScale: {x: 1.2669615, y: 1.2669615, z: 1.2669615} + m_Children: [] + m_Father: {fileID: 5916659516073258429} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9110053526174561862 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8154493490176683575} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2435548001358484304 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8154493490176683575} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6580205249218844453 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8154493490176683575} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1001 &965188799849276359 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 6230063232196822711} + m_Modifications: + - target: {fileID: 100000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_Name + value: 2_Special2_Tri (1) + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalPosition.y + value: 0.04 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalPosition.z + value: -0.113 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalScale.x + value: 1.4667759 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalScale.y + value: 1.4667759 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalScale.z + value: 1.4667759 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!1001 &3560575736280662528 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 5999479198264254500} + m_Modifications: + - target: {fileID: 100000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_Name + value: 1_Special1_Star (1) + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalPosition.z + value: -0.169 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 18.5 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalScale.x + value: 1.4509981 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalScale.y + value: 1.4509981 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalScale.z + value: 1.4509981 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} +--- !u!1001 &5999479198264392356 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1083043763294205917} + m_Modifications: + - target: {fileID: 100000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_Name + value: 1_Special1_Star + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.z + value: 0.16074255 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalRotation.w + value: 0.98699635 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 18.5 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalScale.x + value: 0.4634482 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalScale.y + value: 0.4634482 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} + propertyPath: m_LocalScale.z + value: 0.4634482 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} +--- !u!4 &5999479198264254500 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: 5f278eab42a404bf4b9b70618654218d, + type: 3} + m_PrefabInstance: {fileID: 5999479198264392356} + m_PrefabAsset: {fileID: 0} +--- !u!1 &5999479198264425476 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 5f278eab42a404bf4b9b70618654218d, + type: 3} + m_PrefabInstance: {fileID: 5999479198264392356} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6230063232197221431 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1083043763294205917} + m_Modifications: + - target: {fileID: 100000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_Name + value: 2_Special2_Tri + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalScale.x + value: 0.431374 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalScale.y + value: 0.431374 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} + propertyPath: m_LocalScale.z + value: 0.431374 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!4 &6230063232196822711 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, + type: 3} + m_PrefabInstance: {fileID: 6230063232197221431} + m_PrefabAsset: {fileID: 0} +--- !u!1 &6230063232197319319 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, + type: 3} + m_PrefabInstance: {fileID: 6230063232197221431} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab.meta b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..9cb6a92b0c2159894f8e627aa00755765ab7b5df --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: faee4e805953b49e688bd00b45c55f2e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scenes.meta b/Project/Assets/ML-Agents/Examples/Match3/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..83d0e42384058d5662410f8da22e26531610f937 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e033fb0df67684ebf961ed115870ff10 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity b/Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity new file mode 100644 index 0000000000000000000000000000000000000000..2f8bd468a3e9a54c3f408818aaa623d73ed3a4f5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity @@ -0,0 +1,1796 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.43632758, g: 0.47471005, b: 0.5147158, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &202342627 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_Name + value: Match3VisualObs (3) + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aaa471bd5e2014848a66917476671aed, type: 3} +--- !u!1 &288081173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 288081174} + - component: {fileID: 288081177} + - component: {fileID: 288081176} + - component: {fileID: 288081175} + m_Layer: 0 + m_Name: Border (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &288081174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288081173} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.202, y: 0, z: -0.07999998} + m_LocalScale: {x: 1.0625, y: 0.50279176, z: 1.0649} + m_Children: + - {fileID: 1976481842} + - {fileID: 1670850089} + m_Father: {fileID: 796197232} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &288081175 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288081173} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &288081176 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288081173} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &288081177 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288081173} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &327661542 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 327661545} + - component: {fileID: 327661544} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &327661544 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327661542} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.58746636, g: 0.71687025, b: 0.78431374, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 6.5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &327661545 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327661542} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 4.5, y: 5, z: 3.72} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!1001 &416139953 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 288081174} + m_Modifications: + - target: {fileID: 100000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_Name + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalScale.x + value: 48.39589 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalScale.y + value: 26.17337 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalScale.z + value: 274.20087 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalPosition.x + value: 0.31264985 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalPosition.y + value: 0.32276452 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalPosition.z + value: 0.33805987 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071069 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000015454312 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalRotation.y + value: 0.00000001545431 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalRotation.z + value: -0.70710677 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -90.00001 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3} +--- !u!1 &448464282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 448464284} + - component: {fileID: 448464283} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &448464283 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 448464282} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &448464284 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 448464282} + m_LocalRotation: {x: 0.99240386, y: -0.0075961384, z: 0.08682413, w: 0.086824216} + m_LocalPosition: {x: -5, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 170, y: -10, z: 0} +--- !u!1001 &455966546 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3508723250470608010, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_BehaviorName + value: Match3SimpleHeuristic + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: cubeSpacing + value: 1.25 + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: UseSmartHeuristic + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_Name + value: Match3SimpleHeuristic (1) + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3} +--- !u!1 &519872758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519872759} + - component: {fileID: 519872762} + - component: {fileID: 519872761} + - component: {fileID: 519872760} + m_Layer: 0 + m_Name: Border + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &519872759 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519872758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.07999998} + m_LocalScale: {x: 1.0625, y: 1.0625, z: 1.0649} + m_Children: [] + m_Father: {fileID: 796197232} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &519872760 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519872758} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &519872761 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519872758} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &519872762 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519872758} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &607493268 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2112317463290853299, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: HeuristicQuality + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: cubeSpacing + value: 1.25 + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: HeuristicQuality + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_Name + value: Match3GreedyHeuristic + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3} +--- !u!1 &796197228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 796197232} + - component: {fileID: 796197231} + - component: {fileID: 796197230} + - component: {fileID: 796197229} + m_Layer: 0 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &796197229 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796197228} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &796197230 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796197228} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &796197231 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796197228} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &796197232 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796197228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.4, y: 5, z: -0.5} + m_LocalScale: {x: 10.5, y: 12, z: 1} + m_Children: + - {fileID: 519872759} + - {fileID: 288081174} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &802842869 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_Name + value: Match3VectorObs (2) + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3} +--- !u!1001 &822340861 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 288081174} + m_Modifications: + - target: {fileID: 100000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_Name + value: Match + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalScale.x + value: 37.38769 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalScale.y + value: 20.219938 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalScale.z + value: 211.83073 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalPosition.x + value: 0.33568624 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalPosition.y + value: -0.09143946 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalPosition.z + value: 0.33805987 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071069 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000015454312 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalRotation.y + value: 0.00000001545431 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalRotation.z + value: -0.70710677 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -90.00001 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3} +--- !u!1001 &906566489 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_Name + value: Canvas_Watermark + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &1218183267 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_Name + value: Match3VisualObs (1) + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3019509692332007790, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aaa471bd5e2014848a66917476671aed, type: 3} +--- !u!1001 &1278119417 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_Name + value: Match3VectorObs (1) + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2118285884327540673, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3} +--- !u!1001 &1479255359 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3508723250470608010, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_BehaviorName + value: Match3SimpleHeuristic + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: cubeSpacing + value: 1.25 + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: UseSmartHeuristic + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_Name + value: Match3SimpleHeuristic + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3} +--- !u!4 &1670850089 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, + type: 3} + m_PrefabInstance: {fileID: 416139953} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1765917346 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2112317463290853299, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: HeuristicQuality + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: cubeSpacing + value: 1.25 + objectReference: {fileID: 0} + - target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: HeuristicQuality + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_Name + value: Match3GreedyHeuristic (1) + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3} +--- !u!1001 &1962414212 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_Name + value: Match3VectorObs (3) + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3} +--- !u!4 &1976481842 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, + type: 3} + m_PrefabInstance: {fileID: 822340861} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &2112980636 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_Name + value: Match3VisualObs (2) + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aaa471bd5e2014848a66917476671aed, type: 3} +--- !u!1001 &2118285882709515366 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824, + type: 3} + propertyPath: m_Name + value: Match3VectorObs + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3} +--- !u!1001 &8113351836286138288 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed, + type: 3} + propertyPath: m_Name + value: Match3VisualObs + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aaa471bd5e2014848a66917476671aed, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity.meta b/Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..000573c5b87f5fda62dadbdd6f3e155c9d447306 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2e09c5458f1494f9dad9cd6d09dff964 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..f86675a57eb43ef4eb5c31eda68edf9448cbb081 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be7a27f4291944d3dba4f696e1af4209 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Agent.cs b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Agent.cs new file mode 100644 index 0000000000000000000000000000000000000000..998440dac203df382be1d7b11f8cd71f25e09314 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Agent.cs @@ -0,0 +1,211 @@ +using System; +using UnityEngine; +using Unity.MLAgents; + +namespace Unity.MLAgentsExamples +{ + + /// + /// State of the "game" when showing all steps of the simulation. This is only used outside of training. + /// The state diagram is + /// + /// | <--------------------------------------- ^ + /// | | + /// v | + /// +--------+ +-------+ +-----+ +------+ + /// |Find | ---> |Clear | ---> |Drop | ---> |Fill | + /// |Matches | |Matched| | | |Empty | + /// +--------+ +-------+ +-----+ +------+ + /// + /// | ^ + /// | | + /// v | + /// + /// +--------+ + /// |Wait for| + /// |Move | + /// +--------+ + /// + /// The stats advances each "MoveTime" seconds. + /// + enum State + { + /// + /// Guard value, should never happen. + /// + Invalid = -1, + + /// + /// Look for matches. If there are matches, the next state is ClearMatched, otherwise WaitForMove. + /// + FindMatches = 0, + + /// + /// Remove matched cells and replace them with a placeholder value. + /// + ClearMatched = 1, + + /// + /// Move cells "down" to fill empty space. + /// + Drop = 2, + + /// + /// Replace empty cells with new random values. + /// + FillEmpty = 3, + + /// + /// Request a move from the Agent. + /// + WaitForMove = 4, + } + + public class Match3Agent : Agent + { + [HideInInspector] + public Match3Board Board; + + public float MoveTime = 1.0f; + public int MaxMoves = 500; + + + State m_CurrentState = State.WaitForMove; + float m_TimeUntilMove; + private int m_MovesMade; + private ModelOverrider m_ModelOverrider; + + private const float k_RewardMultiplier = 0.01f; + protected override void Awake() + { + base.Awake(); + Board = GetComponent(); + m_ModelOverrider = GetComponent(); + } + + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + Board.UpdateCurrentBoardSize(); + Board.InitSettled(); + m_CurrentState = State.FindMatches; + m_TimeUntilMove = MoveTime; + m_MovesMade = 0; + } + + private void FixedUpdate() + { + // Make a move every step if we're training, or we're overriding models in CI. + var useFast = Academy.Instance.IsCommunicatorOn || (m_ModelOverrider != null && m_ModelOverrider.HasOverrides); + if (useFast) + { + FastUpdate(); + } + else + { + AnimatedUpdate(); + } + + // We can't use the normal MaxSteps system to decide when to end an episode, + // since different agents will make moves at different frequencies (depending on the number of + // chained moves). So track a number of moves per Agent and manually interrupt the episode. + if (m_MovesMade >= MaxMoves) + { + EpisodeInterrupted(); + } + } + + void FastUpdate() + { + while (true) + { + var hasMatched = Board.MarkMatchedCells(); + if (!hasMatched) + { + break; + } + var pointsEarned = Board.ClearMatchedCells(); + AddReward(k_RewardMultiplier * pointsEarned); + Board.DropCells(); + Board.FillFromAbove(); + } + + while (!HasValidMoves()) + { + // Shuffle the board until we have a valid move. + Board.InitSettled(); + } + RequestDecision(); + m_MovesMade++; + } + + void AnimatedUpdate() + { + m_TimeUntilMove -= Time.deltaTime; + if (m_TimeUntilMove > 0.0f) + { + return; + } + + m_TimeUntilMove = MoveTime; + + State nextState; + switch (m_CurrentState) + { + case State.FindMatches: + var hasMatched = Board.MarkMatchedCells(); + nextState = hasMatched ? State.ClearMatched : State.WaitForMove; + if (nextState == State.WaitForMove) + { + m_MovesMade++; + } + break; + case State.ClearMatched: + var pointsEarned = Board.ClearMatchedCells(); + AddReward(k_RewardMultiplier * pointsEarned); + nextState = State.Drop; + break; + case State.Drop: + Board.DropCells(); + nextState = State.FillEmpty; + break; + case State.FillEmpty: + Board.FillFromAbove(); + nextState = State.FindMatches; + break; + case State.WaitForMove: + while (true) + { + // Shuffle the board until we have a valid move. + bool hasMoves = HasValidMoves(); + if (hasMoves) + { + break; + } + Board.InitSettled(); + } + RequestDecision(); + + nextState = State.FindMatches; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + m_CurrentState = nextState; + } + + bool HasValidMoves() + { + foreach (var unused in Board.ValidMoves()) + { + return true; + } + + return false; + } + + } + +} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Agent.cs.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Agent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..680a91543efdf3bb7ad76b1fc055eb6b6589679d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Agent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d982f0cd92214bd2b689be838fa40c44 +timeCreated: 1598221207 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Board.cs b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Board.cs new file mode 100644 index 0000000000000000000000000000000000000000..df6c3a56a45d603caa841cfea09076a1228b487a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Board.cs @@ -0,0 +1,338 @@ +using System; +using Unity.MLAgents.Integrations.Match3; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgentsExamples +{ + + + public class Match3Board : AbstractBoard + { + public int MinRows; + [FormerlySerializedAs("Rows")] + public int MaxRows; + + public int MinColumns; + [FormerlySerializedAs("Columns")] + public int MaxColumns; + + public int NumCellTypes; + public int NumSpecialTypes; + + public const int k_EmptyCell = -1; + [Tooltip("Points earned for clearing a basic cell (cube)")] + public int BasicCellPoints = 1; + + [Tooltip("Points earned for clearing a special cell (sphere)")] + public int SpecialCell1Points = 2; + + [Tooltip("Points earned for clearing an extra special cell (plus)")] + public int SpecialCell2Points = 3; + + /// + /// Seed to initialize the object. + /// + public int RandomSeed; + + (int CellType, int SpecialType)[,] m_Cells; + bool[,] m_Matched; + + private BoardSize m_CurrentBoardSize; + + System.Random m_Random; + + void Awake() + { + m_Cells = new (int, int)[MaxColumns, MaxRows]; + m_Matched = new bool[MaxColumns, MaxRows]; + + // Start using the max rows and columns, but we'll update the current size at the start of each episode. + m_CurrentBoardSize = new BoardSize + { + Rows = MaxRows, + Columns = MaxColumns, + NumCellTypes = NumCellTypes, + NumSpecialTypes = NumSpecialTypes + }; + } + + void Start() + { + m_Random = new System.Random(RandomSeed == -1 ? gameObject.GetInstanceID() : RandomSeed); + InitRandom(); + } + + public override BoardSize GetMaxBoardSize() + { + return new BoardSize + { + Rows = MaxRows, + Columns = MaxColumns, + NumCellTypes = NumCellTypes, + NumSpecialTypes = NumSpecialTypes + }; + } + + public override BoardSize GetCurrentBoardSize() + { + return m_CurrentBoardSize; + } + + /// + /// Change the board size to a random size between the min and max rows and columns. This is + /// cached so that the size is consistent until it is updated. + /// This is just for an example; you can change your board size however you want. + /// + public void UpdateCurrentBoardSize() + { + var newRows = m_Random.Next(MinRows, MaxRows + 1); + var newCols = m_Random.Next(MinColumns, MaxColumns + 1); + m_CurrentBoardSize.Rows = newRows; + m_CurrentBoardSize.Columns = newCols; + } + + public override bool MakeMove(Move move) + { + if (!IsMoveValid(move)) + { + return false; + } + var originalValue = m_Cells[move.Column, move.Row]; + var (otherRow, otherCol) = move.OtherCell(); + var destinationValue = m_Cells[otherCol, otherRow]; + + m_Cells[move.Column, move.Row] = destinationValue; + m_Cells[otherCol, otherRow] = originalValue; + return true; + } + + public override int GetCellType(int row, int col) + { + if (row >= m_CurrentBoardSize.Rows || col >= m_CurrentBoardSize.Columns) + { + throw new IndexOutOfRangeException(); + } + return m_Cells[col, row].CellType; + } + + public override int GetSpecialType(int row, int col) + { + if (row >= m_CurrentBoardSize.Rows || col >= m_CurrentBoardSize.Columns) + { + throw new IndexOutOfRangeException(); + } + return m_Cells[col, row].SpecialType; + } + + public override bool IsMoveValid(Move m) + { + if (m_Cells == null) + { + return false; + } + + return SimpleIsMoveValid(m); + } + + public bool MarkMatchedCells(int[,] cells = null) + { + ClearMarked(); + bool madeMatch = false; + for (var i = 0; i < m_CurrentBoardSize.Rows; i++) + { + for (var j = 0; j < m_CurrentBoardSize.Columns; j++) + { + // Check vertically + var matchedRows = 0; + for (var iOffset = i; iOffset < m_CurrentBoardSize.Rows; iOffset++) + { + if (m_Cells[j, i].CellType != m_Cells[j, iOffset].CellType) + { + break; + } + + matchedRows++; + } + + if (matchedRows >= 3) + { + madeMatch = true; + for (var k = 0; k < matchedRows; k++) + { + m_Matched[j, i + k] = true; + } + } + + // Check vertically + var matchedCols = 0; + for (var jOffset = j; jOffset < m_CurrentBoardSize.Columns; jOffset++) + { + if (m_Cells[j, i].CellType != m_Cells[jOffset, i].CellType) + { + break; + } + + matchedCols++; + } + + if (matchedCols >= 3) + { + madeMatch = true; + for (var k = 0; k < matchedCols; k++) + { + m_Matched[j + k, i] = true; + } + } + } + } + + return madeMatch; + } + + /// + /// Sets cells that are matched to the empty cell, and returns the score earned. + /// + /// + public int ClearMatchedCells() + { + var pointsByType = new[] { BasicCellPoints, SpecialCell1Points, SpecialCell2Points }; + int pointsEarned = 0; + for (var i = 0; i < m_CurrentBoardSize.Rows; i++) + { + for (var j = 0; j < m_CurrentBoardSize.Columns; j++) + { + if (m_Matched[j, i]) + { + var speciaType = GetSpecialType(i, j); + pointsEarned += pointsByType[speciaType]; + m_Cells[j, i] = (k_EmptyCell, 0); + } + } + } + + ClearMarked(); // TODO clear here or at start of matching? + return pointsEarned; + } + + public bool DropCells() + { + var madeChanges = false; + // Gravity is applied in the negative row direction + for (var j = 0; j < m_CurrentBoardSize.Columns; j++) + { + var writeIndex = 0; + for (var readIndex = 0; readIndex < m_CurrentBoardSize.Rows; readIndex++) + { + m_Cells[j, writeIndex] = m_Cells[j, readIndex]; + if (m_Cells[j, readIndex].CellType != k_EmptyCell) + { + writeIndex++; + } + } + + // Fill in empties at the end + for (; writeIndex < m_CurrentBoardSize.Rows; writeIndex++) + { + madeChanges = true; + m_Cells[j, writeIndex] = (k_EmptyCell, 0); + } + } + + return madeChanges; + } + + public bool FillFromAbove() + { + bool madeChanges = false; + for (var i = 0; i < m_CurrentBoardSize.Rows; i++) + { + for (var j = 0; j < m_CurrentBoardSize.Columns; j++) + { + if (m_Cells[j, i].CellType == k_EmptyCell) + { + madeChanges = true; + m_Cells[j, i] = (GetRandomCellType(), GetRandomSpecialType()); + } + } + } + + return madeChanges; + } + + public (int, int)[,] Cells + { + get { return m_Cells; } + } + + public bool[,] Matched + { + get { return m_Matched; } + } + + // Initialize the board to random values. + public void InitRandom() + { + for (var i = 0; i < MaxRows; i++) + { + for (var j = 0; j < MaxColumns; j++) + { + m_Cells[j, i] = (GetRandomCellType(), GetRandomSpecialType()); + } + } + } + + public void InitSettled() + { + InitRandom(); + while (true) + { + var anyMatched = MarkMatchedCells(); + if (!anyMatched) + { + return; + } + ClearMatchedCells(); + DropCells(); + FillFromAbove(); + } + } + + void ClearMarked() + { + for (var i = 0; i < MaxRows; i++) + { + for (var j = 0; j < MaxColumns; j++) + { + m_Matched[j, i] = false; + } + } + } + + int GetRandomCellType() + { + return m_Random.Next(0, NumCellTypes); + } + + int GetRandomSpecialType() + { + // 1 in N chance to get a type-2 special + // 2 in N chance to get a type-1 special + // otherwise 0 (boring) + var N = 10; + var val = m_Random.Next(0, N); + if (val == 0) + { + return 2; + } + + if (val <= 2) + { + return 1; + } + + return 0; + } + + } +} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Board.cs.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Board.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b76250f9a6d7b1f0a52dc63a5c9aefde2d076d4a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Board.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d852a063770348b68caa91b8e7642a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs new file mode 100644 index 0000000000000000000000000000000000000000..4442926724d321aa2bf18ae0793e0ec174d3a197 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs @@ -0,0 +1,187 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Profiling; + +namespace Unity.MLAgentsExamples +{ + public class Match3Drawer : MonoBehaviour + { + public int DebugMoveIndex = -1; + + static Color[] s_Colors = new[] + { + Color.red, + Color.green, + Color.blue, + Color.cyan, + Color.magenta, + Color.yellow, + Color.gray, + Color.black, + }; + + private static Color s_EmptyColor = new Color(0.5f, 0.5f, 0.5f, .25f); + + public Dictionary<(int, int), Match3TileSelector> tilesDict = new Dictionary<(int, int), Match3TileSelector>(); + public float CubeSpacing = 1.25f; + public GameObject TilePrefab; + + private bool m_Initialized; + private Match3Board m_Board; + + void Awake() + { + if (!m_Initialized) + { + InitializeDict(); + } + } + + void InitializeDict() + { + m_Board = GetComponent(); + foreach (var item in tilesDict) + { + if (item.Value) + { + DestroyImmediate(item.Value.gameObject); + } + } + + tilesDict.Clear(); + + for (var i = 0; i < m_Board.MaxRows; i++) + { + for (var j = 0; j < m_Board.MaxColumns; j++) + { + var go = Instantiate(TilePrefab, transform.position, Quaternion.identity, transform); + go.name = $"r{i}_c{j}"; + tilesDict.Add((i, j), go.GetComponent()); + } + } + + m_Initialized = true; + } + + void Update() + { + if (!m_Board) + { + m_Board = GetComponent(); + } + + if (!m_Initialized) + { + InitializeDict(); + } + + var currentSize = m_Board.GetCurrentBoardSize(); + for (var i = 0; i < m_Board.MaxRows; i++) + { + for (var j = 0; j < m_Board.MaxColumns; j++) + { + int value = Match3Board.k_EmptyCell; + int specialType = 0; + if (m_Board.Cells != null && i < currentSize.Rows && j < currentSize.Columns) + { + value = m_Board.GetCellType(i, j); + specialType = m_Board.GetSpecialType(i, j); + } + var pos = new Vector3(j, i, 0); + pos *= CubeSpacing; + + tilesDict[(i, j)].transform.position = transform.TransformPoint(pos); + tilesDict[(i, j)].SetActiveTile(specialType, value); + } + } + } + + void OnDrawGizmos() + { + Profiler.BeginSample("Match3.OnDrawGizmos"); + var cubeSize = .5f; + var matchedWireframeSize = .5f * (cubeSize + CubeSpacing); + + if (!m_Board) + { + m_Board = GetComponent(); + if (m_Board == null) + { + return; + } + } + + var currentSize = m_Board.GetCurrentBoardSize(); + for (var i = 0; i < m_Board.MaxRows; i++) + { + for (var j = 0; j < m_Board.MaxColumns; j++) + { + int value = Match3Board.k_EmptyCell; + int specialType = 0; + if (m_Board.Cells != null && i < currentSize.Rows && j < currentSize.Columns) + { + value = m_Board.GetCellType(i, j); + specialType = m_Board.GetSpecialType(i, j); + } + + if (value >= 0 && value < s_Colors.Length) + { + Gizmos.color = s_Colors[value]; + } + else + { + Gizmos.color = s_EmptyColor; + } + + var pos = new Vector3(j, i, 0); + pos *= CubeSpacing; + + if (specialType == 2) + { + Gizmos.DrawCube(transform.TransformPoint(pos), cubeSize * new Vector3(1f, .5f, .5f)); + Gizmos.DrawCube(transform.TransformPoint(pos), cubeSize * new Vector3(.5f, 1f, .5f)); + Gizmos.DrawCube(transform.TransformPoint(pos), cubeSize * new Vector3(.5f, .5f, 1f)); + } + else if (specialType == 1) + { + Gizmos.DrawSphere(transform.TransformPoint(pos), .5f * cubeSize); + } + else + { + Gizmos.DrawCube(transform.TransformPoint(pos), cubeSize * Vector3.one); + } + + Gizmos.color = Color.yellow; + if (m_Board.Matched != null && m_Board.Matched[j, i]) + { + Gizmos.DrawWireCube(transform.TransformPoint(pos), matchedWireframeSize * Vector3.one); + } + } + } + + // Draw valid moves + foreach (var move in m_Board.AllMoves()) + { + if (DebugMoveIndex >= 0 && move.MoveIndex != DebugMoveIndex) + { + continue; + } + + if (!m_Board.IsMoveValid(move)) + { + continue; + } + + var (otherRow, otherCol) = move.OtherCell(); + var pos = new Vector3(move.Column, move.Row, 0) * CubeSpacing; + var otherPos = new Vector3(otherCol, otherRow, 0) * CubeSpacing; + + var oneQuarter = Vector3.Lerp(pos, otherPos, .25f); + var threeQuarters = Vector3.Lerp(pos, otherPos, .75f); + Gizmos.DrawLine(transform.TransformPoint(oneQuarter), transform.TransformPoint(threeQuarters)); + } + + Profiler.EndSample(); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..24aa1ade8815d29442a398d89e49669aa305a467 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: abebb7ad4a5547d7a3b04373784ff195 +timeCreated: 1598221188 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuator.cs b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..d54e824df069438791e705f7698bcf7b38935ceb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuator.cs @@ -0,0 +1,124 @@ +using Unity.MLAgents.Integrations.Match3; + +namespace Unity.MLAgentsExamples +{ + public class Match3ExampleActuator : Match3Actuator + { + private Match3Board m_Board; + Match3Board Board => m_Board; + + public Match3ExampleActuator(Match3Board board, + bool forceHeuristic, + string name, + int seed + ) + : base(board, forceHeuristic, seed, name) + { + m_Board = board; + } + + + protected override int EvalMovePoints(Move move) + { + var pointsByType = new[] { Board.BasicCellPoints, Board.SpecialCell1Points, Board.SpecialCell2Points }; + // Counts the expected points for making the move. + var moveVal = Board.GetCellType(move.Row, move.Column); + var moveSpecial = Board.GetSpecialType(move.Row, move.Column); + var (otherRow, otherCol) = move.OtherCell(); + var oppositeVal = Board.GetCellType(otherRow, otherCol); + var oppositeSpecial = Board.GetSpecialType(otherRow, otherCol); + + + int movePoints = EvalHalfMove( + otherRow, otherCol, moveVal, moveSpecial, move.Direction, pointsByType + ); + int otherPoints = EvalHalfMove( + move.Row, move.Column, oppositeVal, oppositeSpecial, move.OtherDirection(), pointsByType + ); + return movePoints + otherPoints; + } + + int EvalHalfMove(int newRow, int newCol, int newValue, int newSpecial, Direction incomingDirection, int[] pointsByType) + { + // This is a essentially a duplicate of AbstractBoard.CheckHalfMove but also counts the points for the move. + var currentBoardSize = Board.GetCurrentBoardSize(); + int matchedLeft = 0, matchedRight = 0, matchedUp = 0, matchedDown = 0; + int scoreLeft = 0, scoreRight = 0, scoreUp = 0, scoreDown = 0; + + if (incomingDirection != Direction.Right) + { + for (var c = newCol - 1; c >= 0; c--) + { + if (Board.GetCellType(newRow, c) == newValue) + { + matchedLeft++; + scoreLeft += pointsByType[Board.GetSpecialType(newRow, c)]; + } + else + break; + } + } + + if (incomingDirection != Direction.Left) + { + for (var c = newCol + 1; c < currentBoardSize.Columns; c++) + { + if (Board.GetCellType(newRow, c) == newValue) + { + matchedRight++; + scoreRight += pointsByType[Board.GetSpecialType(newRow, c)]; + } + else + break; + } + } + + if (incomingDirection != Direction.Down) + { + for (var r = newRow + 1; r < currentBoardSize.Rows; r++) + { + if (Board.GetCellType(r, newCol) == newValue) + { + matchedUp++; + scoreUp += pointsByType[Board.GetSpecialType(r, newCol)]; + } + else + break; + } + } + + if (incomingDirection != Direction.Up) + { + for (var r = newRow - 1; r >= 0; r--) + { + if (Board.GetCellType(r, newCol) == newValue) + { + matchedDown++; + scoreDown += pointsByType[Board.GetSpecialType(r, newCol)]; + } + else + break; + } + } + + if ((matchedUp + matchedDown >= 2) || (matchedLeft + matchedRight >= 2)) + { + // It's a match. Start from counting the piece being moved + var totalScore = pointsByType[newSpecial]; + if (matchedUp + matchedDown >= 2) + { + totalScore += scoreUp + scoreDown; + } + + if (matchedLeft + matchedRight >= 2) + { + totalScore += scoreLeft + scoreRight; + } + return totalScore; + } + + return 0; + } + } + +} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuator.cs.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..acaf52892cde1d0ac40360bee9d0d64cfc64e83a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9e6fe1a020a04421ab828be4543a655c +timeCreated: 1610665874 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuatorComponent.cs b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuatorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..ca70181be0261f00bf58085695ce441b3610ce29 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuatorComponent.cs @@ -0,0 +1,17 @@ +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Integrations.Match3; + +namespace Unity.MLAgentsExamples +{ + public class Match3ExampleActuatorComponent : Match3ActuatorComponent + { + /// + public override IActuator[] CreateActuators() + { + var board = GetComponent(); + var seed = RandomSeed == -1 ? gameObject.GetInstanceID() : RandomSeed + 1; + return new IActuator[] { new Match3ExampleActuator(board, ForceHeuristic, ActuatorName, seed) }; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuatorComponent.cs.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuatorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e0569da775fe7d018d9d887d3d02880be8fbd3fa --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3ExampleActuatorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b17adcc6c9b241da903aa134f2dac930 +timeCreated: 1610665885 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs new file mode 100644 index 0000000000000000000000000000000000000000..685cf5866af15b3950f648302f92cb89f3c72098 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using UnityEngine; + +public class Match3TileSelector : MonoBehaviour +{ + public GameObject emptyTile; + public GameObject[] tileTypes = new GameObject[0]; + public Material[] materialTypes = new Material[0]; + + private Dictionary tileDict = new Dictionary(); + + // Start is called before the first frame update + void Awake() + { + for (int i = 0; i < tileTypes.Length; i++) + { + tileDict.Add(i, tileTypes[i].GetComponent()); + } + + SetActiveTile(0, 0); + } + + public void AllTilesOff() + { + foreach (var item in tileTypes) + { + item.SetActive(false); + } + } + + public void SetActiveTile(int typeIndex, int matIndex) + { + if (matIndex == -1) + { + AllTilesOff(); + emptyTile.SetActive(true); + } + else + { + emptyTile.SetActive(false); + for (int i = 0; i < tileTypes.Length; i++) + { + if (i == typeIndex) + { + tileTypes[i].SetActive(true); + tileDict[i].sharedMaterial = materialTypes[matIndex]; + } + else + { + tileTypes[i].SetActive(false); + } + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs.meta b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..738198a3ffd2c514edfdcb76fff9a537a8d2c1e2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52e0f5ebc9d8f4b3a895401959671896 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/TFModels.meta b/Project/Assets/ML-Agents/Examples/Match3/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..e2d04fa66c36cfb81e7c420a7ce32b392af94198 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 504c8f923fdf448e795936f2900a5fd4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx new file mode 100644 index 0000000000000000000000000000000000000000..188cbe50610468cb3e180a56ff7212c69b14ebde --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71931a2327fc6ae8b9e4f402f8ba270425842859aa558ae449ece62fd0c1621f +size 1593073 diff --git a/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx.meta b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..a06d4dc11d05cc5997731d87ed9b220e2d0ec5de --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VectorObs.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9e89b8e81974148d3b7213530d00589d +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx new file mode 100644 index 0000000000000000000000000000000000000000..33d92b8a5bc8c6649cc4535790a90237fc12348b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1bb6516cdf8c89b581b30d687b914baff15dde936d67f22ab1b52d254efc4f9 +size 7726904 diff --git a/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx.meta b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..4b2b528221320a7611c6a0436deeff82a8411555 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Match3/TFModels/Match3VisualObs.onnx.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 28ccdfd7cb3d941ce8af0ab89e06130a +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/PushBlock.meta b/Project/Assets/ML-Agents/Examples/PushBlock.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce0df8d473faaa2c815686177a076fdc1d2da062 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4197ece8ca6d74a00adc6bafbabda158 +folderAsset: yes +timeCreated: 1506303336 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Demos.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..a81b8cf4ecc3243d3527bdf539aa00c1490fbd26 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1329fcb394f243928b532bf0b53a342 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo b/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo new file mode 100644 index 0000000000000000000000000000000000000000..87f1bdf105fb540774b73bc0b18e5eeb0356ea67 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a017f3d872abc0a939792e4be045f7042757362d2818328383cfa16147e89ee8 +size 2284551 diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..7ca9e9a17dd35dac737d62982671d5876bc60891 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7f11f35191533404c9957443a681aaee +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400002 + second: Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Meshes.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..52a1b4d7732ba877785f636fc8e1984a4e42ed8a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e806d68316eff0e46a3fda372ae42c44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Meshes/PushBlockCourt.fbx b/Project/Assets/ML-Agents/Examples/PushBlock/Meshes/PushBlockCourt.fbx new file mode 100644 index 0000000000000000000000000000000000000000..29846d784f2718db81db7670d10bb2f042cd9614 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/PushBlock/Meshes/PushBlockCourt.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Meshes/PushBlockCourt.fbx.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Meshes/PushBlockCourt.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..c6f04a824bf2679180e84a3932cc858775d8eabb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Meshes/PushBlockCourt.fbx.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: c639386c12f5f7841892163a199dfacc +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: GoalArea + 100002: Ground + 100004: //RootNode + 100006: WallsOuter + 400000: GoalArea + 400002: Ground + 400004: //RootNode + 400006: WallsOuter + 2100000: rep_WhiteWalls + 2100002: rep_Floor + 2100004: rep_Checkers + 2300000: GoalArea + 2300002: Ground + 2300004: WallsOuter + 3300000: GoalArea + 3300002: Ground + 3300004: WallsOuter + 4300000: WallsOuter + 4300002: Ground + 4300004: GoalArea + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Checkers + second: {fileID: 2100000, guid: 36c7baa347d68f347a9aa9698aa1bcdd, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Floor + second: {fileID: 2100000, guid: bc723809e6ff3174fad3e774cae1aed0, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_WhiteWalls + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8cfdb46cf91867314b9b8cd1b5789eaf08c670af --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3d2b9d5547d934200a786212743850c4 +folderAsset: yes +timeCreated: 1514922259 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockAgentGridCollab.prefab b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockAgentGridCollab.prefab new file mode 100644 index 0000000000000000000000000000000000000000..26308e1b867cc385fbe6733d20919e165e14eb90 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockAgentGridCollab.prefab @@ -0,0 +1,636 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2709359580712052714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2709359580712052713} + - component: {fileID: 1548337883655231979} + m_Layer: 0 + m_Name: GridSensor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2709359580712052713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2709359580712052714} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2708762399863795223} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1548337883655231979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2709359580712052714} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a501962d056745d1a30e99146ee39fe, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: GridSensor + m_CellScale: {x: 1, y: 0.5, z: 1} + m_GridSize: {x: 20, y: 1, z: 20} + m_RotateWithAgent: 1 + m_DetectableTags: + - wall + - agent + - goal + - blockSmall + - blockLarge + - blockVeryLarge + m_ColliderMask: + serializedVersion: 2 + m_Bits: 1 + m_MaxColliderBufferSize: 500 + m_InitialColliderBufferSize: 16 + m_DebugColors: + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0.5176471, b: 1, a: 0} + - {r: 0.46666667, g: 0.7058824, b: 0.3529412, a: 0} + - {r: 1, g: 0.99607843, b: 0.9843137, a: 0} + - {r: 0.48235294, g: 0.48235294, b: 0.48235294, a: 0} + - {r: 0.35686275, g: 0.35686275, b: 0.35686275, a: 0} + m_GizmoYOffset: 0 + m_ShowGizmos: 0 + m_CompressionType: 1 + m_ObservationStacks: 1 +--- !u!1 &2709573194145405553 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2704579756923536881} + - component: {fileID: 2733408408583060933} + - component: {fileID: 2723179652726878521} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2704579756923536881 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2709573194145405553} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 2704888262008647423} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &2733408408583060933 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2709573194145405553} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2723179652726878521 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2709573194145405553} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2710094016073258679 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2704779930215346837} + - component: {fileID: 2729735685473747963} + - component: {fileID: 2723970678620444735} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2704779930215346837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710094016073258679} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 2704888262008647423} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &2729735685473747963 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710094016073258679} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2723970678620444735 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710094016073258679} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2710222686363865887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2704854400468902621} + - component: {fileID: 2729743305405211849} + - component: {fileID: 2723247208239912719} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2704854400468902621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710222686363865887} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 2704888262008647423} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &2729743305405211849 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710222686363865887} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2723247208239912719 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710222686363865887} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2710286047221272849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2708762399863795223} + - component: {fileID: 2691837803371243691} + - component: {fileID: 2598450485826216109} + - component: {fileID: 2710286047221272848} + - component: {fileID: 2698669610236060893} + - component: {fileID: 6481017652691923713} + - component: {fileID: 2106090979146236401} + - component: {fileID: 294674626881224982} + m_Layer: 0 + m_Name: PushBlockAgentGridCollab + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2708762399863795223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0.59, z: 9.21} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2704888262008647423} + - {fileID: 2709359580712052713} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &2691837803371243691 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 4 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &2598450485826216109 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 2 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 07000000 + VectorActionSize: 07000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: e35859736a42e4342b3272438be93ea9, type: 3} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: PushBlockCollab + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &2710286047221272848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d94a85eca2e074578943301959c555ba, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 +--- !u!65 &2698669610236060893 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6481017652691923713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &2106090979146236401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &294674626881224982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710286047221272849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df0f8be9a37d6486498061e2cbc4cd94, type: 3} + m_Name: + m_EditorClassIdentifier: + RootBody: {fileID: 2691837803371243691} + VirtualRoot: {fileID: 2710286047221272849} + Settings: + UseModelSpaceTranslations: 0 + UseModelSpaceRotations: 0 + UseLocalSpaceTranslations: 1 + UseLocalSpaceRotations: 1 + UseModelSpaceLinearVelocity: 1 + UseLocalSpaceLinearVelocity: 0 + UseJointPositionsAndAngles: 0 + UseJointForces: 0 + sensorName: RBSensor +--- !u!1 &2710572731397926669 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2704888262008647423} + - component: {fileID: 2733681255225059443} + - component: {fileID: 2722559815055317611} + m_Layer: 0 + m_Name: AgentCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2704888262008647423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710572731397926669} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2704854400468902621} + - {fileID: 2704639514647767405} + - {fileID: 2704579756923536881} + - {fileID: 2704779930215346837} + m_Father: {fileID: 2708762399863795223} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2733681255225059443 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710572731397926669} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2722559815055317611 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710572731397926669} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2710759530905966697 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2704639514647767405} + - component: {fileID: 2733216223098383973} + - component: {fileID: 2723975042992620135} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2704639514647767405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710759530905966697} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 2704888262008647423} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &2733216223098383973 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710759530905966697} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2723975042992620135 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2710759530905966697} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockAgentGridCollab.prefab.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockAgentGridCollab.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..69ca1174173842e99f9c0d9464b511f411c93d03 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockAgentGridCollab.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac01d0f42c5e1463e943632a60d99967 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockArea.prefab b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockArea.prefab new file mode 100644 index 0000000000000000000000000000000000000000..73245d659d3719e76965bf94b048f93f0c50d08c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockArea.prefab @@ -0,0 +1,1145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1058115561937900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4799209171944556} + - component: {fileID: 33372756098612312} + - component: {fileID: 23425474254155940} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4799209171944556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058115561937900} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33372756098612312 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058115561937900} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23425474254155940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058115561937900} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1125452240183160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4006990431719496} + m_Layer: 0 + m_Name: PushBlockArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4006990431719496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125452240183160} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4188187884171146} + - {fileID: 4228459933126600} + - {fileID: 4643236529171504} + - {fileID: 4662886693952972} + - {fileID: 4491958117158432} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1257458296368784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4544987641442146} + - component: {fileID: 33329158164785646} + - component: {fileID: 23060698592861174} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4544987641442146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257458296368784} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4693470752376230} + - {fileID: 4510816898360128} + - {fileID: 4885544221206768} + - {fileID: 4799209171944556} + - {fileID: 4744579300537096} + m_Father: {fileID: 4188187884171146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33329158164785646 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257458296368784} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23060698592861174 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257458296368784} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1441513772919942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4228459933126600} + - component: {fileID: 33257578884602618} + - component: {fileID: 23824899148377476} + - component: {fileID: 65797106708039188} + m_Layer: 0 + m_Name: Goal + m_TagString: goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4228459933126600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.03, z: -10.5} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.010748733} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33257578884602618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_Mesh: {fileID: 4300004, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &23824899148377476 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65797106708039188 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 300, z: 400} + m_Center: {x: 0, y: 2.5, z: 0} +--- !u!1 &1461267750064770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4510816898360128} + - component: {fileID: 33894909717767508} + - component: {fileID: 23501817194256018} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4510816898360128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461267750064770} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33894909717767508 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461267750064770} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23501817194256018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461267750064770} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1489716781518988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188187884171146} + - component: {fileID: 54817351390947638} + - component: {fileID: 114306175693660464} + - component: {fileID: 114505490781873732} + - component: {fileID: 65880096262939968} + - component: {fileID: 114807072692257076} + - component: {fileID: 114451319691753174} + - component: {fileID: 8964598783836598940} + - component: {fileID: 4081319787948195948} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188187884171146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4544987641442146} + m_Father: {fileID: 4006990431719496} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &54817351390947638 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 4 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114306175693660464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 2 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 07000000 + VectorActionSize: 07000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 70db47ab276e44fe0beb677ff8d69382, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: PushBlock + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114505490781873732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dea8c4f2604b947e6b7b97750dde87ca, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + ground: {fileID: 1500989011945850} + area: {fileID: 1125452240183160} + areaBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + goal: {fileID: 1441513772919942} + block: {fileID: 1831337770648600} + goalDetect: {fileID: 0} + useVectorObs: 1 +--- !u!65 &65880096262939968 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114807072692257076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: + - block + - goal + - wall + m_RaysPerDirection: 3 + m_MaxRayDegrees: 90 + m_SphereCastRadius: 0.5 + m_RayLength: 12 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!114 &114451319691753174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: OffsetRayPerceptionSensor + m_DetectableTags: + - block + - goal + - wall + m_RaysPerDirection: 3 + m_MaxRayDegrees: 90 + m_SphereCastRadius: 0.5 + m_RayLength: 12 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 1.5 + m_EndVerticalOffset: 1.5 +--- !u!114 &8964598783836598940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &4081319787948195948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1500989011945850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4643236529171504} + - component: {fileID: 33737551691836984} + - component: {fileID: 23549423015434358} + - component: {fileID: 65513349759460256} + m_Layer: 0 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4643236529171504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.00000030517577} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33737551691836984 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_Mesh: {fileID: 4300002, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &23549423015434358 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65513349759460256 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 100, z: 2500} + m_Center: {x: 0, y: -50, z: 0} +--- !u!1 &1587735394719530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4744579300537096} + - component: {fileID: 33895795138265702} + - component: {fileID: 23899848265046434} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4744579300537096 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587735394719530} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33895795138265702 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587735394719530} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23899848265046434 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587735394719530} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1724888327628444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4693470752376230} + - component: {fileID: 20603941467042180} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4693470752376230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1724888327628444} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20603941467042180 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1724888327628444} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1831337770648600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4491958117158432} + - component: {fileID: 33211910135534124} + - component: {fileID: 65500237382738106} + - component: {fileID: 23965303024756010} + - component: {fileID: 54485094479975724} + - component: {fileID: 114274385944737294} + m_Layer: 0 + m_Name: Block + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4491958117158432 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2, y: 1, z: -1.43} + m_LocalScale: {x: 2, y: 0.75, z: 2} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33211910135534124 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65500237382738106 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23965303024756010 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &54485094479975724 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114274385944737294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d079d09ceed84ff49cf6841c66cf7ec, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} +--- !u!1 &1948183181472910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4662886693952972} + - component: {fileID: 33923598962272346} + - component: {fileID: 23386727129662884} + - component: {fileID: 65537431973827738} + - component: {fileID: 65603921567931242} + - component: {fileID: 65701990377179520} + - component: {fileID: 65220627410631168} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4662886693952972 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33923598962272346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Mesh: {fileID: 4300000, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &23386727129662884 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65537431973827738 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 200, z: 2600} + m_Center: {x: -1275, y: 50, z: 0} +--- !u!65 &65603921567931242 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 200, z: 2600} + m_Center: {x: 1275, y: 50, z: 0} +--- !u!65 &65701990377179520 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 200, z: 50} + m_Center: {x: 0, y: 50, z: -1275} +--- !u!65 &65220627410631168 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 200, z: 50} + m_Center: {x: 0, y: 50, z: 1275} +--- !u!1 &1998092687759860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4885544221206768} + - component: {fileID: 33708290946592760} + - component: {fileID: 23666927211414522} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4885544221206768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998092687759860} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33708290946592760 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998092687759860} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23666927211414522 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998092687759860} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockArea.prefab.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockArea.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..611dffe40d49c1b09d5d375892d6b3362d9d8cb2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockArea.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 03bcc81e249714a22bb411dddcc5d15e +timeCreated: 1515023875 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabAreaGrid.prefab b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabAreaGrid.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6f681e1e5ac1162f334a3028eb37f113b23fa217 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabAreaGrid.prefab @@ -0,0 +1,2596 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1679953550419902237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4328976497268490475} + - component: {fileID: 7132369796332428126} + - component: {fileID: 2011406755866216518} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4328976497268490475 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679953550419902237} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.005, y: 0.013333334, z: 0.005} + m_Children: + - {fileID: 1892116219995337402} + m_Father: {fileID: 8188518438377222649} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7132369796332428126 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679953550419902237} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &2011406755866216518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679953550419902237} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &1704950560014369677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5792020763052998472} + - component: {fileID: 1089576257401472848} + - component: {fileID: 650481893576787970} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5792020763052998472 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704950560014369677} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7617819406422085437} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1089576257401472848 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704950560014369677} + m_CullTransparentMesh: 0 +--- !u!114 &650481893576787970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704950560014369677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 125 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 2 +--- !u!1 &2077722060465813602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2435498129974644549} + - component: {fileID: 596965906792099223} + - component: {fileID: 1536262460761550105} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2435498129974644549 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2077722060465813602} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8481754379690979701} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &596965906792099223 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2077722060465813602} + m_CullTransparentMesh: 0 +--- !u!114 &1536262460761550105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2077722060465813602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 3 +--- !u!1 &4230455278956278417 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 492354252010942213} + - component: {fileID: 8080939480582418123} + - component: {fileID: 4106645378588202987} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &492354252010942213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4230455278956278417} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7001930324978731751} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8080939480582418123 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4230455278956278417} + m_CullTransparentMesh: 0 +--- !u!114 &4106645378588202987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4230455278956278417} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 3 +--- !u!1 &4880170283005485334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1892116219995337402} + - component: {fileID: 2144470490277432434} + - component: {fileID: 5261046599655592123} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1892116219995337402 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4880170283005485334} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4328976497268490475} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2144470490277432434 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4880170283005485334} + m_CullTransparentMesh: 0 +--- !u!114 &5261046599655592123 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4880170283005485334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 125 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 2 +--- !u!1 &5377521765718574666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8481754379690979701} + - component: {fileID: 4983373074734241169} + - component: {fileID: 5970614790165393971} + m_Layer: 0 + m_Name: Canvas (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8481754379690979701 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5377521765718574666} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.0033333334, y: 0.013333334, z: 0.0033333334} + m_Children: + - {fileID: 2435498129974644549} + m_Father: {fileID: 8191066184649639636} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &4983373074734241169 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5377521765718574666} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &5970614790165393971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5377521765718574666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &5488091025762841109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4965805181925729395} + - component: {fileID: 4917593777240151348} + - component: {fileID: 8556921634639622644} + m_Layer: 0 + m_Name: Canvas (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4965805181925729395 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5488091025762841109} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.013333334, z: 0.01} + m_Children: + - {fileID: 6287307301334554784} + m_Father: {fileID: 8191066182918326563} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &4917593777240151348 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5488091025762841109} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &8556921634639622644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5488091025762841109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &5841039003968194311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2708920546791072152} + - component: {fileID: 3012860472302415714} + - component: {fileID: 7222653093020747846} + m_Layer: 0 + m_Name: Canvas (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2708920546791072152 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5841039003968194311} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.013333334, z: 0.01} + m_Children: + - {fileID: 7955896957170663762} + m_Father: {fileID: 8191066183517911095} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &3012860472302415714 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5841039003968194311} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &7222653093020747846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5841039003968194311} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &5867018048826954104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6287307301334554784} + - component: {fileID: 6777550448918401425} + - component: {fileID: 3749581176570457871} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6287307301334554784 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5867018048826954104} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4965805181925729395} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6777550448918401425 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5867018048826954104} + m_CullTransparentMesh: 0 +--- !u!114 &3749581176570457871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5867018048826954104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 1 +--- !u!1 &6108224887597176060 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7617819406422085437} + - component: {fileID: 5826189984050905087} + - component: {fileID: 6870465822132933874} + m_Layer: 0 + m_Name: Canvas (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7617819406422085437 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6108224887597176060} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.005, y: 0.013333334, z: 0.005} + m_Children: + - {fileID: 5792020763052998472} + m_Father: {fileID: 8191066182861978102} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5826189984050905087 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6108224887597176060} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6870465822132933874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6108224887597176060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &6799730675784402451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7955896957170663762} + - component: {fileID: 6076551307389054975} + - component: {fileID: 4513304861775491596} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7955896957170663762 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6799730675784402451} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2708920546791072152} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 38} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6076551307389054975 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6799730675784402451} + m_CullTransparentMesh: 0 +--- !u!114 &4513304861775491596 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6799730675784402451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 1 +--- !u!1 &8190249228245734239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8188536470049157137} + - component: {fileID: 8204050938497803555} + - component: {fileID: 8212357718192869981} + - component: {fileID: 8162001734605633997} + m_Layer: 0 + m_Name: Goal + m_TagString: goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8188536470049157137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190249228245734239} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.03, z: -10.5} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.010748733} + m_Children: [] + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8204050938497803555 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190249228245734239} + m_Mesh: {fileID: 4300004, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &8212357718192869981 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190249228245734239} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8162001734605633997 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190249228245734239} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 300, z: 400} + m_Center: {x: 0, y: 100, z: 0} +--- !u!1 &8190313173186827939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8195704372856050665} + - component: {fileID: 8204255960767680993} + - component: {fileID: 8214329706407700399} + - component: {fileID: 8161722369269554297} + m_Layer: 0 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8195704372856050665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190313173186827939} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.00000030517577} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8204255960767680993 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190313173186827939} + m_Mesh: {fileID: 4300002, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &8214329706407700399 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190313173186827939} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8161722369269554297 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190313173186827939} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 100, z: 2500} + m_Center: {x: 0, y: -50, z: 0} +--- !u!1 &8190362017963850689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8188518438377222649} + - component: {fileID: 8203725933722365429} + - component: {fileID: 8161709265165770595} + - component: {fileID: 8212779130000186099} + - component: {fileID: 8173209430668012277} + - component: {fileID: 8190362017963850688} + m_Layer: 0 + m_Name: Block_Large + m_TagString: blockLarge + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8188518438377222649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190362017963850689} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.4, y: 0.53, z: -1.43} + m_LocalScale: {x: 2, y: 0.75, z: 2} + m_Children: + - {fileID: 4328976497268490475} + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8203725933722365429 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190362017963850689} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8161709265165770595 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190362017963850689} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8212779130000186099 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190362017963850689} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &8173209430668012277 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190362017963850689} + serializedVersion: 2 + m_Mass: 100 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &8190362017963850688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190362017963850689} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dcea692df32b46b4a884cfcc150aef7, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: goal + GoalValue: 2 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8191903532335653024} + m_MethodName: ScoredAGoal + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8190473871512800087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8195446952626479637} + - component: {fileID: 8202187549590460291} + - component: {fileID: 8214448421828524669} + - component: {fileID: 8161743779747081027} + - component: {fileID: 8162089469041927347} + - component: {fileID: 8162185911382668889} + - component: {fileID: 8163678790011586009} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8195446952626479637 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8202187549590460291 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_Mesh: {fileID: 4300000, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &8214448421828524669 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8161743779747081027 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 500, z: 2600} + m_Center: {x: -1275, y: 200, z: 0} +--- !u!65 &8162089469041927347 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 500, z: 2600} + m_Center: {x: 1275, y: 200, z: 0} +--- !u!65 &8162185911382668889 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 500, z: 50} + m_Center: {x: 0, y: 200, z: -1275} +--- !u!65 &8163678790011586009 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190473871512800087} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 500, z: 50} + m_Center: {x: 0, y: 200, z: 1275} +--- !u!1 &8191066182861978103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8191066182861978102} + - component: {fileID: 8191066182861978097} + - component: {fileID: 8191066182861978098} + - component: {fileID: 8191066182861978099} + - component: {fileID: 8191066182861978100} + - component: {fileID: 8191066182861978101} + m_Layer: 0 + m_Name: Block_Large (1) + m_TagString: blockLarge + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8191066182861978102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182861978103} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -5.4, y: 0.53, z: -1.43} + m_LocalScale: {x: 2, y: 0.75, z: 2} + m_Children: + - {fileID: 7617819406422085437} + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8191066182861978097 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182861978103} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8191066182861978098 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182861978103} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8191066182861978099 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182861978103} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &8191066182861978100 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182861978103} + serializedVersion: 2 + m_Mass: 100 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &8191066182861978101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182861978103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dcea692df32b46b4a884cfcc150aef7, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: goal + GoalValue: 2 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8191903532335653024} + m_MethodName: ScoredAGoal + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8191066182918326564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8191066182918326563} + - component: {fileID: 8191066182918326590} + - component: {fileID: 8191066182918326591} + - component: {fileID: 8191066182918326560} + - component: {fileID: 8191066182918326561} + - component: {fileID: 8191066182918326562} + m_Layer: 0 + m_Name: Block_Small (2) + m_TagString: blockSmall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8191066182918326563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182918326564} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7.7, y: 0.53, z: -1.43} + m_LocalScale: {x: 1, y: 0.75, z: 1} + m_Children: + - {fileID: 4965805181925729395} + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8191066182918326590 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182918326564} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8191066182918326591 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182918326564} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8191066182918326560 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182918326564} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &8191066182918326561 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182918326564} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &8191066182918326562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066182918326564} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dcea692df32b46b4a884cfcc150aef7, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: goal + GoalValue: 1 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8191903532335653024} + m_MethodName: ScoredAGoal + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8191066183517911096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8191066183517911095} + - component: {fileID: 8191066183517911090} + - component: {fileID: 8191066183517911091} + - component: {fileID: 8191066183517911092} + - component: {fileID: 8191066183517911093} + - component: {fileID: 8191066183517911094} + m_Layer: 0 + m_Name: Block_Small (3) + m_TagString: blockSmall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8191066183517911095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066183517911096} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.3, y: 0.53, z: -1.43} + m_LocalScale: {x: 1, y: 0.75, z: 1} + m_Children: + - {fileID: 2708920546791072152} + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8191066183517911090 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066183517911096} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8191066183517911091 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066183517911096} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8191066183517911092 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066183517911096} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &8191066183517911093 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066183517911096} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &8191066183517911094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066183517911096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dcea692df32b46b4a884cfcc150aef7, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: goal + GoalValue: 1 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8191903532335653024} + m_MethodName: ScoredAGoal + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8191066184511708583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8191066184511708582} + - component: {fileID: 8191066184511708577} + - component: {fileID: 8191066184511708578} + - component: {fileID: 8191066184511708579} + - component: {fileID: 8191066184511708580} + - component: {fileID: 8191066184511708581} + m_Layer: 0 + m_Name: Block_VeryLarge (1) + m_TagString: blockVeryLarge + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8191066184511708582 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184511708583} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.2, y: 0.53, z: -1.43} + m_LocalScale: {x: 3, y: 0.75, z: 3} + m_Children: + - {fileID: 7001930324978731751} + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8191066184511708577 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184511708583} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8191066184511708578 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184511708583} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8191066184511708579 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184511708583} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &8191066184511708580 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184511708583} + serializedVersion: 2 + m_Mass: 150 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &8191066184511708581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184511708583} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dcea692df32b46b4a884cfcc150aef7, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: goal + GoalValue: 3 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8191903532335653024} + m_MethodName: ScoredAGoal + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8191066184649639637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8191066184649639636} + - component: {fileID: 8191066184649639471} + - component: {fileID: 8191066184649639632} + - component: {fileID: 8191066184649639633} + - component: {fileID: 8191066184649639634} + - component: {fileID: 8191066184649639635} + m_Layer: 0 + m_Name: Block_VeryLarge + m_TagString: blockVeryLarge + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8191066184649639636 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184649639637} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.6800003, y: 0.53, z: -1.43} + m_LocalScale: {x: 3, y: 0.75, z: 3} + m_Children: + - {fileID: 8481754379690979701} + m_Father: {fileID: 8188317207052398481} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8191066184649639471 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184649639637} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8191066184649639632 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184649639637} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8191066184649639633 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184649639637} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &8191066184649639634 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184649639637} + serializedVersion: 2 + m_Mass: 150 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &8191066184649639635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191066184649639637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dcea692df32b46b4a884cfcc150aef7, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: goal + GoalValue: 3 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8191903532335653024} + m_MethodName: ScoredAGoal + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8191903532335653025 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8188317207052398481} + - component: {fileID: 8191903532335653024} + m_Layer: 0 + m_Name: PushBlockCollabAreaGrid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8188317207052398481 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191903532335653025} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8188215278053101651} + - {fileID: 8692073903331065053} + - {fileID: 9118573765073340204} + - {fileID: 8188536470049157137} + - {fileID: 8195704372856050665} + - {fileID: 8195446952626479637} + - {fileID: 8188518438377222649} + - {fileID: 8191066182861978102} + - {fileID: 8191066184649639636} + - {fileID: 8191066184511708582} + - {fileID: 8191066182918326563} + - {fileID: 8191066183517911095} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8191903532335653024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8191903532335653025} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4bb2bb36bb51d452ab58d30a868dfab3, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxEnvironmentSteps: 5000 + areaBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + ground: {fileID: 8190313173186827939} + area: {fileID: 8191903532335653025} + AgentsList: + - Agent: {fileID: 8190299122290044756} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 8695281997955662810} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 9115291448867436587} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + BlocksList: + - T: {fileID: 8188518438377222649} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - T: {fileID: 8191066184649639636} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - T: {fileID: 8191066184511708582} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - T: {fileID: 8191066182918326563} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - T: {fileID: 8191066183517911095} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - T: {fileID: 8191066182861978102} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + UseRandomAgentRotation: 1 + UseRandomAgentPosition: 1 + UseRandomBlockRotation: 1 + UseRandomBlockPosition: 1 +--- !u!1 &8821353056066081524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7001930324978731751} + - component: {fileID: 5027800745357892573} + - component: {fileID: 846721119736408178} + m_Layer: 0 + m_Name: Canvas (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7001930324978731751 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8821353056066081524} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.0033333334, y: 0.013333334, z: 0.0033333334} + m_Children: + - {fileID: 492354252010942213} + m_Father: {fileID: 8191066184511708582} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5027800745357892573 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8821353056066081524} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &846721119736408178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8821353056066081524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1001 &6067781793364901444 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 8188317207052398481} + m_Modifications: + - target: {fileID: 1548337883655231979, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_RootReference + value: + objectReference: {fileID: 8190299122290044757} + - target: {fileID: 1548337883655231979, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_AgentGameObject + value: + objectReference: {fileID: 8190299122290044757} + - target: {fileID: 2598450485826216109, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Model + value: + objectReference: {fileID: 5022602860645237092, guid: c3aafa29d87154882bcb52488c6446ec, + type: 3} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.59 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.z + value: 9.21 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2710286047221272849, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Name + value: PushBlockAgentGridCollab + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 2709359580712052712, guid: ac01d0f42c5e1463e943632a60d99967, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: ac01d0f42c5e1463e943632a60d99967, type: 3} +--- !u!114 &8190299122290044756 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2710286047221272848, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6067781793364901444} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190299122290044757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d94a85eca2e074578943301959c555ba, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &8188215278053101651 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6067781793364901444} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8190299122290044757 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2710286047221272849, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6067781793364901444} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6565363751102736699 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 8188317207052398481} + m_Modifications: + - target: {fileID: 1548337883655231979, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_RootReference + value: + objectReference: {fileID: 9115291448867436586} + - target: {fileID: 1548337883655231979, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_AgentGameObject + value: + objectReference: {fileID: 9115291448867436586} + - target: {fileID: 2598450485826216109, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Model + value: + objectReference: {fileID: 5022602860645237092, guid: c3aafa29d87154882bcb52488c6446ec, + type: 3} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.x + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.59 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.z + value: 9.21 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2710286047221272849, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Name + value: PushBlockAgentGridCollab (2) + objectReference: {fileID: 0} + - target: {fileID: 2722559815055317611, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_RemovedComponents: + - {fileID: 2709359580712052712, guid: ac01d0f42c5e1463e943632a60d99967, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: ac01d0f42c5e1463e943632a60d99967, type: 3} +--- !u!114 &9115291448867436587 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2710286047221272848, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6565363751102736699} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9115291448867436586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d94a85eca2e074578943301959c555ba, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &9118573765073340204 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6565363751102736699} + m_PrefabAsset: {fileID: 0} +--- !u!1 &9115291448867436586 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2710286047221272849, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6565363751102736699} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6716844123244810954 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 8188317207052398481} + m_Modifications: + - target: {fileID: 1548337883655231979, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_RootReference + value: + objectReference: {fileID: 8695281997955662811} + - target: {fileID: 1548337883655231979, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_AgentGameObject + value: + objectReference: {fileID: 8695281997955662811} + - target: {fileID: 2598450485826216109, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Model + value: + objectReference: {fileID: 5022602860645237092, guid: c3aafa29d87154882bcb52488c6446ec, + type: 3} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.x + value: -5 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.59 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalPosition.z + value: 9.21 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2710286047221272849, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Name + value: PushBlockAgentGridCollab (1) + objectReference: {fileID: 0} + - target: {fileID: 2722559815055317611, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 52eab8ab5010f438fab93da85735ba1d, type: 2} + m_RemovedComponents: + - {fileID: 2709359580712052712, guid: ac01d0f42c5e1463e943632a60d99967, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: ac01d0f42c5e1463e943632a60d99967, type: 3} +--- !u!114 &8695281997955662810 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2710286047221272848, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6716844123244810954} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8695281997955662811} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d94a85eca2e074578943301959c555ba, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &8692073903331065053 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2708762399863795223, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6716844123244810954} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8695281997955662811 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2710286047221272849, guid: ac01d0f42c5e1463e943632a60d99967, + type: 3} + m_PrefabInstance: {fileID: 6716844123244810954} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabAreaGrid.prefab.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabAreaGrid.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..ff6503e718af4b661191a252f9a9a62c2278b3bf --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabAreaGrid.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f5bbed44a6ea747a687fbbb738eb1730 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scenes.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..cf5cc0deaa9f8aceb9de52ac06ba52fedb09d10b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9da26ec059778432080bf5fa24374960 +folderAsset: yes +timeCreated: 1516234013 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity new file mode 100644 index 0000000000000000000000000000000000000000..7b3df040ed7dec758f20ac66c8ad30f4dfc4c8bc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity @@ -0,0 +1,2148 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &27517621 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (25) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -88.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 31 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &93274645 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (13) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 120.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &93659120 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (22) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -169.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 28 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &117714360 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (6) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 80.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &151212168 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (2) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &269719766 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (17) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -129.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 23 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &290797129 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (9) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &331588493 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (24) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -48.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 30 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &367846540 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (20) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -88.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 26 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &465433533 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (21) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -169.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 27 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &502449554 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &599758006 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (14) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 80.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 20 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &756777950 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (15) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 120.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 21 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &801952036 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (3) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &837838556 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (11) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &880015598 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (27) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -129.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 33 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &953978259 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (23) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -129.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 29 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: SingleCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 20, z: -15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 56.2 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1071359087 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (5) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 120.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1082394721 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (12) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1132899702 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (7) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 120.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1219189551 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (28) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -48.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 34 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1233146807 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (19) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -88.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 25 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1346870413 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (30) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -88.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 36 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1370013558 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1488759065 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (26) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -48.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 32 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1498884709 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (4) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 80.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236050} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: PushBlockSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 2.5 + monitorVerticalOffset: 0 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 3 + agentRotationSpeed: 15 + spawnAreaMarginMultiplier: 0.5 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} +--- !u!1001 &1646905052 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (16) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -169.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 22 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1656188477 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (29) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -129.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 35 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1690808296 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (18) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -169.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 24 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1783815898 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (31) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: -48.799995 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 122.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 37 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1805215003 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (1) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1848987248 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (10) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} +--- !u!1001 &1900462655 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &1903354626 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_Name + value: Area (8) + objectReference: {fileID: 0} + - target: {fileID: 1125452240183160, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.x + value: 80.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalPosition.z + value: 82.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 03bcc81e249714a22bb411dddcc5d15e, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..7c3ed4f2a1e2706a8e1c0ea194dd0ff3fe9f06f8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae8cc75939e3e4d07a79c8c6a08b54f4 +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity new file mode 100644 index 0000000000000000000000000000000000000000..7450774ee44bb1a0b08a78b145cf8b7bb8780944 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity @@ -0,0 +1,885 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &502449554 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: SingleCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 20, z: -15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 56.2 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1264586496 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.y + value: -23.7 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8191903532335653025, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_Name + value: PushBlockCollabAreaGrid (3) + objectReference: {fileID: 0} + - target: {fileID: 8191903532335653025, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f5bbed44a6ea747a687fbbb738eb1730, type: 3} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1360124071 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.y + value: -7.7 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8191903532335653025, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_Name + value: PushBlockCollabAreaGrid (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f5bbed44a6ea747a687fbbb738eb1730, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236050} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: PushBlockSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1.5 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 3 + agentRotationSpeed: 15 + spawnAreaMarginMultiplier: 0.5 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} +--- !u!1001 &1849796285 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.y + value: -16 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8191903532335653025, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_Name + value: PushBlockCollabAreaGrid (2) + objectReference: {fileID: 0} + - target: {fileID: 8191903532335653025, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f5bbed44a6ea747a687fbbb738eb1730, type: 3} +--- !u!1001 &1900462655 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &8191066183554171055 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4704531522807670703, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_ShowGizmos + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8188317207052398481, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8191903532335653025, guid: f5bbed44a6ea747a687fbbb738eb1730, + type: 3} + propertyPath: m_Name + value: PushBlockCollabAreaGrid + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f5bbed44a6ea747a687fbbb738eb1730, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..2d48a30f1cb0188e15000be4105fe041b2365f22 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b9c81cbb0f0ac40649eddfef0971e81b +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..bf0ed0852bb5e7d712fa10097ea514303b083a90 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ca44e3d53154a4ff0a1279be30b23bdf +folderAsset: yes +timeCreated: 1514922284 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetect.cs b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetect.cs new file mode 100644 index 0000000000000000000000000000000000000000..77193fefee50032251023e27da3f118073fb6d9e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetect.cs @@ -0,0 +1,26 @@ +//Detect when the orange block has touched the goal. +//Detect when the orange block has touched an obstacle. +//Put this script onto the orange block. There's nothing you need to set in the editor. +//Make sure the goal is tagged with "goal" in the editor. + +using UnityEngine; + +public class GoalDetect : MonoBehaviour +{ + /// + /// The associated agent. + /// This will be set by the agent script on Initialization. + /// Don't need to manually set. + /// + [HideInInspector] + public PushAgentBasic agent; // + + void OnCollisionEnter(Collision col) + { + // Touched goal. + if (col.gameObject.CompareTag("goal")) + { + agent.ScoredAGoal(); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetect.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetect.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..45ae4f861c5afe580e5abc35db1761811e0ed2a3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetect.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7d079d09ceed84ff49cf6841c66cf7ec +timeCreated: 1513645763 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs new file mode 100644 index 0000000000000000000000000000000000000000..baa5efe75a2c87b9f398e142cf5d35b487788b91 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using UnityEngine.Events; + +public class GoalDetectTrigger : MonoBehaviour +{ + + [Header("Trigger Collider Tag To Detect")] + public string tagToDetect = "goal"; //collider tag to detect + + [Header("Goal Value")] + public float GoalValue = 1; + + private Collider m_col; + [System.Serializable] + public class TriggerEvent : UnityEvent + { + } + + [Header("Trigger Callbacks")] + public TriggerEvent onTriggerEnterEvent = new TriggerEvent(); + public TriggerEvent onTriggerStayEvent = new TriggerEvent(); + public TriggerEvent onTriggerExitEvent = new TriggerEvent(); + + private void OnTriggerEnter(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerEnterEvent.Invoke(m_col, GoalValue); + } + } + + private void OnTriggerStay(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerStayEvent.Invoke(m_col, GoalValue); + } + } + + private void OnTriggerExit(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerExitEvent.Invoke(m_col, GoalValue); + } + } + // Start is called before the first frame update + void Awake() + { + m_col = GetComponent(); + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..11568fc0e6e60be8e8f66aebec2d3fb997d1b555 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9dcea692df32b46b4a884cfcc150aef7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs new file mode 100644 index 0000000000000000000000000000000000000000..8613c3eabde45b23d579641fd20b4ec06289607d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs @@ -0,0 +1,255 @@ +//Put this script on your blue cube. + +using System.Collections; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; + +public class PushAgentBasic : Agent +{ + /// + /// The ground. The bounds are used to spawn the elements. + /// + public GameObject ground; + + public GameObject area; + + /// + /// The area bounds. + /// + [HideInInspector] + public Bounds areaBounds; + + PushBlockSettings m_PushBlockSettings; + + /// + /// The goal to push the block to. + /// + public GameObject goal; + + /// + /// The block to be pushed to the goal. + /// + public GameObject block; + + /// + /// Detects when the block touches the goal. + /// + [HideInInspector] + public GoalDetect goalDetect; + + public bool useVectorObs; + + Rigidbody m_BlockRb; //cached on initialization + Rigidbody m_AgentRb; //cached on initialization + Material m_GroundMaterial; //cached on Awake() + + /// + /// We will be changing the ground material based on success/failue + /// + Renderer m_GroundRenderer; + + EnvironmentParameters m_ResetParams; + + protected override void Awake() + { + base.Awake(); + m_PushBlockSettings = FindObjectOfType(); + } + + public override void Initialize() + { + goalDetect = block.GetComponent(); + goalDetect.agent = this; + + // Cache the agent rigidbody + m_AgentRb = GetComponent(); + // Cache the block rigidbody + m_BlockRb = block.GetComponent(); + // Get the ground's bounds + areaBounds = ground.GetComponent().bounds; + // Get the ground renderer so we can change the material when a goal is scored + m_GroundRenderer = ground.GetComponent(); + // Starting material + m_GroundMaterial = m_GroundRenderer.material; + + m_ResetParams = Academy.Instance.EnvironmentParameters; + + SetResetParameters(); + } + + /// + /// Use the ground's bounds to pick a random spawn position. + /// + public Vector3 GetRandomSpawnPos() + { + var foundNewSpawnLocation = false; + var randomSpawnPos = Vector3.zero; + while (foundNewSpawnLocation == false) + { + var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier); + + var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier); + randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ); + if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false) + { + foundNewSpawnLocation = true; + } + } + return randomSpawnPos; + } + + /// + /// Called when the agent moves the block into the goal. + /// + public void ScoredAGoal() + { + // We use a reward of 5. + AddReward(5f); + + // By marking an agent as done AgentReset() will be called automatically. + EndEpisode(); + + // Swap ground material for a bit to indicate we scored. + StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f)); + } + + /// + /// Swap ground material, wait time seconds, then swap back to the regular material. + /// + IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time) + { + m_GroundRenderer.material = mat; + yield return new WaitForSeconds(time); // Wait for 2 sec + m_GroundRenderer.material = m_GroundMaterial; + } + + /// + /// Moves the agent according to the selected action. + /// + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var action = act[0]; + + switch (action) + { + case 1: + dirToGo = transform.forward * 1f; + break; + case 2: + dirToGo = transform.forward * -1f; + break; + case 3: + rotateDir = transform.up * 1f; + break; + case 4: + rotateDir = transform.up * -1f; + break; + case 5: + dirToGo = transform.right * -0.75f; + break; + case 6: + dirToGo = transform.right * 0.75f; + break; + } + transform.Rotate(rotateDir, Time.fixedDeltaTime * 200f); + m_AgentRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed, + ForceMode.VelocityChange); + } + + /// + /// Called every step of the engine. Here the agent takes an action. + /// + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + // Move the agent using the action. + MoveAgent(actionBuffers.DiscreteActions); + + // Penalty given each step to encourage agent to finish task quickly. + AddReward(-1f / MaxStep); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[0] = 3; + } + else if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + else if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[0] = 4; + } + else if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + } + + /// + /// Resets the block position and velocities. + /// + void ResetBlock() + { + // Get a random position for the block. + block.transform.position = GetRandomSpawnPos(); + + // Reset block velocity back to zero. + m_BlockRb.velocity = Vector3.zero; + + // Reset block angularVelocity back to zero. + m_BlockRb.angularVelocity = Vector3.zero; + } + + /// + /// In the editor, if "Reset On Done" is checked then AgentReset() will be + /// called automatically anytime we mark done = true in an agent script. + /// + public override void OnEpisodeBegin() + { + var rotation = Random.Range(0, 4); + var rotationAngle = rotation * 90f; + area.transform.Rotate(new Vector3(0f, rotationAngle, 0f)); + + ResetBlock(); + transform.position = GetRandomSpawnPos(); + m_AgentRb.velocity = Vector3.zero; + m_AgentRb.angularVelocity = Vector3.zero; + + SetResetParameters(); + } + + public void SetGroundMaterialFriction() + { + var groundCollider = ground.GetComponent(); + + groundCollider.material.dynamicFriction = m_ResetParams.GetWithDefault("dynamic_friction", 0); + groundCollider.material.staticFriction = m_ResetParams.GetWithDefault("static_friction", 0); + } + + public void SetBlockProperties() + { + var scale = m_ResetParams.GetWithDefault("block_scale", 2); + //Set the scale of the block + m_BlockRb.transform.localScale = new Vector3(scale, 0.75f, scale); + + // Set the drag of the block + m_BlockRb.drag = m_ResetParams.GetWithDefault("block_drag", 0.5f); + } + + void SetResetParameters() + { + SetGroundMaterialFriction(); + SetBlockProperties(); + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cfdc094962b7ec971778347f36607b573acd7963 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dea8c4f2604b947e6b7b97750dde87ca +timeCreated: 1506829537 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs new file mode 100644 index 0000000000000000000000000000000000000000..2d4eec1c1de9150b0d1538cf29e1cf5b720c06d4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs @@ -0,0 +1,90 @@ +//Put this script on your blue cube. +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; + +public class PushAgentCollab : Agent +{ + + private PushBlockSettings m_PushBlockSettings; + private Rigidbody m_AgentRb; //cached on initialization + + protected override void Awake() + { + base.Awake(); + m_PushBlockSettings = FindObjectOfType(); + } + + public override void Initialize() + { + // Cache the agent rb + m_AgentRb = GetComponent(); + } + + /// + /// Moves the agent according to the selected action. + /// + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var action = act[0]; + + switch (action) + { + case 1: + dirToGo = transform.forward * 1f; + break; + case 2: + dirToGo = transform.forward * -1f; + break; + case 3: + rotateDir = transform.up * 1f; + break; + case 4: + rotateDir = transform.up * -1f; + break; + case 5: + dirToGo = transform.right * -0.75f; + break; + case 6: + dirToGo = transform.right * 0.75f; + break; + } + transform.Rotate(rotateDir, Time.fixedDeltaTime * 200f); + m_AgentRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed, + ForceMode.VelocityChange); + } + + /// + /// Called every step of the engine. Here the agent takes an action. + /// + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + // Move the agent using the action. + MoveAgent(actionBuffers.DiscreteActions); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[0] = 3; + } + else if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + else if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[0] = 4; + } + else if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..921951249f0446ad3604e135696f0fb460855994 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d94a85eca2e074578943301959c555ba +timeCreated: 1506829537 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs new file mode 100644 index 0000000000000000000000000000000000000000..1b4634820ff559c1f3a1a0086821c708b4eb6d9b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs @@ -0,0 +1,234 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.MLAgents; +using UnityEngine; + +public class PushBlockEnvController : MonoBehaviour +{ + [System.Serializable] + public class PlayerInfo + { + public PushAgentCollab Agent; + [HideInInspector] + public Vector3 StartingPos; + [HideInInspector] + public Quaternion StartingRot; + [HideInInspector] + public Rigidbody Rb; + } + + [System.Serializable] + public class BlockInfo + { + public Transform T; + [HideInInspector] + public Vector3 StartingPos; + [HideInInspector] + public Quaternion StartingRot; + [HideInInspector] + public Rigidbody Rb; + } + + /// + /// Max Academy steps before this platform resets + /// + /// + [Header("Max Environment Steps")] public int MaxEnvironmentSteps = 25000; + + /// + /// The area bounds. + /// + [HideInInspector] + public Bounds areaBounds; + /// + /// The ground. The bounds are used to spawn the elements. + /// + public GameObject ground; + + public GameObject area; + + Material m_GroundMaterial; //cached on Awake() + + /// + /// We will be changing the ground material based on success/failue + /// + Renderer m_GroundRenderer; + + //List of Agents On Platform + public List AgentsList = new List(); + //List of Blocks On Platform + public List BlocksList = new List(); + + public bool UseRandomAgentRotation = true; + public bool UseRandomAgentPosition = true; + public bool UseRandomBlockRotation = true; + public bool UseRandomBlockPosition = true; + private PushBlockSettings m_PushBlockSettings; + + private int m_NumberOfRemainingBlocks; + + private SimpleMultiAgentGroup m_AgentGroup; + + private int m_ResetTimer; + + void Start() + { + + // Get the ground's bounds + areaBounds = ground.GetComponent().bounds; + // Get the ground renderer so we can change the material when a goal is scored + m_GroundRenderer = ground.GetComponent(); + // Starting material + m_GroundMaterial = m_GroundRenderer.material; + m_PushBlockSettings = FindObjectOfType(); + // Initialize Blocks + foreach (var item in BlocksList) + { + item.StartingPos = item.T.transform.position; + item.StartingRot = item.T.transform.rotation; + item.Rb = item.T.GetComponent(); + } + // Initialize TeamManager + m_AgentGroup = new SimpleMultiAgentGroup(); + foreach (var item in AgentsList) + { + item.StartingPos = item.Agent.transform.position; + item.StartingRot = item.Agent.transform.rotation; + item.Rb = item.Agent.GetComponent(); + m_AgentGroup.RegisterAgent(item.Agent); + } + ResetScene(); + } + + void FixedUpdate() + { + m_ResetTimer += 1; + if (m_ResetTimer >= MaxEnvironmentSteps && MaxEnvironmentSteps > 0) + { + m_AgentGroup.GroupEpisodeInterrupted(); + ResetScene(); + } + + //Hurry Up Penalty + m_AgentGroup.AddGroupReward(-0.5f / MaxEnvironmentSteps); + } + + /// + /// Use the ground's bounds to pick a random spawn position. + /// + public Vector3 GetRandomSpawnPos() + { + var foundNewSpawnLocation = false; + var randomSpawnPos = Vector3.zero; + while (foundNewSpawnLocation == false) + { + var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier); + + var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier); + randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ); + if (Physics.CheckBox(randomSpawnPos, new Vector3(1.5f, 0.01f, 1.5f)) == false) + { + foundNewSpawnLocation = true; + } + } + return randomSpawnPos; + } + + /// + /// Resets the block position and velocities. + /// + void ResetBlock(BlockInfo block) + { + // Get a random position for the block. + block.T.position = GetRandomSpawnPos(); + + // Reset block velocity back to zero. + block.Rb.velocity = Vector3.zero; + + // Reset block angularVelocity back to zero. + block.Rb.angularVelocity = Vector3.zero; + } + + /// + /// Swap ground material, wait time seconds, then swap back to the regular material. + /// + IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time) + { + m_GroundRenderer.material = mat; + yield return new WaitForSeconds(time); // Wait for 2 sec + m_GroundRenderer.material = m_GroundMaterial; + } + + /// + /// Called when the agent moves the block into the goal. + /// + public void ScoredAGoal(Collider col, float score) + { + print($"Scored {score} on {gameObject.name}"); + + //Decrement the counter + m_NumberOfRemainingBlocks--; + + //Are we done? + bool done = m_NumberOfRemainingBlocks == 0; + + //Disable the block + col.gameObject.SetActive(false); + + //Give Agent Rewards + m_AgentGroup.AddGroupReward(score); + + // Swap ground material for a bit to indicate we scored. + StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f)); + + if (done) + { + //Reset assets + m_AgentGroup.EndGroupEpisode(); + ResetScene(); + } + } + + Quaternion GetRandomRot() + { + return Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0); + } + + public void ResetScene() + { + m_ResetTimer = 0; + + //Random platform rotation + var rotation = Random.Range(0, 4); + var rotationAngle = rotation * 90f; + area.transform.Rotate(new Vector3(0f, rotationAngle, 0f)); + + //Reset Agents + foreach (var item in AgentsList) + { + var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos; + var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot; + + item.Agent.transform.SetPositionAndRotation(pos, rot); + item.Rb.velocity = Vector3.zero; + item.Rb.angularVelocity = Vector3.zero; + } + + //Reset Blocks + foreach (var item in BlocksList) + { + var pos = UseRandomBlockPosition ? GetRandomSpawnPos() : item.StartingPos; + var rot = UseRandomBlockRotation ? GetRandomRot() : item.StartingRot; + + item.T.transform.SetPositionAndRotation(pos, rot); + item.Rb.velocity = Vector3.zero; + item.Rb.angularVelocity = Vector3.zero; + item.T.gameObject.SetActive(true); + } + + //Reset counter + m_NumberOfRemainingBlocks = BlocksList.Count; + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d6c671f7a1ee669544a0409c452a6c18efd972b7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bb2bb36bb51d452ab58d30a868dfab3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockSettings.cs b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..29f5c974b8c4424153a1cf7feea475027a4b7bb4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockSettings.cs @@ -0,0 +1,35 @@ +using UnityEngine; + +public class PushBlockSettings : MonoBehaviour +{ + /// + /// The "walking speed" of the agents in the scene. + /// + public float agentRunSpeed; + + /// + /// The agent rotation speed. + /// Every agent will use this setting. + /// + public float agentRotationSpeed; + + /// + /// The spawn area margin multiplier. + /// ex: .9 means 90% of spawn area will be used. + /// .1 margin will be left (so players don't spawn off of the edge). + /// The higher this value, the longer training time required. + /// + public float spawnAreaMarginMultiplier; + + /// + /// When a goal is scored the ground will switch to this + /// material for a few seconds. + /// + public Material goalScoredMaterial; + + /// + /// When an agent fails, the ground will turn this material for a few seconds. + /// + public Material failMaterial; + +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockSettings.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..db03398d1caf9b78621a76f958c26ac81b171090 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5ed63dbfa25542ecb8bc013adfba183 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/TFModels.meta b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..4c806d807695f675e42fe336cb7489a5b89a5a39 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5855121f0ded74dad8e1dd15a8bcdca1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlock.nn b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlock.nn new file mode 100644 index 0000000000000000000000000000000000000000..b2407601128e0d3d35f56aee33cdcb00152e82b9 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlock.nn differ diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlock.nn.meta b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlock.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..162b929ed361503a0c46eed3d033e1aaf0473664 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlock.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70db47ab276e44fe0beb677ff8d69382 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx new file mode 100644 index 0000000000000000000000000000000000000000..31c7d496c8b2823cf9c3c0709d0dbf1cd4a6eeb9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3e74ee9c7bd58a55f3822d9d77c7754c8f277283a1cec3354b79568155056a1 +size 638530 diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..7bdc4af987bcfc01fc0c5f710b71954afc180af5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: c3aafa29d87154882bcb52488c6446ec +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput.meta new file mode 100644 index 0000000000000000000000000000000000000000..37c7331e1353583c95b3896501f0c99c10cba886 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e396da2b7dbae4365a9fbd6cf999c9bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..46bd003f89e9647dbf4cabe12c45cc83f8371ef3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 99d8483ab96df49fc8909b8d974499e1 +folderAsset: yes +timeCreated: 1514922259 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs/PushBlockWithInputArea.prefab b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs/PushBlockWithInputArea.prefab new file mode 100644 index 0000000000000000000000000000000000000000..79e323ac4363e90205246d08f045177e02d17a70 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs/PushBlockWithInputArea.prefab @@ -0,0 +1,1224 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1058115561937900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4799209171944556} + - component: {fileID: 33372756098612312} + - component: {fileID: 23425474254155940} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4799209171944556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058115561937900} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33372756098612312 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058115561937900} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23425474254155940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058115561937900} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1125452240183160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4006990431719496} + m_Layer: 0 + m_Name: PushBlockWithInputArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4006990431719496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125452240183160} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4188187884171146} + - {fileID: 4228459933126600} + - {fileID: 4643236529171504} + - {fileID: 4662886693952972} + - {fileID: 4491958117158432} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1257458296368784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4544987641442146} + - component: {fileID: 33329158164785646} + - component: {fileID: 23060698592861174} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4544987641442146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257458296368784} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4693470752376230} + - {fileID: 4510816898360128} + - {fileID: 4885544221206768} + - {fileID: 4799209171944556} + - {fileID: 4744579300537096} + m_Father: {fileID: 4188187884171146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33329158164785646 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257458296368784} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23060698592861174 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257458296368784} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1441513772919942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4228459933126600} + - component: {fileID: 33257578884602618} + - component: {fileID: 23824899148377476} + - component: {fileID: 65797106708039188} + m_Layer: 0 + m_Name: Goal + m_TagString: goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4228459933126600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.03, z: -10.5} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.010748733} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33257578884602618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_Mesh: {fileID: 4300004, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &23824899148377476 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65797106708039188 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441513772919942} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 300, z: 400} + m_Center: {x: 0, y: 2.5, z: 0} +--- !u!1 &1461267750064770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4510816898360128} + - component: {fileID: 33894909717767508} + - component: {fileID: 23501817194256018} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4510816898360128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461267750064770} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33894909717767508 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461267750064770} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23501817194256018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461267750064770} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1489716781518988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188187884171146} + - component: {fileID: 54817351390947638} + - component: {fileID: 114306175693660464} + - component: {fileID: 1929062229609328833} + - component: {fileID: 65880096262939968} + - component: {fileID: 114807072692257076} + - component: {fileID: 114451319691753174} + - component: {fileID: 8964598783836598940} + - component: {fileID: 4081319787948195948} + - component: {fileID: 572751784} + - component: {fileID: 572751783} + - component: {fileID: 6641003793403090299} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188187884171146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4544987641442146} + m_Father: {fileID: 4006990431719496} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &54817351390947638 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 4 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114306175693660464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 2 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: + VectorActionSize: + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: bee50ae7fd03e4e16a4ac45db4d96f6e, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: PushBlock + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &1929062229609328833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 925dd654260d9400ea7c46c3fccbc885, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + ground: {fileID: 1500989011945850} + area: {fileID: 1125452240183160} + areaBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + block: {fileID: 1831337770648600} + goalDetect: {fileID: 0} +--- !u!65 &65880096262939968 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114807072692257076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: + - block + - goal + - wall + m_RaysPerDirection: 3 + m_MaxRayDegrees: 90 + m_SphereCastRadius: 0.5 + m_RayLength: 12 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!114 &114451319691753174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: OffsetRayPerceptionSensor + m_DetectableTags: + - block + - goal + - wall + m_RaysPerDirection: 3 + m_MaxRayDegrees: 90 + m_SphereCastRadius: 0.5 + m_RayLength: 12 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 1.5 + m_EndVerticalOffset: 1.5 +--- !u!114 &8964598783836598940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &4081319787948195948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &572751784 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62899f850307741f2a39c98a8b639597, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actions: {fileID: -944628639613478452, guid: fcfa5a3b2c4254b2baad1ae474fc4b93, + type: 3} + m_NotificationBehavior: 3 + m_UIInputModule: {fileID: 0} + m_DeviceLostEvent: + m_PersistentCalls: + m_Calls: [] + m_DeviceRegainedEvent: + m_PersistentCalls: + m_Calls: [] + m_ControlsChangedEvent: + m_PersistentCalls: + m_Calls: [] + m_ActionEvents: [] + m_NeverAutoSwitchControlSchemes: 0 + m_DefaultControlScheme: + m_DefaultActionMap: Movement + m_SplitScreenIndex: -1 + m_Camera: {fileID: 0} +--- !u!114 &572751783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 33005b124d7f841a191249baf2bacb2a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ActionSpec: + m_NumContinuousActions: 2 + BranchSizes: 02000000 +--- !u!114 &6641003793403090299 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489716781518988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb9a2d951ffa44f53ba04a31f2712f5f, type: 3} + m_Name: + m_EditorClassIdentifier: + JumpTime: 0.5 +--- !u!1 &1500989011945850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4643236529171504} + - component: {fileID: 33737551691836984} + - component: {fileID: 23549423015434358} + - component: {fileID: 65513349759460256} + m_Layer: 0 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4643236529171504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.00000030517577} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33737551691836984 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_Mesh: {fileID: 4300002, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &23549423015434358 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65513349759460256 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500989011945850} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 100, z: 2500} + m_Center: {x: 0, y: -50, z: 0} +--- !u!1 &1587735394719530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4744579300537096} + - component: {fileID: 33895795138265702} + - component: {fileID: 23899848265046434} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4744579300537096 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587735394719530} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33895795138265702 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587735394719530} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23899848265046434 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1587735394719530} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1724888327628444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4693470752376230} + - component: {fileID: 20603941467042180} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4693470752376230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1724888327628444} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20603941467042180 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1724888327628444} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1831337770648600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4491958117158432} + - component: {fileID: 33211910135534124} + - component: {fileID: 65500237382738106} + - component: {fileID: 23965303024756010} + - component: {fileID: 54485094479975724} + - component: {fileID: 4489253887773211256} + m_Layer: 0 + m_Name: Block + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4491958117158432 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2, y: 1, z: -1.43} + m_LocalScale: {x: 2, y: 0.75, z: 2} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33211910135534124 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65500237382738106 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23965303024756010 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &54485094479975724 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.5 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &4489253887773211256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831337770648600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec55820c897dd4f41904e8c43085f56b, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} +--- !u!1 &1948183181472910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4662886693952972} + - component: {fileID: 33923598962272346} + - component: {fileID: 23386727129662884} + - component: {fileID: 65537431973827738} + - component: {fileID: 65603921567931242} + - component: {fileID: 65701990377179520} + - component: {fileID: 65220627410631168} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4662886693952972 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.16, z: 0.01} + m_Children: [] + m_Father: {fileID: 4006990431719496} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33923598962272346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Mesh: {fileID: 4300000, guid: c639386c12f5f7841892163a199dfacc, type: 3} +--- !u!23 &23386727129662884 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65537431973827738 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 200, z: 2600} + m_Center: {x: -1275, y: 50, z: 0} +--- !u!65 &65603921567931242 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 200, z: 2600} + m_Center: {x: 1275, y: 50, z: 0} +--- !u!65 &65701990377179520 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 200, z: 50} + m_Center: {x: 0, y: 50, z: -1275} +--- !u!65 &65220627410631168 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948183181472910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2500, y: 200, z: 50} + m_Center: {x: 0, y: 50, z: 1275} +--- !u!1 &1998092687759860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4885544221206768} + - component: {fileID: 33708290946592760} + - component: {fileID: 23666927211414522} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4885544221206768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998092687759860} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4544987641442146} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33708290946592760 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998092687759860} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23666927211414522 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998092687759860} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs/PushBlockWithInputArea.prefab.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs/PushBlockWithInputArea.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..fd18e5af14854858bf9e8e7613e43cc02f7a937b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Prefabs/PushBlockWithInputArea.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 63400cd020a2d4610832abc15d5adf68 +timeCreated: 1515023875 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions new file mode 100644 index 0000000000000000000000000000000000000000..1ec293828fe3caeaeb6d827aaf29a27540ffa10c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions @@ -0,0 +1,179 @@ +{ + "name": "PushBlockActions", + "maps": [ + { + "name": "Movement", + "id": "03a2e5d4-ae81-47f1-a575-0779fb7da538", + "actions": [ + { + "name": "movement", + "type": "Value", + "id": "5f47cbc6-de46-4d33-93e2-2b1af4f5996d", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "" + }, + { + "name": "jump", + "type": "Button", + "id": "ca5eb833-5dfb-4b7c-880d-6118bd5d1378", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + } + ], + "bindings": [ + { + "name": "gamepad_move", + "id": "477500ef-6d32-4b84-b9f8-158f18bcb906", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "movement", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "6d2537b8-2266-4a50-8575-fb0fe310daa5", + "path": "/dpad/up", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "50584c83-beb6-4e90-a453-a635c03a761e", + "path": "/dpad/down", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "44408b8f-27e7-4c6d-b078-7536ba020d1a", + "path": "/dpad/left", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "f5681423-d3e3-41a5-b85e-0a7642c774aa", + "path": "/dpad/right", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "keyboard_move", + "id": "6bcba4bf-5ce0-4005-9e6a-0de2487211b0", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "movement", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "63da699e-b354-4e63-b0f8-26fb92abea41", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "39409748-9002-4aff-9a09-cdc05b9708ad", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "0afe45fc-dc45-4310-9c73-7dc3c503addf", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "69fe0335-9e0c-495d-a90d-4b0fcbfd2b34", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "movement", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "ab696218-63cd-4eb8-9fe1-48a68e32e92f", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "7adcb138-5175-4cc4-addc-d2b02cb5f0de", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Keyboard", + "action": "jump", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard", + "bindingGroup": "Keyboard", + "devices": [ + { + "devicePath": "", + "isOptional": true, + "isOR": false + }, + { + "devicePath": "", + "isOptional": true, + "isOR": false + } + ] + } + ] +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions.meta new file mode 100644 index 0000000000000000000000000000000000000000..c315e9e98af7af30d8a0033548aa0156fd9a60fa --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: fcfa5a3b2c4254b2baad1ae474fc4b93 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 1 + wrapperCodePath: Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs + wrapperClassName: + wrapperCodeNamespace: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..4e280ac3d62d5bf3b4da35f0f7b8658d32389873 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4655b85b9047b42e0b35f79c9245b65a +folderAsset: yes +timeCreated: 1516234013 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes/PushBlockWithInput.unity b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes/PushBlockWithInput.unity new file mode 100644 index 0000000000000000000000000000000000000000..5aa492a7ec1d0896258c62f680ad750f4acb0f08 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes/PushBlockWithInput.unity @@ -0,0 +1,2354 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &104133188 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (21) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 34 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 244.70258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &159455470 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 1.3974304 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &165476799 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (24) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 244.70258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &166723316 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (28) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 33 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 209.7 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &299908479 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (22) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 32 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 209.7 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &401661859 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (10) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 1.3974304 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &502449554 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &561748165 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (3) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 70.89743 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &567127400 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (2) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 105.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &568030980 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (9) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 70.89743 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &685901400 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (25) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 27 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 175.20258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &702805382 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (19) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 26 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 244.70258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &748151154 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (4) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 36.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &829380897 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (18) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 28 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 140.2 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &868224222 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (8) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 36.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &890557095 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (7) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 105.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &928618096 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (11) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 105.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: SingleCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 44.33, z: -13.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 56.2 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1193060918 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (13) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 105.9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1304623799 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (1) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 36.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1426394792 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (26) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 209.7 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1447408023 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (15) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 70.89743 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236048} + - component: {fileID: 1574236050} + m_Layer: 0 + m_Name: PushBlockSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81aead8ba5af44598b1b5296780e489e, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 3 + agentRotationSpeed: 15 + agentJumpForce: 20 + agentJumpCoolDown: 3 + spawnAreaMarginMultiplier: 0.5 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 2.5 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!1001 &1588007099 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (12) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 1.3974304 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1642417296 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (30) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 31 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 244.70258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1741726243 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (23) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 21 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 140.2 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1838323585 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (6) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 1.3974304 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1843826612 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (5) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 70.89743 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -32.3 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1900462655 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &1905642295 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (17) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 24 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 209.7 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1942643667 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (16) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 22 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 175.20258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: 0.48910302 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &1949631538 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (20) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 36 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 140.2 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &2056614411 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (27) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 35 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 175.20258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -64.6 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &2070707450 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (29) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 175.20258 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &2080978140 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (14) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 36.4 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} +--- !u!1001 &2141464029 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1125452240183160, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_Name + value: PushBlockWithInputArea (31) + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_RootOrder + value: 29 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.x + value: 140.2 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.y + value: 26.699219 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalPosition.z + value: -97.3891 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006990431719496, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 63400cd020a2d4610832abc15d5adf68, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes/PushBlockWithInput.unity.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes/PushBlockWithInput.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..97811eea0895c4704afc57d4a0795cd9cc8a8901 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scenes/PushBlockWithInput.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0ba15da26c0684ac386bc3da3183d136 +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..c2ee2dd41f5cd4e7fe2b5cc65e377cc6e751bd3e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5fb02fbf46767439f8a1483bc12e80de +folderAsset: yes +timeCreated: 1514922284 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/GoalDetectWithInput.cs b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/GoalDetectWithInput.cs new file mode 100644 index 0000000000000000000000000000000000000000..9306d7ff0f05f4716f4c67ef09b0f51dd986990b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/GoalDetectWithInput.cs @@ -0,0 +1,26 @@ +//Detect when the orange block has touched the goal. +//Detect when the orange block has touched an obstacle. +//Put this script onto the orange block. There's nothing you need to set in the editor. +//Make sure the goal is tagged with "goal" in the editor. + +using UnityEngine; + +public class GoalDetectWithInput : MonoBehaviour +{ + /// + /// The associated agent. + /// This will be set by the agent script on Initialization. + /// Don't need to manually set. + /// + [HideInInspector] + public PushBlockWithInputAgentBasic agent; // + + void OnCollisionEnter(Collision col) + { + // Touched goal. + if (col.gameObject.CompareTag("goal")) + { + agent.ScoredAGoal(); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/GoalDetectWithInput.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/GoalDetectWithInput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..90f0cb49e3446fdd41c8fc15638c7d57c095f0c5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/GoalDetectWithInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec55820c897dd4f41904e8c43085f56b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs new file mode 100644 index 0000000000000000000000000000000000000000..c05997bbb968ee752feeb02bdf7c0cf5bb07b5d1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs @@ -0,0 +1,333 @@ +//------------------------------------------------------------------------------ +// +// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator +// version 1.6.1 +// from Assets/ML-Agents/Examples/PushBlockWithInput/PushBlockActions.inputactions +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Utilities; + +public partial class @PushBlockActions: IInputActionCollection2, IDisposable +{ + public InputActionAsset asset { get; } + public @PushBlockActions() + { + asset = InputActionAsset.FromJson(@"{ + ""name"": ""PushBlockActions"", + ""maps"": [ + { + ""name"": ""Movement"", + ""id"": ""03a2e5d4-ae81-47f1-a575-0779fb7da538"", + ""actions"": [ + { + ""name"": ""movement"", + ""type"": ""Value"", + ""id"": ""5f47cbc6-de46-4d33-93e2-2b1af4f5996d"", + ""expectedControlType"": ""Vector2"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": true + }, + { + ""name"": ""jump"", + ""type"": ""Button"", + ""id"": ""ca5eb833-5dfb-4b7c-880d-6118bd5d1378"", + ""expectedControlType"": ""Button"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": false + } + ], + ""bindings"": [ + { + ""name"": ""gamepad_move"", + ""id"": ""477500ef-6d32-4b84-b9f8-158f18bcb906"", + ""path"": ""2DVector"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""movement"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""6d2537b8-2266-4a50-8575-fb0fe310daa5"", + ""path"": ""/dpad/up"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""50584c83-beb6-4e90-a453-a635c03a761e"", + ""path"": ""/dpad/down"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""44408b8f-27e7-4c6d-b078-7536ba020d1a"", + ""path"": ""/dpad/left"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""f5681423-d3e3-41a5-b85e-0a7642c774aa"", + ""path"": ""/dpad/right"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""keyboard_move"", + ""id"": ""6bcba4bf-5ce0-4005-9e6a-0de2487211b0"", + ""path"": ""2DVector"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""movement"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""63da699e-b354-4e63-b0f8-26fb92abea41"", + ""path"": ""/w"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""39409748-9002-4aff-9a09-cdc05b9708ad"", + ""path"": ""/s"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""0afe45fc-dc45-4310-9c73-7dc3c503addf"", + ""path"": ""/a"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""69fe0335-9e0c-495d-a90d-4b0fcbfd2b34"", + ""path"": ""/d"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": """", + ""id"": ""ab696218-63cd-4eb8-9fe1-48a68e32e92f"", + ""path"": ""/space"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""jump"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""7adcb138-5175-4cc4-addc-d2b02cb5f0de"", + ""path"": ""/buttonSouth"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""jump"", + ""isComposite"": false, + ""isPartOfComposite"": false + } + ] + } + ], + ""controlSchemes"": [ + { + ""name"": ""Keyboard"", + ""bindingGroup"": ""Keyboard"", + ""devices"": [ + { + ""devicePath"": """", + ""isOptional"": true, + ""isOR"": false + }, + { + ""devicePath"": """", + ""isOptional"": true, + ""isOR"": false + } + ] + } + ] +}"); + // Movement + m_Movement = asset.FindActionMap("Movement", throwIfNotFound: true); + m_Movement_movement = m_Movement.FindAction("movement", throwIfNotFound: true); + m_Movement_jump = m_Movement.FindAction("jump", throwIfNotFound: true); + } + + public void Dispose() + { + UnityEngine.Object.Destroy(asset); + } + + public InputBinding? bindingMask + { + get => asset.bindingMask; + set => asset.bindingMask = value; + } + + public ReadOnlyArray? devices + { + get => asset.devices; + set => asset.devices = value; + } + + public ReadOnlyArray controlSchemes => asset.controlSchemes; + + public bool Contains(InputAction action) + { + return asset.Contains(action); + } + + public IEnumerator GetEnumerator() + { + return asset.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Enable() + { + asset.Enable(); + } + + public void Disable() + { + asset.Disable(); + } + + public IEnumerable bindings => asset.bindings; + + public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false) + { + return asset.FindAction(actionNameOrId, throwIfNotFound); + } + + public int FindBinding(InputBinding bindingMask, out InputAction action) + { + return asset.FindBinding(bindingMask, out action); + } + + // Movement + private readonly InputActionMap m_Movement; + private List m_MovementActionsCallbackInterfaces = new List(); + private readonly InputAction m_Movement_movement; + private readonly InputAction m_Movement_jump; + public struct MovementActions + { + private @PushBlockActions m_Wrapper; + public MovementActions(@PushBlockActions wrapper) { m_Wrapper = wrapper; } + public InputAction @movement => m_Wrapper.m_Movement_movement; + public InputAction @jump => m_Wrapper.m_Movement_jump; + public InputActionMap Get() { return m_Wrapper.m_Movement; } + public void Enable() { Get().Enable(); } + public void Disable() { Get().Disable(); } + public bool enabled => Get().enabled; + public static implicit operator InputActionMap(MovementActions set) { return set.Get(); } + public void AddCallbacks(IMovementActions instance) + { + if (instance == null || m_Wrapper.m_MovementActionsCallbackInterfaces.Contains(instance)) return; + m_Wrapper.m_MovementActionsCallbackInterfaces.Add(instance); + @movement.started += instance.OnMovement; + @movement.performed += instance.OnMovement; + @movement.canceled += instance.OnMovement; + @jump.started += instance.OnJump; + @jump.performed += instance.OnJump; + @jump.canceled += instance.OnJump; + } + + private void UnregisterCallbacks(IMovementActions instance) + { + @movement.started -= instance.OnMovement; + @movement.performed -= instance.OnMovement; + @movement.canceled -= instance.OnMovement; + @jump.started -= instance.OnJump; + @jump.performed -= instance.OnJump; + @jump.canceled -= instance.OnJump; + } + + public void RemoveCallbacks(IMovementActions instance) + { + if (m_Wrapper.m_MovementActionsCallbackInterfaces.Remove(instance)) + UnregisterCallbacks(instance); + } + + public void SetCallbacks(IMovementActions instance) + { + foreach (var item in m_Wrapper.m_MovementActionsCallbackInterfaces) + UnregisterCallbacks(item); + m_Wrapper.m_MovementActionsCallbackInterfaces.Clear(); + AddCallbacks(instance); + } + } + public MovementActions @Movement => new MovementActions(this); + private int m_KeyboardSchemeIndex = -1; + public InputControlScheme KeyboardScheme + { + get + { + if (m_KeyboardSchemeIndex == -1) m_KeyboardSchemeIndex = asset.FindControlSchemeIndex("Keyboard"); + return asset.controlSchemes[m_KeyboardSchemeIndex]; + } + } + public interface IMovementActions + { + void OnMovement(InputAction.CallbackContext context); + void OnJump(InputAction.CallbackContext context); + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2ae70f840ceeb927d11826ea1d02c0faea40dcc5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockActions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6f125a5c899346259be7aac2df8daa0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputAgentBasic.cs b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputAgentBasic.cs new file mode 100644 index 0000000000000000000000000000000000000000..7e54ad7a20e8a962372dfeb3d2bfb678e2dcb12f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputAgentBasic.cs @@ -0,0 +1,198 @@ +//Put this script on your blue cube. +using System.Collections; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Random = UnityEngine.Random; + +public class PushBlockWithInputAgentBasic : Agent +{ + /// + /// The ground. The bounds are used to spawn the elements. + /// + public GameObject ground; + + public GameObject area; + + /// + /// The area bounds. + /// + [HideInInspector] + public Bounds areaBounds; + + PushBlockWithInputSettings m_PushBlockSettings; + + /// + /// The block to be pushed to the goal. + /// + public GameObject block; + + /// + /// Detects when the block touches the goal. + /// + [HideInInspector] + public GoalDetectWithInput goalDetect; + + Rigidbody m_BlockRb; //cached on initialization + Rigidbody m_AgentRb; //cached on initialization + Material m_GroundMaterial; //cached on Awake() + + /// + /// We will be changing the ground material based on success/failue + /// + Renderer m_GroundRenderer; + + EnvironmentParameters m_ResetParams; + + protected override void Awake() + { + base.Awake(); + m_PushBlockSettings = FindObjectOfType(); + + goalDetect = block.GetComponent(); + goalDetect.agent = this; + + // Cache the agent rigidbody + m_AgentRb = GetComponent(); + + // Cache the block rigidbody + m_BlockRb = block.GetComponent(); + + // Get the ground's bounds + areaBounds = ground.GetComponent().bounds; + + // Get the ground renderer so we can change the material when a goal is scored + m_GroundRenderer = ground.GetComponent(); + + // Starting material + m_GroundMaterial = m_GroundRenderer.material; + } + + public override void Initialize() + { + m_ResetParams = Academy.Instance.EnvironmentParameters; + + SetResetParameters(); + } + + /// + /// Use the ground's bounds to pick a random spawn position. + /// + public Vector3 GetRandomSpawnPos() + { + var foundNewSpawnLocation = false; + var randomSpawnPos = Vector3.zero; + var tries = 0; + while (foundNewSpawnLocation == false && tries < 50) + { + var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier); + + var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier, + areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier); + randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ); + if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false) + { + foundNewSpawnLocation = true; + } + + tries++; + } + + return randomSpawnPos; + } + + + /// + /// Called when the agent moves the block into the goal. + /// + public void ScoredAGoal() + { + // We use a reward of 5. + AddReward(5f); + + // By marking an agent as done AgentReset() will be called automatically. + EndEpisode(); + + // Swap ground material for a bit to indicate we scored. + StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f)); + } + + /// + /// Swap ground material, wait time seconds, then swap back to the regular material. + /// + IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time) + { + m_GroundRenderer.material = mat; + yield return new WaitForSeconds(time); // Wait for 2 sec + m_GroundRenderer.material = m_GroundMaterial; + } + + /// + /// Called every step of the engine. Here the agent takes an action. + /// + public override void OnActionReceived(ActionBuffers actionBuffers) + { + // Penalty given each step to encourage agent to finish task quickly. + AddReward(-1f / MaxStep); + } + + /// + /// Resets the block position and velocities. + /// + void ResetBlock() + { + // Get a random position for the block. + block.transform.position = GetRandomSpawnPos(); + + // Reset block velocity back to zero. + m_BlockRb.velocity = Vector3.zero; + + // Reset block angularVelocity back to zero. + m_BlockRb.angularVelocity = Vector3.zero; + } + + /// + /// In the editor, if "Reset On Done" is checked then AgentReset() will be + /// called automatically anytime we mark done = true in an agent script. + /// + public override void OnEpisodeBegin() + { + var rotation = Random.Range(0, 4); + var rotationAngle = rotation * 90f; + area.transform.Rotate(new Vector3(0f, rotationAngle, 0f)); + + ResetBlock(); + transform.position = GetRandomSpawnPos(); + m_AgentRb.velocity = Vector3.zero; + m_AgentRb.angularVelocity = Vector3.zero; + + SetResetParameters(); + } + + public void SetGroundMaterialFriction() + { + var groundCollider = ground.GetComponent(); + + groundCollider.material.dynamicFriction = m_ResetParams.GetWithDefault("dynamic_friction", 0); + groundCollider.material.staticFriction = m_ResetParams.GetWithDefault("static_friction", 0); + } + + public void SetBlockProperties() + { + var scale = m_ResetParams.GetWithDefault("block_scale", 2); + + //Set the scale of the block + m_BlockRb.transform.localScale = new Vector3(scale, 0.75f, scale); + + // Set the drag of the block + m_BlockRb.drag = m_ResetParams.GetWithDefault("block_drag", 0.5f); + } + + void SetResetParameters() + { + SetGroundMaterialFriction(); + SetBlockProperties(); + } + +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputAgentBasic.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputAgentBasic.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3f5e3d05b2945737a3b454a200b0ee1dcc7541ee --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputAgentBasic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 925dd654260d9400ea7c46c3fccbc885 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputPlayerController.cs b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputPlayerController.cs new file mode 100644 index 0000000000000000000000000000000000000000..9e9922429db22b5fbcc6a0e6802a518fb5f23f59 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputPlayerController.cs @@ -0,0 +1,114 @@ +using Unity.MLAgents.Extensions.Input; +using UnityEngine; +using UnityEngine.InputSystem; + +/// +/// This class handles the input for the PushBlock Cube character in the PushBlock scene. +/// Note that the only ML-Agents code here is the implementation of the . +/// The looks for a component that implements that interface in order to +/// rebind actions to virtual controllers when training agents or running inference. This means that you can +/// keep your input handling code separate from ML-Agents, and have your agent's action space defined by the +/// actions defined in your project's . +/// +/// If you don't implement the will +/// look for a component on the GameObject it live on. It will rebind the actions of that +/// instance of the asset. +/// +/// It is important to note that if you have multiple components on the same GameObject handling input, you will +/// need to share the instance of the generated C# (named +/// here) in order to ensure that all of your actions are bound correctly for ml-agents training and inference. +/// +public class PushBlockWithInputPlayerController : MonoBehaviour, IInputActionAssetProvider +{ + + PushBlockWithInputSettings m_PushBlockSettings; + public float JumpTime = 0.5f; + float m_JumpTimeRemaining; + Rigidbody m_PlayerRb; //cached on initialization + PushBlockActions m_PushBlockActions; + float m_JumpCoolDownStart; + + void Awake() + { + m_PushBlockSettings = FindObjectOfType(); + LazyInitializeActions(); + + // Cache the agent rigidbody + m_PlayerRb = GetComponent(); + } + + void LazyInitializeActions() + { + if (m_PushBlockActions != null) + { + return; + } + + m_PushBlockActions = new PushBlockActions(); + m_PushBlockActions.Enable(); + + // You can listen to C# events. + m_PushBlockActions.Movement.jump.performed += JumpOnperformed; + } + + void JumpOnperformed(InputAction.CallbackContext callbackContext) + { + InnerJump(gameObject.transform); + } + + void FixedUpdate() + { + // Or you can poll the action itself like we do here. + InnerMove(gameObject.transform, m_PushBlockActions.Movement.movement.ReadValue()); + if (m_JumpTimeRemaining < 0) + { + m_PlayerRb.AddForce(-transform.up * (m_PushBlockSettings.agentJumpForce * 3), ForceMode.Acceleration); + } + + m_JumpTimeRemaining -= Time.fixedDeltaTime; + } + + void InnerJump(Transform t) + { + if (Time.realtimeSinceStartup - m_JumpCoolDownStart > m_PushBlockSettings.agentJumpCoolDown) + { + m_JumpTimeRemaining = JumpTime; + m_PlayerRb.AddForce(t.up * m_PushBlockSettings.agentJumpForce, ForceMode.VelocityChange); + m_JumpCoolDownStart = Time.realtimeSinceStartup; + } + } + + void InnerMove(Transform t, Vector2 v) + { + var forward = CreateForwardVector(v); + var up = CreateUpVector(v); + var dirToGo = t.forward * forward; + var rotateDir = t.up * up; + t.Rotate(rotateDir, Time.deltaTime * 200f); + m_PlayerRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed, + ForceMode.VelocityChange); + } + + static float CreateUpVector(Vector2 move) + { + return Mathf.Abs(move.x) > Mathf.Abs(move.y) ? move.x : 0f; + } + + static float CreateForwardVector(Vector2 move) + { + return Mathf.Abs(move.y) > Mathf.Abs(move.x) ? move.y : 0f; + } + + /// + /// This is the implementation of the for this class. We need + /// both the and the if you are + /// listening to C# events, Unity Events, or receiving Messages from the Input System Package as those callbacks + /// are set up through the generated . + /// + /// + public (InputActionAsset, IInputActionCollection2) GetInputActionAsset() + { + LazyInitializeActions(); + return (m_PushBlockActions.asset, m_PushBlockActions); + } +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputPlayerController.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputPlayerController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..78e7862777484544feffe0db7ca0384bab2f60a0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputPlayerController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb9a2d951ffa44f53ba04a31f2712f5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputSettings.cs b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..a0fcb9236e12d55cd567338df2f4d5b0a7336fb5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputSettings.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +public class PushBlockWithInputSettings : MonoBehaviour +{ + /// + /// The "walking speed" of the agents in the scene. + /// + public float agentRunSpeed; + + /// + /// The agent rotation speed. + /// Every agent will use this setting. + /// + public float agentRotationSpeed; + + public float agentJumpForce; + + public float agentJumpCoolDown; + + /// + /// The spawn area margin multiplier. + /// ex: .9 means 90% of spawn area will be used. + /// .1 margin will be left (so players don't spawn off of the edge). + /// The higher this value, the longer training time required. + /// + public float spawnAreaMarginMultiplier; + + /// + /// When a goal is scored the ground will switch to this + /// material for a few seconds. + /// + public Material goalScoredMaterial; + + /// + /// When an agent fails, the ground will turn this material for a few seconds. + /// + public Material failMaterial; + +} diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputSettings.cs.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b7d1b5176130663c990b835678d197516bdd7ee2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/Scripts/PushBlockWithInputSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81aead8ba5af44598b1b5296780e489e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..ab78e3e55686f94c939964b7213466fb032a213d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a366d37ea73e9425f82ef8241ee292d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx new file mode 100644 index 0000000000000000000000000000000000000000..a69f4f7559f9846841ab16db5f75eb9cada4c090 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cc8e9f68d534e438237f96f85dc85f5b0cdc66af6dc60f057780921a57fd164 +size 486378 diff --git a/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx.meta b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce4c78f55ac23ae28052e3c09aae04f043c755be --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/PushBlockWithInput/TFModels/PushBlock.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: bee50ae7fd03e4e16a4ac45db4d96f6e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/Pyramids.meta b/Project/Assets/ML-Agents/Examples/Pyramids.meta new file mode 100644 index 0000000000000000000000000000000000000000..8afb717535b1d3b319236ab665dc19b8d190ffd2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d970a35d94c53437b9ebc56130744a23 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Demos.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..d59ceef2d76ddcd69ed512ee050b3ed032817209 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2f9f5c0ae3a44f0b8d0518f2747fe34 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo b/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo new file mode 100644 index 0000000000000000000000000000000000000000..78115f3e5d172c451b2d00a8f16783cfd381b426 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5eb1de92d4838436bd761049411a39e255d6bb2fb642f8996f0f1a34cce3044e +size 1318241 diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..1bd64175cabfcf46d784dd63450b5cf870c88dcd --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2f9d53c90f11846d7a6499ce0f1dfebb +ScriptedImporter: + internalIDToNameTable: + - first: + 114: 11400000 + second: Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..a1c69a49787464f046d7425ea752a77697559d05 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2af8313c71cbd78438404311e2d8832d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/CruciformWall.fbx b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/CruciformWall.fbx new file mode 100644 index 0000000000000000000000000000000000000000..67e04fad002b414edac6f8d37b93d4c6bd7ccf4e Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/CruciformWall.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/CruciformWall.fbx.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/CruciformWall.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..3fc00ef1bf8acd0ccdcdd62ebb24bb4f46238ff5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/CruciformWall.fbx.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: bc0c0b12f262a754b9ba018e31a915f3 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: rep_White + 2300000: //RootNode + 3300000: //RootNode + 4300000: CruciformWall + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_White + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SideWalls.fbx b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SideWalls.fbx new file mode 100644 index 0000000000000000000000000000000000000000..7f46414e677deb5faefd1a9c06bea59501fe5606 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SideWalls.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SideWalls.fbx.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SideWalls.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa84fa482e94931421d7811c155f8d8628592e7f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SideWalls.fbx.meta @@ -0,0 +1,149 @@ +fileFormatVersion: 2 +guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: SideWall1 + 100002: SideWall2 + 100004: SideWall3 + 100006: SideWall4 + 100008: SideWall5 + 100010: SideWall6 + 100012: SideWall7 + 100014: SideWall8 + 100016: //RootNode + 100018: Floor + 100020: OuterWalls + 400000: SideWall1 + 400002: SideWall2 + 400004: SideWall3 + 400006: SideWall4 + 400008: SideWall5 + 400010: SideWall6 + 400012: SideWall7 + 400014: SideWall8 + 400016: //RootNode + 400018: Floor + 400020: OuterWalls + 2100000: rep_White + 2100002: rep_Floor + 2300000: SideWall1 + 2300002: SideWall2 + 2300004: SideWall3 + 2300006: SideWall4 + 2300008: SideWall5 + 2300010: SideWall6 + 2300012: SideWall7 + 2300014: SideWall8 + 2300016: Floor + 2300018: OuterWalls + 3300000: SideWall1 + 3300002: SideWall2 + 3300004: SideWall3 + 3300006: SideWall4 + 3300008: SideWall5 + 3300010: SideWall6 + 3300012: SideWall7 + 3300014: SideWall8 + 3300016: Floor + 3300018: OuterWalls + 4300000: SideWall8 + 4300002: SideWall1 + 4300004: SideWall2 + 4300006: SideWall3 + 4300008: SideWall4 + 4300010: SideWall5 + 4300012: SideWall6 + 4300014: SideWall7 + 4300016: OuterWalls + 4300018: Floor + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Floor + second: {fileID: 2100000, guid: 525b55295d811d948bac721726c23b6e, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_White + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SpawnAreas.fbx b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SpawnAreas.fbx new file mode 100644 index 0000000000000000000000000000000000000000..743237d6c31279c03b74205e2cd5db83a27218e0 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SpawnAreas.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SpawnAreas.fbx.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SpawnAreas.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..8ec0c30b928c81c7c15bc59f61af2163ec007ce8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/SpawnAreas.fbx.meta @@ -0,0 +1,133 @@ +fileFormatVersion: 2 +guid: 8786d14e4ec3d114e9e5d8e541b89ff4 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: SpawnAreaA + 100002: SpawnAreaB + 100004: SpawnAreaC + 100006: SpawnAreaD + 100008: SpawnAreaE + 100010: SpawnAreaF + 100012: SpawnAreaG + 100014: SpawnAreaH + 100016: SpawnAreaI + 100018: //RootNode + 400000: SpawnAreaA + 400002: SpawnAreaB + 400004: SpawnAreaC + 400006: SpawnAreaD + 400008: SpawnAreaE + 400010: SpawnAreaF + 400012: SpawnAreaG + 400014: SpawnAreaH + 400016: SpawnAreaI + 400018: //RootNode + 2100000: lambert1 + 2300000: SpawnAreaA + 2300002: SpawnAreaB + 2300004: SpawnAreaC + 2300006: SpawnAreaD + 2300008: SpawnAreaE + 2300010: SpawnAreaF + 2300012: SpawnAreaG + 2300014: SpawnAreaH + 2300016: SpawnAreaI + 3300000: SpawnAreaA + 3300002: SpawnAreaB + 3300004: SpawnAreaC + 3300006: SpawnAreaD + 3300008: SpawnAreaE + 3300010: SpawnAreaF + 3300012: SpawnAreaG + 3300014: SpawnAreaH + 3300016: SpawnAreaI + 4300000: SpawnAreaA + 4300002: SpawnAreaB + 4300004: SpawnAreaC + 4300006: SpawnAreaD + 4300008: SpawnAreaE + 4300010: SpawnAreaF + 4300012: SpawnAreaG + 4300014: SpawnAreaH + 4300016: SpawnAreaI + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Switch.fbx b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Switch.fbx new file mode 100644 index 0000000000000000000000000000000000000000..218802272e4a8d42cbaba819b2e121854bc0c62b Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Switch.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Switch.fbx.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Switch.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..0345446fd65c24d760e1672671c1d42b676b1e72 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Switch.fbx.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 469b6605a74c06e4984911fbdec15232 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: Button + 100002: //RootNode + 100004: Switch 1 + 400000: Button + 400002: //RootNode + 400004: Switch 1 + 2100000: rep_White + 2100002: rep_Button + 2300000: Button + 2300002: Switch 1 + 3300000: Button + 3300002: Switch 1 + 4300000: Switch + 4300002: Button + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_White + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Walls.fbx b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Walls.fbx new file mode 100644 index 0000000000000000000000000000000000000000..93b177218b8c8322e1466374fb091e57f139e75c Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Walls.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Walls.fbx.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Walls.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..a17ec06c0eb3cf68aeecc0e7e595c1b903e9e5f2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Meshes/Walls.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 58fb009d802d13e4cb2dca432493580d +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: Floor + 100002: OuterWalls + 100004: //RootNode + 400000: Floor + 400002: OuterWalls + 400004: //RootNode + 2100000: rep_White + 2100002: rep_Floor + 2300000: Floor + 2300002: OuterWalls + 3300000: Floor + 3300002: OuterWalls + 4300000: OuterWalls + 4300002: Floor + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Floor + second: {fileID: 2100000, guid: 525b55295d811d948bac721726c23b6e, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_White + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..42d1573a75db87d75a0b3090f66bb2e53b81520d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ce93d04f41114481ac56aefa2c93bb2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/AreaPB.prefab b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/AreaPB.prefab new file mode 100644 index 0000000000000000000000000000000000000000..3fc47a925aa6c6e1d5e8d958b7e6e04cbc6b186f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/AreaPB.prefab @@ -0,0 +1,3289 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1009802342325412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4572889372279640} + - component: {fileID: 33469379695432724} + - component: {fileID: 23662276391580882} + - component: {fileID: 65784713172989966} + m_Layer: 0 + m_Name: SpawnH + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4572889372279640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009802342325412} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 30} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33469379695432724 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009802342325412} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23662276391580882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009802342325412} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65784713172989966 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009802342325412} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1061289331639614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4463282243387382} + - component: {fileID: 33719211053096646} + - component: {fileID: 23640629695272556} + - component: {fileID: 65678149105200492} + m_Layer: 0 + m_Name: SideWall2 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4463282243387382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061289331639614} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 48, y: -1.2339699, z: -48} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33719211053096646 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061289331639614} + m_Mesh: {fileID: 4300004, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23640629695272556 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061289331639614} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65678149105200492 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061289331639614} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1450.4968} + m_Center: {x: -3144.2273, y: 292.50012, z: 575.2484} +--- !u!1 &1073283705575850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4550230040115604} + - component: {fileID: 33892643010604154} + - component: {fileID: 23763688464828106} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4550230040115604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073283705575850} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4330571258469162} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33892643010604154 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073283705575850} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23763688464828106 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073283705575850} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1099372098397784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4452278951053174} + - component: {fileID: 33241150465290628} + - component: {fileID: 23002605847218570} + - component: {fileID: 65812495567844776} + m_Layer: 0 + m_Name: SpawnD + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4452278951053174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099372098397784} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30, y: 0, z: 0} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33241150465290628 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099372098397784} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23002605847218570 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099372098397784} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65812495567844776 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099372098397784} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1106831883006774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4803892350403366} + - component: {fileID: 33765564726162872} + - component: {fileID: 23720212876018490} + - component: {fileID: 65692499135116542} + - component: {fileID: 65938655517836296} + m_Layer: 0 + m_Name: CruciformWall + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4803892350403366 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106831883006774} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 16.538311, y: -2.7, z: 16.557728} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4603070702628152} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33765564726162872 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106831883006774} + m_Mesh: {fileID: 4300000, guid: bc0c0b12f262a754b9ba018e31a915f3, type: 3} +--- !u!23 &23720212876018490 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106831883006774} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65692499135116542 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106831883006774} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1515.0038, y: 985.00024, z: 100.006} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!65 &65938655517836296 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106831883006774} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1500.0065} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!1 &1115282621152258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4404525033858484} + - component: {fileID: 33330124454136958} + - component: {fileID: 23243293247685176} + - component: {fileID: 65546647225791728} + m_Layer: 0 + m_Name: SideWall7 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4404525033858484 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115282621152258} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -15, y: -1.2339699, z: 48} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33330124454136958 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115282621152258} + m_Mesh: {fileID: 4300014, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23243293247685176 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115282621152258} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65546647225791728 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115282621152258} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1450.4968} + m_Center: {x: 3144.2273, y: 292.50012, z: -575.2484} +--- !u!1 &1131043459059966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4518417139497368} + - component: {fileID: 54596704247224538} + - component: {fileID: 114399412043818042} + - component: {fileID: 114937736047215868} + - component: {fileID: 65345930959735878} + - component: {fileID: 5820012306424387886} + - component: {fileID: 5712624269609438939} + - component: {fileID: 5767481171805996936} + - component: {fileID: 4725417187860315718} + - component: {fileID: 6474351450651730614} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4518417139497368 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 1.12, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4330571258469162} + m_Father: {fileID: 4603070702628152} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &54596704247224538 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + serializedVersion: 2 + m_Mass: 25 + m_Drag: 2 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &114399412043818042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 4 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 05000000 + VectorActionSize: 05000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: aa3fa19a09ec44a41be3da037783ad41, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Pyramids + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114937736047215868 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b8db44472779248d3be46895c4d562d5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + area: {fileID: 1464170487903594} + areaSwitch: {fileID: 1432086782037750} + useVectorObs: 1 +--- !u!65 &65345930959735878 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5820012306424387886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &5712624269609438939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: + - block + - wall + - goal + - switchOff + - switchOn + - stone + m_RaysPerDirection: 3 + m_MaxRayDegrees: 70 + m_SphereCastRadius: 0.5 + m_RayLength: 35 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!114 &5767481171805996936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor1 + m_DetectableTags: + - block + - wall + - goal + - switchOff + - switchOn + - stone + m_RaysPerDirection: 3 + m_MaxRayDegrees: 65 + m_SphereCastRadius: 0.5 + m_RayLength: 35 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 5 +--- !u!114 &4725417187860315718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor2 + m_DetectableTags: + - block + - wall + - goal + - switchOff + - switchOn + - stone + m_RaysPerDirection: 3 + m_MaxRayDegrees: 75 + m_SphereCastRadius: 0.5 + m_RayLength: 35 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 10 +--- !u!114 &6474351450651730614 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131043459059966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1148882946833254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4248851000827934} + - component: {fileID: 33482144306768996} + - component: {fileID: 23486744471921352} + - component: {fileID: 65635512232060032} + m_Layer: 0 + m_Name: SideWall4 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4248851000827934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148882946833254} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -48, y: -1.2339699, z: -48} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33482144306768996 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148882946833254} + m_Mesh: {fileID: 4300008, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23486744471921352 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148882946833254} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65635512232060032 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148882946833254} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1450.4968, y: 985.00024, z: 100} + m_Center: {x: 575.2484, y: 292.50012, z: 3144.2273} +--- !u!1 &1188667522524560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4622440173152470} + m_Layer: 0 + m_Name: Walls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4622440173152470 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1188667522524560} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4437746540757636} + - {fileID: 4636088056194604} + m_Father: {fileID: 4603070702628152} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1211192434636830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188375067848934} + - component: {fileID: 33928421129570004} + - component: {fileID: 23147992737846022} + - component: {fileID: 65492622455568822} + m_Layer: 0 + m_Name: SpawnC + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188375067848934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211192434636830} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 30, y: 0, z: -30} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33928421129570004 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211192434636830} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23147992737846022 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211192434636830} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65492622455568822 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211192434636830} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1241796814022438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4676865447046996} + - component: {fileID: 33434948921002374} + - component: {fileID: 23552369609802960} + - component: {fileID: 65867758406134936} + m_Layer: 0 + m_Name: SideWall6 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4676865447046996 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241796814022438} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -48, y: -1.2339699, z: 48} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33434948921002374 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241796814022438} + m_Mesh: {fileID: 4300012, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23552369609802960 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241796814022438} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65867758406134936 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241796814022438} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1450.4968} + m_Center: {x: 3144.2273, y: 292.50012, z: -575.2484} +--- !u!1 &1264315005619794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4756964973887472} + - component: {fileID: 33328743110572266} + - component: {fileID: 23097840420997514} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4756964973887472 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264315005619794} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4330571258469162} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33328743110572266 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264315005619794} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23097840420997514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264315005619794} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1311237735163698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4116331890680128} + - component: {fileID: 33874931828864308} + - component: {fileID: 23559067279938982} + - component: {fileID: 65147075176041312} + m_Layer: 0 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4116331890680128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311237735163698} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4173532209596668} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33874931828864308 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311237735163698} + m_Mesh: {fileID: 4300002, guid: 469b6605a74c06e4984911fbdec15232, type: 3} +--- !u!23 &23559067279938982 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311237735163698} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65147075176041312 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311237735163698} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200, y: 75, z: 200} + m_Center: {x: 0, y: 137.5, z: 0} +--- !u!1 &1320840443976498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4912732971874350} + - component: {fileID: 33797529295803408} + - component: {fileID: 23443781570288060} + - component: {fileID: 65900153279471642} + m_Layer: 0 + m_Name: SideWall8 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4912732971874350 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320840443976498} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 48, y: -1.2339699, z: 48} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33797529295803408 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320840443976498} + m_Mesh: {fileID: 4300000, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23443781570288060 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320840443976498} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65900153279471642 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320840443976498} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1450.4971, y: 985.00024, z: 100} + m_Center: {x: -575.24854, y: 292.50012, z: -3144.2273} +--- !u!1 &1325368969677270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4737457521129954} + - component: {fileID: 33700295629683462} + - component: {fileID: 23925893756655152} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4737457521129954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325368969677270} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4330571258469162} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33700295629683462 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325368969677270} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23925893756655152 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325368969677270} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1354480442820184 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4087329283422980} + - component: {fileID: 20692136189586316} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4087329283422980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1354480442820184} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4330571258469162} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20692136189586316 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1354480442820184} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1370952528156468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 46612412021.3188} + - component: {fileID: 33091290307090862} + - component: {fileID: 23221028280036978} + - component: {fileID: 65040597978940982} + m_Layer: 0 + m_Name: SideWall5 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &46612412021.3188 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370952528156468} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -48, y: -1.2339699, z: -15} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33091290307090862 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370952528156468} + m_Mesh: {fileID: 4300010, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23221028280036978 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370952528156468} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65040597978940982 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370952528156468} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1450.4968, y: 985.00024, z: 100} + m_Center: {x: 575.2484, y: 292.50012, z: 3144.2273} +--- !u!1 &1415580355607462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4155123623880010} + m_Layer: 0 + m_Name: SideWalls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4155123623880010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415580355607462} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4837594706774542} + - {fileID: 4463282243387382} + - {fileID: 4087387112911168} + - {fileID: 4248851000827934} + - {fileID: 46612412021.3188} + - {fileID: 4676865447046996} + - {fileID: 4404525033858484} + - {fileID: 4912732971874350} + m_Father: {fileID: 4603070702628152} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1432086782037750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4173532209596668} + - component: {fileID: 33349033656994552} + - component: {fileID: 23280303898897598} + - component: {fileID: 65480222460473330} + - component: {fileID: 54503189165510328} + - component: {fileID: 114882773008046678} + m_Layer: 0 + m_Name: Switch + m_TagString: switchOff + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4173532209596668 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1432086782037750} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 12.31, y: 0, z: 3.95} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 4116331890680128} + m_Father: {fileID: 4603070702628152} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33349033656994552 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1432086782037750} + m_Mesh: {fileID: 4300000, guid: 469b6605a74c06e4984911fbdec15232, type: 3} +--- !u!23 &23280303898897598 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1432086782037750} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65480222460473330 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1432086782037750} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 400, y: 400, z: 400} + m_Center: {x: 0, y: 200, z: 0} +--- !u!54 &54503189165510328 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1432086782037750} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 90 + m_CollisionDetection: 0 +--- !u!114 &114882773008046678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1432086782037750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abd01d977612744528db278c446e9a11, type: 3} + m_Name: + m_EditorClassIdentifier: + onMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + offMaterial: {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + myButton: {fileID: 1311237735163698} +--- !u!1 &1464170487903594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4603070702628152} + - component: {fileID: 114038595653051694} + m_Layer: 0 + m_Name: AreaPB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4603070702628152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464170487903594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4173532209596668} + - {fileID: 4155123623880010} + - {fileID: 4622440173152470} + - {fileID: 4803892350403366} + - {fileID: 4044558080510292} + - {fileID: 4647009102851502} + - {fileID: 4995304226548414} + - {fileID: 4518417139497368} + - {fileID: 4853560359705636} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114038595653051694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464170487903594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e048de15d0b8a4643a75c2b09981792e, type: 3} + m_Name: + m_EditorClassIdentifier: + pyramid: {fileID: 1891363201150404, guid: 8be2b3870e2cd4ad8bbf080059b2a132, type: 3} + stonePyramid: {fileID: 1703380733698014, guid: 41512dd84b60643ceb3855fcf9d7d318, + type: 3} + spawnAreas: + - {fileID: 1772811252886996} + - {fileID: 1499222802311382} + - {fileID: 1211192434636830} + - {fileID: 1099372098397784} + - {fileID: 1487796829611838} + - {fileID: 1628005379594380} + - {fileID: 1589824565497876} + - {fileID: 1009802342325412} + - {fileID: 1589816231338102} + numPyra: 1 + range: 45 +--- !u!1 &1487796829611838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4532685512100268} + - component: {fileID: 33123585101566346} + - component: {fileID: 23979150535579226} + - component: {fileID: 65271180279773774} + m_Layer: 0 + m_Name: SpawnE + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4532685512100268 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487796829611838} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33123585101566346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487796829611838} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23979150535579226 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487796829611838} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65271180279773774 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487796829611838} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1499222802311382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4807446567058488} + - component: {fileID: 33965366981793692} + - component: {fileID: 23944854048610362} + - component: {fileID: 65572453242984008} + m_Layer: 0 + m_Name: SpawnB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4807446567058488 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499222802311382} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -30} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33965366981793692 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499222802311382} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23944854048610362 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499222802311382} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65572453242984008 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499222802311382} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1589816231338102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4484436314715926} + - component: {fileID: 33872327713679998} + - component: {fileID: 23263090819533454} + - component: {fileID: 65623479026562200} + m_Layer: 0 + m_Name: SpawnI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4484436314715926 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589816231338102} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 30, y: 0, z: 30} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33872327713679998 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589816231338102} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23263090819533454 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589816231338102} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65623479026562200 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589816231338102} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1589824565497876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4973807509954152} + - component: {fileID: 33910174846390712} + - component: {fileID: 23283720620334486} + - component: {fileID: 65372154031324488} + m_Layer: 0 + m_Name: SpawnG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4973807509954152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589824565497876} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30, y: 0, z: 30} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33910174846390712 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589824565497876} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23283720620334486 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589824565497876} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65372154031324488 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589824565497876} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1615834122585720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4636088056194604} + - component: {fileID: 33871596094725314} + - component: {fileID: 23044081146296732} + - component: {fileID: 65337902227402554} + m_Layer: 0 + m_Name: Floor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4636088056194604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615834122585720} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4622440173152470} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33871596094725314 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615834122585720} + m_Mesh: {fileID: 4300002, guid: 58fb009d802d13e4cb2dca432493580d, type: 3} +--- !u!23 &23044081146296732 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615834122585720} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65337902227402554 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615834122585720} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 9900, y: 100, z: 9900} + m_Center: {x: 0, y: -50, z: 0} +--- !u!1 &1617121788334770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4647009102851502} + - component: {fileID: 33689712010250054} + - component: {fileID: 23113513051338274} + - component: {fileID: 65312426772250818} + - component: {fileID: 65209364479332254} + m_Layer: 0 + m_Name: CruciformWall (2) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4647009102851502 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617121788334770} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -16.55773, y: -2.7, z: 16.557728} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4603070702628152} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33689712010250054 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617121788334770} + m_Mesh: {fileID: 4300000, guid: bc0c0b12f262a754b9ba018e31a915f3, type: 3} +--- !u!23 &23113513051338274 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617121788334770} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65312426772250818 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617121788334770} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1515.0038, y: 985.00024, z: 100.006} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!65 &65209364479332254 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617121788334770} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1500.0065} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!1 &1628005379594380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4968604186908768} + - component: {fileID: 33533135465797330} + - component: {fileID: 23282613217909108} + - component: {fileID: 65609161081089734} + m_Layer: 0 + m_Name: SpawnF + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4968604186908768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1628005379594380} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 30, y: 0, z: 0} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33533135465797330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1628005379594380} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23282613217909108 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1628005379594380} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65609161081089734 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1628005379594380} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1649335671082872 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4995304226548414} + - component: {fileID: 33789852408659818} + - component: {fileID: 23743095159432774} + - component: {fileID: 65825247372068300} + - component: {fileID: 65705986526076686} + m_Layer: 0 + m_Name: CruciformWall (3) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4995304226548414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649335671082872} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -16.55773, y: -2.7, z: -16.55773} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4603070702628152} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33789852408659818 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649335671082872} + m_Mesh: {fileID: 4300000, guid: bc0c0b12f262a754b9ba018e31a915f3, type: 3} +--- !u!23 &23743095159432774 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649335671082872} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65825247372068300 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649335671082872} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1515.0038, y: 985.00024, z: 100.006} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!65 &65705986526076686 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649335671082872} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1500.0065} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!1 &1666587036294394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4437746540757636} + - component: {fileID: 33710283463874878} + - component: {fileID: 23904083281981628} + - component: {fileID: 65597648414630362} + - component: {fileID: 65583032837541330} + - component: {fileID: 65502768599000280} + - component: {fileID: 65813855272093994} + m_Layer: 0 + m_Name: OuterWalls + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4437746540757636 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -5, z: -0.25000763} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4622440173152470} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33710283463874878 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_Mesh: {fileID: 4300000, guid: 58fb009d802d13e4cb2dca432493580d, type: 3} +--- !u!23 &23904083281981628 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65597648414630362 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 1500, z: 10100} + m_Center: {x: 5000, y: 250, z: 25.001144} +--- !u!65 &65583032837541330 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 1500, z: 10100} + m_Center: {x: -5000, y: 250, z: 25.001144} +--- !u!65 &65502768599000280 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10100, y: 1500, z: 100} + m_Center: {x: 25.00114, y: 250, z: 4985} +--- !u!65 &65813855272093994 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666587036294394} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10100, y: 1500, z: 100} + m_Center: {x: 25.00114, y: 250, z: -4985} +--- !u!1 &1670584349235692 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4330571258469162} + - component: {fileID: 33904114523856066} + - component: {fileID: 23070745533459016} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4330571258469162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670584349235692} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4087329283422980} + - {fileID: 4737457521129954} + - {fileID: 4256872818130292} + - {fileID: 4550230040115604} + - {fileID: 4756964973887472} + m_Father: {fileID: 4518417139497368} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33904114523856066 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670584349235692} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23070745533459016 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670584349235692} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1675982318770848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4256872818130292} + - component: {fileID: 33156570474681068} + - component: {fileID: 23993214159753594} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4256872818130292 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675982318770848} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4330571258469162} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33156570474681068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675982318770848} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23993214159753594 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675982318770848} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1771959857261732 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4087387112911168} + - component: {fileID: 33168249797891668} + - component: {fileID: 23157509353756474} + - component: {fileID: 65700905863876140} + m_Layer: 0 + m_Name: SideWall3 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4087387112911168 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771959857261732} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15, y: -1.2339699, z: -48} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33168249797891668 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771959857261732} + m_Mesh: {fileID: 4300006, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23157509353756474 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771959857261732} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65700905863876140 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771959857261732} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1450.4968} + m_Center: {x: -3144.2273, y: 292.50012, z: 575.2484} +--- !u!1 &1772811252886996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4960655511315872} + - component: {fileID: 33267954154496710} + - component: {fileID: 23699836892557020} + - component: {fileID: 65131381260429142} + m_Layer: 0 + m_Name: SpawnA + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4960655511315872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772811252886996} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30, y: 0, z: -30} + m_LocalScale: {x: 25, y: 1, z: 25} + m_Children: [] + m_Father: {fileID: 4853560359705636} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33267954154496710 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772811252886996} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23699836892557020 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772811252886996} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65131381260429142 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772811252886996} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 0.99999994, y: 1, z: 0.99999994} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1819858679110738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4853560359705636} + m_Layer: 0 + m_Name: SpawnAreas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4853560359705636 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1819858679110738} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4960655511315872} + - {fileID: 4807446567058488} + - {fileID: 4188375067848934} + - {fileID: 4452278951053174} + - {fileID: 4532685512100268} + - {fileID: 4968604186908768} + - {fileID: 4973807509954152} + - {fileID: 4572889372279640} + - {fileID: 4484436314715926} + m_Father: {fileID: 4603070702628152} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1953692164607720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4044558080510292} + - component: {fileID: 33854201346192882} + - component: {fileID: 23253425602183850} + - component: {fileID: 65302887606458056} + - component: {fileID: 65281030876864250} + m_Layer: 0 + m_Name: CruciformWall (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4044558080510292 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953692164607720} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 16.538311, y: -2.7, z: -16.55773} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4603070702628152} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33854201346192882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953692164607720} + m_Mesh: {fileID: 4300000, guid: bc0c0b12f262a754b9ba018e31a915f3, type: 3} +--- !u!23 &23253425602183850 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953692164607720} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65302887606458056 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953692164607720} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1515.0038, y: 985.00024, z: 100.006} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!65 &65281030876864250 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953692164607720} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100, y: 985.00024, z: 1500.0065} + m_Center: {x: -0.000061035156, y: 492.50012, z: -0.000061035156} +--- !u!1 &1968410533475920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4837594706774542} + - component: {fileID: 33709951417077758} + - component: {fileID: 23158982595024530} + - component: {fileID: 65895277570308496} + m_Layer: 0 + m_Name: SideWall1 + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4837594706774542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968410533475920} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 48, y: -1.2339699, z: 15} + m_LocalScale: {x: 0.01, y: 0.007329897, z: 0.01} + m_Children: [] + m_Father: {fileID: 4155123623880010} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33709951417077758 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968410533475920} + m_Mesh: {fileID: 4300002, guid: 17b1c1a4156cc5a488c7d5c2ba2e7ba3, type: 3} +--- !u!23 &23158982595024530 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968410533475920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65895277570308496 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968410533475920} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1450.4971, y: 985.00024, z: 100} + m_Center: {x: -575.24854, y: 292.50012, z: -3144.2273} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/AreaPB.prefab.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/AreaPB.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..1451b0aa2f2377dfd42320559791226aec249ddd --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/AreaPB.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd804431e808a492bb5658bcd296e58e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/BrickPyramid.prefab b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/BrickPyramid.prefab new file mode 100644 index 0000000000000000000000000000000000000000..68e5da16949aaffcf942af0f571afc1ea15ab449 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/BrickPyramid.prefab @@ -0,0 +1,2667 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1891363201150404} + m_IsPrefabParent: 1 +--- !u!1 &1064871660791388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4514940374534480} + - component: {fileID: 33154514265921808} + - component: {fileID: 23725907615305758} + - component: {fileID: 65214114109641326} + - component: {fileID: 54142284079327612} + m_Layer: 0 + m_Name: Cube (10) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1090175471762280 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4623699988389196} + - component: {fileID: 33056241526780332} + - component: {fileID: 23366914300577848} + - component: {fileID: 65683556564586648} + - component: {fileID: 54392573588981808} + m_Layer: 0 + m_Name: Cube (16) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1106485554271698 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4764150175004850} + - component: {fileID: 33020693723931316} + - component: {fileID: 23451724838369028} + - component: {fileID: 65985892811518598} + - component: {fileID: 54192718935864072} + m_Layer: 0 + m_Name: Cube (26) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1135431903566810 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4103576786580104} + - component: {fileID: 33180422651657140} + - component: {fileID: 23290509329654184} + - component: {fileID: 65087709174108018} + - component: {fileID: 54699542697201940} + m_Layer: 0 + m_Name: Cube (24) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1137948235333676 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4878969941173732} + - component: {fileID: 33142947721222464} + - component: {fileID: 23949344558310622} + - component: {fileID: 65725393365034122} + - component: {fileID: 54232456718854546} + m_Layer: 0 + m_Name: Cube (20) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1167448178862890 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4291324993800576} + - component: {fileID: 33034401239209410} + - component: {fileID: 23368278019163316} + - component: {fileID: 54552673020782832} + - component: {fileID: 65000788873359578} + m_Layer: 0 + m_Name: Target + m_TagString: goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1196610631746594 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4477259198708720} + - component: {fileID: 33697759973505066} + - component: {fileID: 23594603685268818} + - component: {fileID: 65065572033801572} + - component: {fileID: 54064347010680290} + m_Layer: 0 + m_Name: Cube (27) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1248606744262958 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4749160130140578} + - component: {fileID: 33511183976207786} + - component: {fileID: 23686877046966302} + - component: {fileID: 65540403349707104} + - component: {fileID: 54665542103012590} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1317118657243700 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4660214325542368} + - component: {fileID: 33333833869289464} + - component: {fileID: 23682164725945882} + - component: {fileID: 65840754164055734} + - component: {fileID: 54504400023673052} + m_Layer: 0 + m_Name: Cube (9) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1353088983794658 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4774289800767558} + - component: {fileID: 33433988819315752} + - component: {fileID: 23112027818411474} + - component: {fileID: 65074960551033220} + - component: {fileID: 54913291196183182} + m_Layer: 0 + m_Name: Cube (18) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1354155526139042 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4449971584222136} + - component: {fileID: 33985605594891500} + - component: {fileID: 23049193452806938} + - component: {fileID: 65902598669395318} + - component: {fileID: 54046269679688006} + m_Layer: 0 + m_Name: Cube (29) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1374988358292644 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4476570172385034} + - component: {fileID: 33177537670350158} + - component: {fileID: 23149564617083920} + - component: {fileID: 65979471088271746} + - component: {fileID: 54545305306605294} + m_Layer: 0 + m_Name: Cube (23) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1474979103987408 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4651111804478742} + - component: {fileID: 33952605549756516} + - component: {fileID: 23254097450750062} + - component: {fileID: 65570974359007094} + - component: {fileID: 54433664650593400} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1587707655939574 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4441375731483946} + - component: {fileID: 33935456700229776} + - component: {fileID: 23318592241219450} + - component: {fileID: 65039945731610718} + - component: {fileID: 54013230231199508} + m_Layer: 0 + m_Name: Cube (25) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1670499018524874 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4577358885722622} + - component: {fileID: 33323448418439082} + - component: {fileID: 23762387168929598} + - component: {fileID: 65784849682538480} + - component: {fileID: 54804888732110476} + m_Layer: 0 + m_Name: Cube (22) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1674861392147034 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4823141324099044} + - component: {fileID: 33286493997411974} + - component: {fileID: 23343451329744444} + - component: {fileID: 65001885374897534} + - component: {fileID: 54048734656193362} + m_Layer: 0 + m_Name: Cube (28) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1782924439313676 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4164960940131030} + - component: {fileID: 33918760973720996} + - component: {fileID: 23369719216635336} + - component: {fileID: 65309600256887692} + - component: {fileID: 54847075394478182} + m_Layer: 0 + m_Name: Cube + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1786646613441440 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4177933754698880} + - component: {fileID: 33203535397120560} + - component: {fileID: 23824112448974570} + - component: {fileID: 65008742997792572} + - component: {fileID: 54360650393765210} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1816230717493454 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4388482559409804} + - component: {fileID: 33521930288020708} + - component: {fileID: 23815698867791572} + - component: {fileID: 65076695193764564} + - component: {fileID: 54625939123884998} + m_Layer: 0 + m_Name: Cube (12) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1831371572021294 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4718702251580304} + - component: {fileID: 33448610436205884} + - component: {fileID: 23100528299737642} + - component: {fileID: 65622964281278884} + - component: {fileID: 54566547699418724} + m_Layer: 0 + m_Name: Cube (8) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1865293098034466 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4954516583561608} + - component: {fileID: 33006457195518570} + - component: {fileID: 23748094386556584} + - component: {fileID: 65646946810752782} + - component: {fileID: 54380193036815526} + m_Layer: 0 + m_Name: Cube (13) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1891363201150404 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4009295745737424} + m_Layer: 0 + m_Name: BrickPyramid + m_TagString: pyramid + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1944685599385028 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4993319262909854} + - component: {fileID: 33244977179775990} + - component: {fileID: 23455864340447686} + - component: {fileID: 65327368334679754} + - component: {fileID: 54951618050930906} + m_Layer: 0 + m_Name: Cube (21) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1968125870113980 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4338571770571052} + - component: {fileID: 33042240079639002} + - component: {fileID: 23999690400254316} + - component: {fileID: 65036268793773134} + - component: {fileID: 54535591459721496} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1973551078556174 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4087120329389760} + - component: {fileID: 33872705848666028} + - component: {fileID: 23174535010165288} + - component: {fileID: 65105951029454400} + - component: {fileID: 54056410612055966} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1976151782962928 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4236099135834620} + - component: {fileID: 33582115172053684} + - component: {fileID: 23096272848959654} + - component: {fileID: 65629557697723210} + - component: {fileID: 54096022872427478} + m_Layer: 0 + m_Name: Cube (19) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1982044543243412 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4427376469361268} + - component: {fileID: 33827000314935804} + - component: {fileID: 23312751237282214} + - component: {fileID: 65088314430710516} + - component: {fileID: 54899133604090106} + m_Layer: 0 + m_Name: Cube (15) + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4009295745737424 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1891363201150404} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -7.3726196, y: 0, z: 2.8859253} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4164960940131030} + - {fileID: 4749160130140578} + - {fileID: 4338571770571052} + - {fileID: 4177933754698880} + - {fileID: 4087120329389760} + - {fileID: 4651111804478742} + - {fileID: 4718702251580304} + - {fileID: 4660214325542368} + - {fileID: 4514940374534480} + - {fileID: 4388482559409804} + - {fileID: 4954516583561608} + - {fileID: 4427376469361268} + - {fileID: 4623699988389196} + - {fileID: 4774289800767558} + - {fileID: 4236099135834620} + - {fileID: 4878969941173732} + - {fileID: 4993319262909854} + - {fileID: 4577358885722622} + - {fileID: 4476570172385034} + - {fileID: 4103576786580104} + - {fileID: 4441375731483946} + - {fileID: 4764150175004850} + - {fileID: 4477259198708720} + - {fileID: 4823141324099044} + - {fileID: 4449971584222136} + - {fileID: 4291324993800576} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4087120329389760 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1973551078556174} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0865887, y: 0.15078664, z: -1.0599997} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4103576786580104 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135431903566810} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.6865886, y: 1.6007867, z: 2.120993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4164960940131030 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782924439313676} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.34, y: 0.15078664, z: 0.10099297} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4177933754698880 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786646613441440} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2000012, y: 0.15078664, z: 0.10099297} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4236099135834620 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976151782962928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3865887, y: 1.6007867, z: -0.4730069} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4291324993800576 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1167448178862890} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.45, y: 6, z: 0.8} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 25 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4338571770571052 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1968125870113980} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21341121, y: 0.15078664, z: -1.06} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4388482559409804 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1816230717493454} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0865887, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4427376469361268 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1982044543243412} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2000012, y: 0.15078664, z: 1.450993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4441375731483946 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1587707655939574} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14341128, y: 3.1107867, z: 1.374993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4449971584222136 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1354155526139042} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.52, y: 4.29, z: 0.8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4476570172385034 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1374988358292644} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3865887, y: 1.6007867, z: 2.120993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4477259198708720 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1196610631746594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14341128, y: 3.1107867, z: 0.13099296} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4514940374534480 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1064871660791388} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399996, y: 0.15078664, z: 1.4509928} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4577358885722622 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670499018524874} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.80341136, y: 1.6007867, z: 2.120993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4623699988389196 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1090175471762280} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.80341136, y: 1.6007867, z: 0.77099305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4651111804478742 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1474979103987408} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2, y: 0.15078664, z: -1.0599997} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4660214325542368 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1317118657243700} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21341121, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4718702251580304 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831371572021294} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399996, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4749160130140578 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248606744262958} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399996, y: 0.15078664, z: -1.0599997} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4764150175004850 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106485554271698} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0465888, y: 3.1107867, z: 1.374993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4774289800767558 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353088983794658} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.80341136, y: 1.6007867, z: -0.4730069} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4823141324099044 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1674861392147034} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0465888, y: 3.1107867, z: 0.13099295} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4878969941173732 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137948235333676} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.6865886, y: 1.6007867, z: 0.77099305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4954516583561608 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865293098034466} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2000012, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4993319262909854 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944685599385028} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.6865886, y: 1.6007867, z: -0.4730069} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4009295745737424} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23049193452806938 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1354155526139042} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23096272848959654 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976151782962928} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23100528299737642 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831371572021294} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23112027818411474 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353088983794658} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23149564617083920 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1374988358292644} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23174535010165288 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1973551078556174} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23254097450750062 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1474979103987408} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23290509329654184 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135431903566810} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23312751237282214 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1982044543243412} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23318592241219450 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1587707655939574} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23343451329744444 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1674861392147034} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23366914300577848 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1090175471762280} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23368278019163316 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1167448178862890} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23369719216635336 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782924439313676} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23451724838369028 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106485554271698} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23455864340447686 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944685599385028} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23594603685268818 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1196610631746594} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23682164725945882 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1317118657243700} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23686877046966302 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248606744262958} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23725907615305758 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1064871660791388} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23748094386556584 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865293098034466} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23762387168929598 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670499018524874} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23815698867791572 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1816230717493454} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23824112448974570 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786646613441440} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23949344558310622 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137948235333676} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23999690400254316 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1968125870113980} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33006457195518570 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865293098034466} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33020693723931316 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106485554271698} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33034401239209410 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1167448178862890} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33042240079639002 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1968125870113980} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33056241526780332 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1090175471762280} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33142947721222464 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137948235333676} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33154514265921808 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1064871660791388} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33177537670350158 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1374988358292644} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33180422651657140 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135431903566810} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33203535397120560 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786646613441440} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33244977179775990 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944685599385028} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33286493997411974 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1674861392147034} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33323448418439082 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670499018524874} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33333833869289464 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1317118657243700} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33433988819315752 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353088983794658} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33448610436205884 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831371572021294} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33511183976207786 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248606744262958} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33521930288020708 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1816230717493454} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33582115172053684 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976151782962928} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33697759973505066 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1196610631746594} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33827000314935804 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1982044543243412} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33872705848666028 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1973551078556174} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33918760973720996 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782924439313676} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33935456700229776 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1587707655939574} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33952605549756516 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1474979103987408} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33985605594891500 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1354155526139042} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &54013230231199508 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1587707655939574} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54046269679688006 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1354155526139042} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54048734656193362 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1674861392147034} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54056410612055966 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1973551078556174} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54064347010680290 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1196610631746594} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54096022872427478 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976151782962928} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54142284079327612 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1064871660791388} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54192718935864072 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106485554271698} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54232456718854546 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137948235333676} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54360650393765210 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786646613441440} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54380193036815526 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865293098034466} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54392573588981808 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1090175471762280} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54433664650593400 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1474979103987408} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54504400023673052 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1317118657243700} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54535591459721496 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1968125870113980} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54545305306605294 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1374988358292644} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54552673020782832 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1167448178862890} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54566547699418724 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831371572021294} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54625939123884998 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1816230717493454} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54665542103012590 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248606744262958} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54699542697201940 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135431903566810} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54804888732110476 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670499018524874} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54847075394478182 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782924439313676} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54899133604090106 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1982044543243412} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54913291196183182 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353088983794658} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54951618050930906 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944685599385028} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!65 &65000788873359578 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1167448178862890} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65001885374897534 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1674861392147034} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65008742997792572 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786646613441440} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65036268793773134 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1968125870113980} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65039945731610718 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1587707655939574} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65065572033801572 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1196610631746594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65074960551033220 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353088983794658} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65076695193764564 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1816230717493454} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65087709174108018 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135431903566810} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65088314430710516 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1982044543243412} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65105951029454400 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1973551078556174} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65214114109641326 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1064871660791388} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65309600256887692 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782924439313676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65327368334679754 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944685599385028} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65540403349707104 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248606744262958} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65570974359007094 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1474979103987408} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65622964281278884 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831371572021294} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65629557697723210 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976151782962928} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65646946810752782 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865293098034466} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65683556564586648 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1090175471762280} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65725393365034122 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1137948235333676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65784849682538480 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670499018524874} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65840754164055734 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1317118657243700} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65902598669395318 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1354155526139042} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65979471088271746 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1374988358292644} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65985892811518598 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106485554271698} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/BrickPyramid.prefab.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/BrickPyramid.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..33b78c55856a72c8bf835042bfe92df85a22eb97 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/BrickPyramid.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8be2b3870e2cd4ad8bbf080059b2a132 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/StonePyramid.prefab b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/StonePyramid.prefab new file mode 100644 index 0000000000000000000000000000000000000000..089f1c7109c592eec68fc24bfdc5d2778c8455d1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/StonePyramid.prefab @@ -0,0 +1,2566 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1703380733698014} + m_IsPrefabParent: 1 +--- !u!1 &1169839036569880 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4120607597538196} + - component: {fileID: 33433975629830758} + - component: {fileID: 23642708656711878} + - component: {fileID: 65923300421878020} + - component: {fileID: 54602402697425512} + m_Layer: 0 + m_Name: Cube (16) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1203564081821444 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4023114408604094} + - component: {fileID: 33728940294925592} + - component: {fileID: 23856388905083202} + - component: {fileID: 65163908930146206} + - component: {fileID: 54034178707560706} + m_Layer: 0 + m_Name: Cube (24) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1249253398203644 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4464339725260622} + - component: {fileID: 33221974148370442} + - component: {fileID: 23650473133988002} + - component: {fileID: 65652162066049402} + - component: {fileID: 54419813554616434} + m_Layer: 0 + m_Name: Cube (10) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1251851865360474 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4149004258424732} + - component: {fileID: 33939953703043628} + - component: {fileID: 23198965392735768} + - component: {fileID: 65485249389066252} + - component: {fileID: 54907545227013006} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1255672026166928 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4708879335963040} + - component: {fileID: 33666316726346378} + - component: {fileID: 23314238069638924} + - component: {fileID: 65396863256321488} + - component: {fileID: 54757540943403436} + m_Layer: 0 + m_Name: Cube (15) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1285642494809658 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4204817466853434} + - component: {fileID: 33147983506707012} + - component: {fileID: 23209719729116094} + - component: {fileID: 65592657873808132} + - component: {fileID: 54419953518712562} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1296921472210208 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4390791408507232} + - component: {fileID: 33890204843534348} + - component: {fileID: 23076518739570394} + - component: {fileID: 65498025997696020} + - component: {fileID: 54181856069672248} + m_Layer: 0 + m_Name: Cube (19) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1316044084410182 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4866611725406302} + - component: {fileID: 33726294799325900} + - component: {fileID: 23278613646807386} + - component: {fileID: 65431236733426426} + - component: {fileID: 54584693976324684} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1331496265540616 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4827697197771640} + - component: {fileID: 33995011391031968} + - component: {fileID: 23691059410052646} + - component: {fileID: 65095130834540658} + - component: {fileID: 54067093863947926} + m_Layer: 0 + m_Name: Cube (27) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1397094071482240 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4356391385484946} + - component: {fileID: 33452891117065536} + - component: {fileID: 23469173610147868} + - component: {fileID: 65923919203215394} + - component: {fileID: 54054717234197066} + m_Layer: 0 + m_Name: Cube (21) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1410713005227408 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4857514425218206} + - component: {fileID: 33402563999010088} + - component: {fileID: 23193379723353272} + - component: {fileID: 65092099812324826} + - component: {fileID: 54736498312006578} + m_Layer: 0 + m_Name: Cube (20) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1433265065235240 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4062220246451558} + - component: {fileID: 33964605251331180} + - component: {fileID: 23315835544864326} + - component: {fileID: 65141390121297764} + - component: {fileID: 54695761130791934} + m_Layer: 0 + m_Name: Cube (28) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1459076498723662 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4406217703973854} + - component: {fileID: 33168459525893590} + - component: {fileID: 23307185377318152} + - component: {fileID: 65399507538075758} + - component: {fileID: 54729193513789508} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1470860995619738 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4226771078307502} + - component: {fileID: 33232585820218798} + - component: {fileID: 23301351047415002} + - component: {fileID: 65596499819021314} + - component: {fileID: 54192065985293514} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1495891890897208 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4362393443733570} + - component: {fileID: 33082636890209548} + - component: {fileID: 23473510480063210} + - component: {fileID: 65639462259115776} + - component: {fileID: 54212097332574524} + m_Layer: 0 + m_Name: Cube (23) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1522199283627248 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4923014877143284} + - component: {fileID: 33266263734232534} + - component: {fileID: 23962650795228672} + - component: {fileID: 65198366492778736} + - component: {fileID: 54237463565468704} + m_Layer: 0 + m_Name: Cube (22) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1535632152931056 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4601067381751512} + - component: {fileID: 33403326222136446} + - component: {fileID: 23908646670387520} + - component: {fileID: 65642692371865190} + - component: {fileID: 54067959571925856} + m_Layer: 0 + m_Name: Cube (25) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1549978409910654 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4013853447366862} + - component: {fileID: 33730555154370248} + - component: {fileID: 23211025800858770} + - component: {fileID: 65272535606825192} + - component: {fileID: 54526550432500116} + m_Layer: 0 + m_Name: Cube (18) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1581850224276520 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4100717402784500} + - component: {fileID: 33108169222084198} + - component: {fileID: 23634173937071252} + - component: {fileID: 65881074964080144} + - component: {fileID: 54783942051479446} + m_Layer: 0 + m_Name: Cube (13) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1661426467357706 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4340667660988344} + - component: {fileID: 33948512043339990} + - component: {fileID: 23278401600530412} + - component: {fileID: 65900226418851308} + - component: {fileID: 54554103726828352} + m_Layer: 0 + m_Name: Cube (9) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1669592753837612 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4312135729799726} + - component: {fileID: 33651609840479912} + - component: {fileID: 23312786416070674} + - component: {fileID: 65574863394778522} + - component: {fileID: 54703873885319296} + m_Layer: 0 + m_Name: Cube (29) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1703380733698014 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4457284105463742} + m_Layer: 0 + m_Name: StonePyramid + m_TagString: pyramid + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1745407680171740 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4390696942775486} + - component: {fileID: 33442678083086908} + - component: {fileID: 23296026945851280} + - component: {fileID: 65264846808951624} + - component: {fileID: 54415723741122472} + m_Layer: 0 + m_Name: Cube + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1782758057974058 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4645544324301598} + - component: {fileID: 33694707496604196} + - component: {fileID: 23158960214854150} + - component: {fileID: 65159175038396954} + - component: {fileID: 54446839030152516} + m_Layer: 0 + m_Name: Cube (26) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1794782548044806 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4188071084455684} + - component: {fileID: 33316211897840374} + - component: {fileID: 23755984333528722} + - component: {fileID: 65096665309841022} + - component: {fileID: 54708895666856470} + m_Layer: 0 + m_Name: Cube (8) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1917194284458144 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4729188999782278} + - component: {fileID: 33060488198812242} + - component: {fileID: 23801206268150314} + - component: {fileID: 65269322250042774} + - component: {fileID: 54167221477815476} + m_Layer: 0 + m_Name: Cube (12) + m_TagString: stone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4013853447366862 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549978409910654} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.82000005, y: 1.25, z: -0.47300643} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4023114408604094 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1203564081821444} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.67, y: 1.25, z: 2.120993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4062220246451558 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433265065235240} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.92000043, y: 2.3800004, z: 0.13099247} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4100717402784500 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1581850224276520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2000012, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4120607597538196 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169839036569880} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.82000005, y: 1.25, z: 0.77099353} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4149004258424732 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251851865360474} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0865887, y: 0.15078664, z: -1.0599997} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4188071084455684 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1794782548044806} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399996, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4204817466853434 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1285642494809658} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399996, y: 0.15078664, z: -1.0599997} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4226771078307502 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1470860995619738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2000012, y: 0.15078664, z: 0.10099297} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4312135729799726 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1669592753837612} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.34, y: 3.52, z: 0.8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4340667660988344 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1661426467357706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21341121, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4356391385484946 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397094071482240} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.67, y: 1.25, z: -0.47300643} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4362393443733570 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495891890897208} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.37, y: 1.25, z: 2.1209934} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4390696942775486 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1745407680171740} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.34, y: 0.15078664, z: 0.10099297} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4390791408507232 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1296921472210208} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.37, y: 1.25, z: -0.47300643} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4406217703973854 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1459076498723662} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2, y: 0.15078664, z: -1.0599997} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4457284105463742 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1703380733698014} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -5.900001, y: 0.96000004, z: -5.800001} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4390696942775486} + - {fileID: 4204817466853434} + - {fileID: 4866611725406302} + - {fileID: 4226771078307502} + - {fileID: 4149004258424732} + - {fileID: 4406217703973854} + - {fileID: 4188071084455684} + - {fileID: 4340667660988344} + - {fileID: 4464339725260622} + - {fileID: 4729188999782278} + - {fileID: 4100717402784500} + - {fileID: 4708879335963040} + - {fileID: 4120607597538196} + - {fileID: 4013853447366862} + - {fileID: 4390791408507232} + - {fileID: 4857514425218206} + - {fileID: 4356391385484946} + - {fileID: 4923014877143284} + - {fileID: 4362393443733570} + - {fileID: 4023114408604094} + - {fileID: 4601067381751512} + - {fileID: 4645544324301598} + - {fileID: 4827697197771640} + - {fileID: 4062220246451558} + - {fileID: 4312135729799726} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4464339725260622 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249253398203644} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399996, y: 0.15078664, z: 1.4509928} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4601067381751512 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535632152931056} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.26999965, y: 2.3800004, z: 1.3749925} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4645544324301598 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782758057974058} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.92, y: 2.38, z: 1.374993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4708879335963040 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1255672026166928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.2000012, y: 0.15078664, z: 1.450993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4729188999782278 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917194284458144} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0865887, y: 0.15078664, z: 2.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4827697197771640 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331496265540616} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.26999965, y: 2.3800004, z: 0.13099249} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4857514425218206 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410713005227408} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.67, y: 1.25, z: 0.77099353} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4866611725406302 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316044084410182} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21341121, y: 0.15078664, z: -1.06} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4923014877143284 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1522199283627248} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.82000005, y: 1.25, z: 2.1209934} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457284105463742} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23076518739570394 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1296921472210208} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23158960214854150 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782758057974058} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23193379723353272 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410713005227408} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23198965392735768 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251851865360474} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23209719729116094 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1285642494809658} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23211025800858770 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549978409910654} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23278401600530412 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1661426467357706} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23278613646807386 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316044084410182} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23296026945851280 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1745407680171740} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23301351047415002 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1470860995619738} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23307185377318152 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1459076498723662} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23312786416070674 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1669592753837612} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23314238069638924 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1255672026166928} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23315835544864326 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433265065235240} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23469173610147868 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397094071482240} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23473510480063210 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495891890897208} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23634173937071252 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1581850224276520} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23642708656711878 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169839036569880} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23650473133988002 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249253398203644} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23691059410052646 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331496265540616} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23755984333528722 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1794782548044806} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23801206268150314 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917194284458144} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23856388905083202 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1203564081821444} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23908646670387520 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535632152931056} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23962650795228672 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1522199283627248} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33060488198812242 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917194284458144} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33082636890209548 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495891890897208} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33108169222084198 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1581850224276520} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33147983506707012 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1285642494809658} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33168459525893590 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1459076498723662} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33221974148370442 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249253398203644} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33232585820218798 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1470860995619738} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33266263734232534 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1522199283627248} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33316211897840374 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1794782548044806} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33402563999010088 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410713005227408} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33403326222136446 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535632152931056} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33433975629830758 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169839036569880} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33442678083086908 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1745407680171740} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33452891117065536 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397094071482240} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33651609840479912 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1669592753837612} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33666316726346378 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1255672026166928} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33694707496604196 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782758057974058} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33726294799325900 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316044084410182} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33728940294925592 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1203564081821444} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33730555154370248 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549978409910654} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33890204843534348 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1296921472210208} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33939953703043628 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251851865360474} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33948512043339990 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1661426467357706} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33964605251331180 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433265065235240} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33995011391031968 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331496265540616} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &54034178707560706 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1203564081821444} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54054717234197066 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397094071482240} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54067093863947926 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331496265540616} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54067959571925856 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535632152931056} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54167221477815476 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917194284458144} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54181856069672248 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1296921472210208} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54192065985293514 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1470860995619738} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54212097332574524 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495891890897208} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54237463565468704 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1522199283627248} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54415723741122472 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1745407680171740} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54419813554616434 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249253398203644} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54419953518712562 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1285642494809658} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54446839030152516 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782758057974058} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54526550432500116 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549978409910654} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54554103726828352 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1661426467357706} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54584693976324684 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316044084410182} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54602402697425512 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169839036569880} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54695761130791934 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433265065235240} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54703873885319296 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1669592753837612} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54708895666856470 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1794782548044806} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54729193513789508 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1459076498723662} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54736498312006578 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410713005227408} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54757540943403436 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1255672026166928} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54783942051479446 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1581850224276520} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!54 &54907545227013006 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251851865360474} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!65 &65092099812324826 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410713005227408} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65095130834540658 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331496265540616} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65096665309841022 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1794782548044806} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65141390121297764 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433265065235240} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65159175038396954 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1782758057974058} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65163908930146206 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1203564081821444} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65198366492778736 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1522199283627248} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65264846808951624 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1745407680171740} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65269322250042774 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917194284458144} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65272535606825192 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549978409910654} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65396863256321488 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1255672026166928} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65399507538075758 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1459076498723662} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65431236733426426 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316044084410182} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65485249389066252 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251851865360474} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65498025997696020 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1296921472210208} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65574863394778522 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1669592753837612} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65592657873808132 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1285642494809658} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65596499819021314 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1470860995619738} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65639462259115776 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495891890897208} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65642692371865190 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535632152931056} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65652162066049402 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249253398203644} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65881074964080144 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1581850224276520} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65900226418851308 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1661426467357706} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65923300421878020 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169839036569880} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65923919203215394 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397094071482240} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/StonePyramid.prefab.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/StonePyramid.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..d0455eb8c2d776cbd5fcb512bdeae808778ba241 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Prefabs/StonePyramid.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41512dd84b60643ceb3855fcf9d7d318 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scenes.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..4113ee549718a7857795b30a1b59f6160cb80550 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f391d733a889c4e2f92d1cfdf0912976 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scenes/Pyramids.unity b/Project/Assets/ML-Agents/Examples/Pyramids/Scenes/Pyramids.unity new file mode 100644 index 0000000000000000000000000000000000000000..27a9aa08b98dc3cfa115a01ef3f9bf9eea159bed --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scenes/Pyramids.unity @@ -0,0 +1,1134 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.6965513, g: 0, b: 1, a: 1} + m_AmbientGroundColor: {r: 1, g: 0.45977026, b: 0, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &14183653 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (13) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -157.9 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &105536951 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (9) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -34.19998 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &264688056 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &304577311 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (2) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -63 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &323110102 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (1) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -34.8 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &418198956 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (4) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -123.7 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &418397397 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (14) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -220.9 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1 &499540684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 499540687} + - component: {fileID: 499540686} + - component: {fileID: 499540685} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &499540685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 499540684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &499540686 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 499540684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &499540687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 499540684} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &520016803 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (6) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -186.7 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &931192784 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (12) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -123.099976 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &931495153 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (8) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: 0.60002136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + - component: {fileID: 1009000885} + m_Layer: 0 + m_Name: OverviewCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927} + m_LocalPosition: {x: 0, y: 30, z: -30} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0} +--- !u!114 &1009000885 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec40c70d5160b47cd8deaab79e24892c, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 1534969848} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.58746636, g: 0.71687025, b: 0.78431374, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 45 + orthographic: 0 + orthographic size: 15.18 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 1 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1156426723 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (3) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -97.8 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &1169600160 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (10) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -62.399994 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &1355721707 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &1378840242 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 0} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (5) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -158.5 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!4 &1534969848 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4518417139497368, guid: bd804431e808a492bb5658bcd296e58e, + type: 3} + m_PrefabInstance: {fileID: 2127973662} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1547253606 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (11) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -97.19998 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &1613855850 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (15) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 136 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -186.09998 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &2127934646 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1464170487903594, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_Name + value: AreaPB (7) + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: -221.5 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} +--- !u!1001 &2127973662 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4603070702628152, guid: bd804431e808a492bb5658bcd296e58e, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bd804431e808a492bb5658bcd296e58e, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scenes/Pyramids.unity.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Scenes/Pyramids.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..439237ef622b77f0fec55209f638de44e255be86 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scenes/Pyramids.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 35afbc150a44b4aa69ca04685486b5c4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..6b3bfa152b6c2857fc466075c3a7cfff6289609e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c6b273d7fcab4956958a9049c2a850c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidAgent.cs b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..5371a33d8412ee01e26159eb76a35f8d54244f98 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidAgent.cs @@ -0,0 +1,115 @@ +using System; +using System.Linq; +using UnityEngine; +using Random = UnityEngine.Random; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class PyramidAgent : Agent +{ + public GameObject area; + PyramidArea m_MyArea; + Rigidbody m_AgentRb; + PyramidSwitch m_SwitchLogic; + public GameObject areaSwitch; + public bool useVectorObs; + + public override void Initialize() + { + m_AgentRb = GetComponent(); + m_MyArea = area.GetComponent(); + m_SwitchLogic = areaSwitch.GetComponent(); + } + + public override void CollectObservations(VectorSensor sensor) + { + if (useVectorObs) + { + sensor.AddObservation(m_SwitchLogic.GetState()); + sensor.AddObservation(transform.InverseTransformDirection(m_AgentRb.velocity)); + } + } + + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var action = act[0]; + switch (action) + { + case 1: + dirToGo = transform.forward * 1f; + break; + case 2: + dirToGo = transform.forward * -1f; + break; + case 3: + rotateDir = transform.up * 1f; + break; + case 4: + rotateDir = transform.up * -1f; + break; + } + transform.Rotate(rotateDir, Time.deltaTime * 200f); + m_AgentRb.AddForce(dirToGo * 2f, ForceMode.VelocityChange); + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + AddReward(-1f / MaxStep); + MoveAgent(actionBuffers.DiscreteActions); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[0] = 3; + } + else if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + else if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[0] = 4; + } + else if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + } + + public override void OnEpisodeBegin() + { + var enumerable = Enumerable.Range(0, 9).OrderBy(x => Guid.NewGuid()).Take(9); + var items = enumerable.ToArray(); + + m_MyArea.CleanPyramidArea(); + + m_AgentRb.velocity = Vector3.zero; + m_MyArea.PlaceObject(gameObject, items[0]); + transform.rotation = Quaternion.Euler(new Vector3(0f, Random.Range(0, 360))); + + m_SwitchLogic.ResetSwitch(items[1], items[2]); + m_MyArea.CreateStonePyramid(1, items[3]); + m_MyArea.CreateStonePyramid(1, items[4]); + m_MyArea.CreateStonePyramid(1, items[5]); + m_MyArea.CreateStonePyramid(1, items[6]); + m_MyArea.CreateStonePyramid(1, items[7]); + m_MyArea.CreateStonePyramid(1, items[8]); + } + + void OnCollisionEnter(Collision collision) + { + if (collision.gameObject.CompareTag("goal")) + { + SetReward(2f); + EndEpisode(); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidAgent.cs.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b5d5a5168a19c27cb3c2326ee8bffd503b4a524d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8db44472779248d3be46895c4d562d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidArea.cs b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidArea.cs new file mode 100644 index 0000000000000000000000000000000000000000..2116e172a2e4c4f897a56eb3eab4ebfc392a9f6d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidArea.cs @@ -0,0 +1,54 @@ +using UnityEngine; +using Unity.MLAgentsExamples; + +public class PyramidArea : Area +{ + public GameObject pyramid; + public GameObject stonePyramid; + public GameObject[] spawnAreas; + public int numPyra; + public float range; + + public void CreatePyramid(int numObjects, int spawnAreaIndex) + { + CreateObject(numObjects, pyramid, spawnAreaIndex); + } + + public void CreateStonePyramid(int numObjects, int spawnAreaIndex) + { + CreateObject(numObjects, stonePyramid, spawnAreaIndex); + } + + void CreateObject(int numObjects, GameObject desiredObject, int spawnAreaIndex) + { + for (var i = 0; i < numObjects; i++) + { + var newObject = Instantiate(desiredObject, Vector3.zero, + Quaternion.Euler(0f, 0f, 0f), transform); + PlaceObject(newObject, spawnAreaIndex); + } + } + + public void PlaceObject(GameObject objectToPlace, int spawnAreaIndex) + { + var spawnTransform = spawnAreas[spawnAreaIndex].transform; + var xRange = spawnTransform.localScale.x / 2.1f; + var zRange = spawnTransform.localScale.z / 2.1f; + + objectToPlace.transform.position = new Vector3(Random.Range(-xRange, xRange), 2f, Random.Range(-zRange, zRange)) + + spawnTransform.position; + } + + public void CleanPyramidArea() + { + foreach (Transform child in transform) + if (child.CompareTag("pyramid")) + { + Destroy(child.gameObject); + } + } + + public override void ResetArea() + { + } +} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidArea.cs.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidArea.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..523854fada82bb911338cd8c722b64f4fc1c5078 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e048de15d0b8a4643a75c2b09981792e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidSwitch.cs b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidSwitch.cs new file mode 100644 index 0000000000000000000000000000000000000000..6f2b62739836b1d518c73081441e8b4d90123267 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidSwitch.cs @@ -0,0 +1,44 @@ +using UnityEngine; + +public class PyramidSwitch : MonoBehaviour +{ + public Material onMaterial; + public Material offMaterial; + public GameObject myButton; + bool m_State; + GameObject m_Area; + PyramidArea m_AreaComponent; + int m_PyramidIndex; + + public bool GetState() + { + return m_State; + } + + void Start() + { + m_Area = gameObject.transform.parent.gameObject; + m_AreaComponent = m_Area.GetComponent(); + } + + public void ResetSwitch(int spawnAreaIndex, int pyramidSpawnIndex) + { + m_AreaComponent.PlaceObject(gameObject, spawnAreaIndex); + m_State = false; + m_PyramidIndex = pyramidSpawnIndex; + tag = "switchOff"; + transform.rotation = Quaternion.Euler(0f, 0f, 0f); + myButton.GetComponent().material = offMaterial; + } + + void OnCollisionEnter(Collision other) + { + if (other.gameObject.CompareTag("agent") && m_State == false) + { + myButton.GetComponent().material = onMaterial; + m_State = true; + m_AreaComponent.CreatePyramid(1, m_PyramidIndex); + tag = "switchOn"; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidSwitch.cs.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidSwitch.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0070720a7152d176826c73ff0cc85b4c0740ed72 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/Scripts/PyramidSwitch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abd01d977612744528db278c446e9a11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/TFModels.meta b/Project/Assets/ML-Agents/Examples/Pyramids/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..0f94de02132ad28785325d763d70043cbc3285a6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c577914cc4ace45baa8c4dd54778ae00 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn b/Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn new file mode 100644 index 0000000000000000000000000000000000000000..d8761cf2063367fa38691ae609dfdd0389e5aa6a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c022b284a1bac103388f1f46fadb27f2b5e15a7298902311b6012fc6849f9b0b +size 1418369 diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn.meta b/Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..bd8740128163cd56e8ab6177cca409769be1eb08 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Pyramids/TFModels/Pyramids.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa3fa19a09ec44a41be3da037783ad41 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets.meta b/Project/Assets/ML-Agents/Examples/SharedAssets.meta new file mode 100644 index 0000000000000000000000000000000000000000..7883bbb630a040f705e17096a6f0e494cba8a7b8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f83c851cdce246a0b97472ec6d35622 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..04998f19317b2a95e1e6d81b5fcba9e045177b64 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9b6abdaf6376c42e5acce313e3a7ed94 +folderAsset: yes +timeCreated: 1517449349 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentBlue.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentBlue.mat new file mode 100644 index 0000000000000000000000000000000000000000..98afe276c85991a80022bc840443e213ce8898c9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentBlue.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: AgentBlue + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentBlue.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentBlue.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..af271123ae08485db742a26f9ae345361c61e7f3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentBlue.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9fa44c2c3f8ce74ca39a3355ea42631 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentPurple.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentPurple.mat new file mode 100644 index 0000000000000000000000000000000000000000..752521c0f45d6141109b03ae00738f5a4e47fdd0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentPurple.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: AgentPurple + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.5541859, g: 0.42738053, b: 0.78431374, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentPurple.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentPurple.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..d59a9ba8e77e77a915cfc39235ee3b36fd2e044e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/AgentPurple.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0da1813c36914e678ba57f2790424e1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/BallMat.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/BallMat.mat new file mode 100644 index 0000000000000000000000000000000000000000..4e66ca8b9846c2c6a921e4542b93d8d257c0c0c4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/BallMat.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: BallMat + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: be5d24d9d9e024be784fbcb911cb18e8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.23 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.5147059, g: 0.5147059, b: 0.5147059, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/BallMat.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/BallMat.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..94dd19c08e0708194a8e07da81a59623a51a4194 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/BallMat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbb71e91b4d8a44999b1f690a488dc5a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Black.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Black.mat new file mode 100644 index 0000000000000000000000000000000000000000..07140c97f397a1c527f787e10909de9bb65efbb1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Black.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Black + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.048, g: 0.048, b: 0.048, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Black.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Black.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac5ac6b21d236c6735a015fbcb25bb5776f3f3a0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Black.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 69fefdd39d2b34b169e921910bed9c0d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Brown.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Brown.mat new file mode 100644 index 0000000000000000000000000000000000000000..0570f195c8093ff1780d52a3aa3b6fe73a1a64c4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Brown.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Brown + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.294, g: 0.294, b: 0.294, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Brown.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Brown.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..b0f3634acda65f037478dc6c01418d31c3e184a8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Brown.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16fb7514bd09f43f8ae773b97bf3819d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Ball.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Ball.mat new file mode 100644 index 0000000000000000000000000000000000000000..2be8f242e379e27a1a7bba575a798897f8828d63 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Ball.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Checkers_Ball + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 2, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: c922805328ab07d4396783401534201b, type: 3} + m_Scale: {x: 2, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Ball.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Ball.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..3111a082783eca01dc3109a3847123dd780c56b8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Ball.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf2a3769e6d5446698f2e3f5aab68915 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Gray.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Gray.mat new file mode 100644 index 0000000000000000000000000000000000000000..537e65029cb7bfb6c0636768048d90beb93de382 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Gray.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Checkers_Gray + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _METALLICGLOSSMAP _NORMALMAP _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: c4b43567aafd8a040b34a6a86ce60ad9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: c922805328ab07d4396783401534201b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 0dbde4b748147ad46bb2c40602273db7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 0dbde4b748147ad46bb2c40602273db7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Gray.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Gray.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..87be1afdc39ac2241a46df7b6acdce319c4bd9d0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Checkers_Gray.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36c7baa347d68f347a9aa9698aa1bcdd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Door.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Door.mat new file mode 100644 index 0000000000000000000000000000000000000000..1b625f314ffe5d44f72391a2a67354ae8fd61e0f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Door.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Door + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.2830189, g: 0.22119384, b: 0.16153437, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Door.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Door.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..d49ff8d65b3941fb7659c2647f18d5f2ae877500 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Door.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: daf629e39cc0f4521b64c93cd9604da9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Eye.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Eye.mat new file mode 100644 index 0000000000000000000000000000000000000000..703bddeb2b720271b3f10738fb6345fe61da8e16 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Eye.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Eye + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHATEST_ON _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2450 + stringTagMap: + RenderType: TransparentCutout + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 10912, guid: 0000000000000000f000000000000000, type: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.058823526, g: 0.058823526, b: 0.058823526, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Eye.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Eye.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e5b564d11fda58f2699d9efa6df692b366fe303 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Eye.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f731be6866ce749fd8349e67ae81f76a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GrayMiddle.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GrayMiddle.mat new file mode 100644 index 0000000000000000000000000000000000000000..1adb713177213a1159646b90aca6718b81bf1308 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GrayMiddle.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GrayMiddle + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GrayMiddle.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GrayMiddle.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..e03ac173c7880e1002098a234e86bab8e98df36a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GrayMiddle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66163cf35956a4be08e801b750c26f33 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Green.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Green.mat new file mode 100644 index 0000000000000000000000000000000000000000..590df8d52d3b1f8b777c4eeb5d6bd4b4fd38f807 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Green.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Green + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Green.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Green.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..c3e31582957281d65cf3245c2626ce70ca1500ab --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Green.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c67450f290f3e4897bc40276a619e78d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMat.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMat.mat new file mode 100644 index 0000000000000000000000000000000000000000..5ea90fe810159b093a45fddaf613554c5fd381b5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMat.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GridMat + m_Shader: {fileID: 4800000, guid: bbecf177c38d84ff08d7c683c116affd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DrawU: 1 + - _DrawV: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _GridSize: 3 + - _LineOffset: 0.5 + - _LineSize: 0.01 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Offset: 0 + - _Parallax: 0.02 + - _RepeatCount: 5 + - _SelectCell: 0 + - _SelectedCellX: 0 + - _SelectedCellY: 0 + - _SmoothnessTextureChannel: 0 + - _Spacing: 0.5 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _CellColor: {r: 0.23529412, g: 0.23529412, b: 0.23529412, a: 1} + - _Color: {r: 0.935151, g: 0.9705882, b: 0.3282872, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 1} + - _SelectedColor: {r: 0.1586206, g: 1, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMat.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMat.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..2f55eb51317b96740a0ff0fceef26af2276b45c2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMat.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dc7340babc47c45c987fee58e013ed3f +timeCreated: 1527928195 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatBall.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatBall.mat new file mode 100644 index 0000000000000000000000000000000000000000..b44fc369cd871e8bde8f69d8edf0e7dced419405 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatBall.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GridMatBall + m_Shader: {fileID: 4800000, guid: bbecf177c38d84ff08d7c683c116affd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DrawU: 1 + - _DrawV: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _GridSize: 4 + - _LineOffset: 0.5 + - _LineSize: 0.1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Offset: 0 + - _Parallax: 0.02 + - _RepeatCount: 5 + - _SelectCell: 0 + - _SelectedCellX: 0 + - _SelectedCellY: 0 + - _SmoothnessTextureChannel: 0 + - _Spacing: 0.5 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _CellColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + - _Color: {r: 0.935151, g: 0.9705882, b: 0.3282872, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 0.47058824, g: 0.47058824, b: 0.47058824, a: 1} + - _SelectedColor: {r: 0.1586206, g: 1, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatBall.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatBall.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac711d624b4f59bf1bfdc630fcd2f77fe101a6cf --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatBall.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e687a6242afc4a7e993fec6042518a9 +timeCreated: 1527928195 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatFloor.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatFloor.mat new file mode 100644 index 0000000000000000000000000000000000000000..e26ffac9c680ebaf0d1138811244f76b6ee67725 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatFloor.mat @@ -0,0 +1,94 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GridMatFloor + m_Shader: {fileID: 4800000, guid: bbecf177c38d84ff08d7c683c116affd, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DrawU: 1 + - _DrawV: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _GridSize: 35 + - _LineOffset: 0.5 + - _LineSize: 0.02 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Offset: 0 + - _Parallax: 0.02 + - _RepeatCount: 5 + - _SelectCell: 0 + - _SelectedCellX: 0 + - _SelectedCellY: 0 + - _SmoothnessTextureChannel: 0 + - _Spacing: 0.5 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _CellColor: {r: 0.116, g: 0.116, b: 0.116, a: 1} + - _Color: {r: 0.935151, g: 0.9705882, b: 0.3282872, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 0.15686275, g: 0.15686275, b: 0.15686275, a: 1} + - _SelectedColor: {r: 0.1586206, g: 1, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatFloor.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatFloor.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..f92774ef5ac46960b4fe68ae0e4a3d3fdfce2e21 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatFloor.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: acba6bf2a290a496bb8989b42bf8698d +timeCreated: 1527928195 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatHallway.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatHallway.mat new file mode 100644 index 0000000000000000000000000000000000000000..eb37de823af2df7072aa9807fc1e7129eed99906 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatHallway.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GridMatHallway + m_Shader: {fileID: 4800000, guid: bbecf177c38d84ff08d7c683c116affd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DrawU: 1 + - _DrawV: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _GridSize: 12 + - _LineOffset: 0.5 + - _LineSize: 0.02 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Offset: 0 + - _Parallax: 0.02 + - _RepeatCount: 5 + - _SelectCell: 0 + - _SelectedCellX: 0 + - _SelectedCellY: 0 + - _SmoothnessTextureChannel: 0 + - _Spacing: 0.5 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _CellColor: {r: 0.116, g: 0.116, b: 0.116, a: 1} + - _Color: {r: 0.935151, g: 0.9705882, b: 0.3282872, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 0.15686275, g: 0.15686275, b: 0.15686275, a: 1} + - _SelectedColor: {r: 0.1586206, g: 1, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatHallway.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatHallway.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..c8534a9c2c49aad4279f9f28ebe6367b803630e6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatHallway.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d3855c73a8adc453f89d8df66068f21f +timeCreated: 1527928195 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatMoveable.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatMoveable.mat new file mode 100644 index 0000000000000000000000000000000000000000..6848cdb2d4cdd75dee0085ca711279418e72c891 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatMoveable.mat @@ -0,0 +1,94 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GridMatMoveable + m_Shader: {fileID: 4800000, guid: bbecf177c38d84ff08d7c683c116affd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DrawU: 1 + - _DrawV: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _GridSize: 1 + - _LineOffset: 0.5 + - _LineSize: 0.08 + - _LineWidth: 0.1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Offset: 0 + - _Parallax: 0.02 + - _ParcelSize: 1 + - _RepeatCount: 5 + - _SelectCell: 0 + - _SelectedCellX: 0 + - _SelectedCellY: 0 + - _SmoothnessTextureChannel: 0 + - _Spacing: 0.5 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + - _transparency: 1 + m_Colors: + - _CellColor: {r: 0.9254902, g: 0.9372549, b: 0.9411765, a: 1} + - _Color: {r: 0.935151, g: 0.9705882, b: 0.3282872, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 0.7058824, g: 0.7058824, b: 0.7058824, a: 1} + - _MainColor: {r: 1, g: 1, b: 1, a: 1} + - _SelectedColor: {r: 0.1586206, g: 1, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatMoveable.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatMoveable.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..3653132039f136c97e30f95c2dd87ca3a5079ec5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridMatMoveable.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b26f66bd59d534f92a03ca870ae19724 +timeCreated: 1527928195 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridPatternShader.shader b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridPatternShader.shader new file mode 100644 index 0000000000000000000000000000000000000000..9979743aea1c7fad27c1370d0c2f044f489f45cf --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridPatternShader.shader @@ -0,0 +1,162 @@ +// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax. + +Shader "ML-Agents/GridPattern" { + Properties { + _LineColor ("Line Color", Color) = (1,1,1,1) + _CellColor ("Cell Color", Color) = (0,0,0,0) + // _SelectedColor ("Selected Color", Color) = (1,0,0,1) + [PerRendererData] _MainTex ("Albedo (RGB)", 2D) = "white" {} + [IntRange] _GridSize("Grid Size", Range(1,100)) = 10 + _LineSize("Line Size", Range(0,1)) = 0.15 + // [FloatRange] _LineOffset("Line Offset", Range(0,1)) = 0 + [IntRange] _DrawU("Draw U Toggle ( 0 = False , 1 = True )", Range(0,1)) = 1 + [IntRange] _DrawV("Draw V Toggle ( 0 = False , 1 = True )", Range(0,1)) = 1 + // [IntRange] _SelectCell("Select Cell Toggle ( 0 = False , 1 = True )", Range(0,1)) = 0.0 + // [IntRange] _SelectedCellX("Selected Cell X", Range(0,100)) = 0.0 + // [IntRange] _SelectedCellY("Selected Cell Y", Range(0,100)) = 0.0 + } + SubShader { + Tags { "Queue"="AlphaTest" "RenderType"="TransparentCutout" } + LOD 200 + + + CGPROGRAM + // Physically based Standard lighting model, and enable shadows on all light types + #pragma surface surf Standard fullforwardshadows + + // Use shader model 3.0 target, to get nicer looking lighting + #pragma target 3.0 + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + }; + + half _Glossiness = 0.0; + half _Metallic = 0.0; + float4 _LineColor; + float4 _CellColor; + // float4 _SelectedColor; + + float _GridSize; + // float _LineOffset; + float _LineSize; + + float _DrawU; + float _DrawV; + // float _SelectCell; + // float _SelectedCellX; + // float _SelectedCellY; + + // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. + // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. + // #pragma instancing_options assumeuniformscaling + UNITY_INSTANCING_BUFFER_START(Props) + // put more per-instance properties here + UNITY_INSTANCING_BUFFER_END(Props) + + void surf (Input IN, inout SurfaceOutputStandard o) { + // Albedo comes from a texture tinted by color + + float2 uv = IN.uv_MainTex; + + // _SelectedCellX = floor(_SelectedCellX); + // _SelectedCellY = floor(_SelectedCellY); + + fixed4 c = float4(0.0,0.0,0.0,0.0); + + float brightness = 1.0; + + float gsize = floor(_GridSize); + + + + gsize += _LineSize; + + float2 id; + + id.x = floor(uv.x/(1.0/gsize)); + // id.y = floor(uv.y/(1.0/gsize)); + id.y = floor(uv.y/(1.0/gsize)); + + float4 color = _CellColor; + brightness = _CellColor.w; + + // //This checks that the cell is currently selected if the Select Cell slider is set to 1 ( True ) + // if (round(_SelectCell) == 1.0 && id.x == _SelectedCellX && id.y == _SelectedCellY) + // { + // brightness = _SelectedColor.w; + // color = _SelectedColor; + // } + + // if (frac(uv.x*gsize) <= _LineSize || frac(uv.y*gsize) <= _LineSize) + // { + // brightness = _LineColor.w; + // color = _LineColor; + // } + if(round(_DrawU) == 1.0) + { + if (frac(uv.x*gsize) <= _LineSize) + { + // if (frac(uv.x*gsize) <= _LineSize) + // { + brightness = _LineColor.w; + color = _LineColor; + } + } + if(round(_DrawV) == 1.0) + { + if (frac(uv.y*gsize) <= _LineSize) + { + brightness = _LineColor.w; + color = _LineColor; + } + } + // // if (round(uv.x*gsize) == .8) + // // if (uv.x >= _LineOffset) + // if (uv.x >= .2 && uv.x <= .3) + // { + // brightness = _LineColor.w; + // color = _LineColor; + // // color = _CellColor; + // // brightness = _CellColor.w; + // } + + // if (frac(uv.x*gsize) <= _LineSize && frac(uv.y*gsize) <= _LineSize) + // { + // // brightness = _LineColor.w; + // // color = _LineColor; + // color = _CellColor; + // brightness = _CellColor.w; + // } + + + // if (frac(uv.x*gsize/_LineOffset) <= _LineSize) + // { + // brightness = _LineColor.w; + // color = _LineColor; + // } + // if (frac(uv.x*gsize/.5) <= _LineSize || fradc(uv.y*gsize) <= _LineSize) + // { + // brightness = _LineColor.w; + // color = _LineColor; + // } + + + //Clip transparent spots using alpha cutout + if (brightness == 0.0) { + clip(c.a - 1.0); + } + + + o.Albedo = float4( color.x*brightness,color.y*brightness,color.z*brightness,brightness); + // Metallic and smoothness come from slider variables + o.Metallic = 0.0; + o.Smoothness = 0.0; + o.Alpha = 0.0; + } + ENDCG + } + FallBack "Diffuse" +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridPatternShader.shader.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridPatternShader.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..d4263593563da525236ba007f3fae79e73feab04 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/GridPatternShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bbecf177c38d84ff08d7c683c116affd +timeCreated: 1527928195 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Headband.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Headband.mat new file mode 100644 index 0000000000000000000000000000000000000000..13b5854401121e714a66c0cfcac42cd501591113 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Headband.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Headband + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1} + - _EmissionColor: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Headband.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Headband.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..2d90b1a9f6ff355a09150318a4195b9ff4a7c1b9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Headband.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04be259c590de46f69db4cbd1da877d5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGreen.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGreen.mat new file mode 100644 index 0000000000000000000000000000000000000000..3dd657a61d28d621291cf790cd78177909181917 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGreen.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LightGreen + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.5926951, g: 0.7372549, b: 0.5994979, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGreen.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGreen.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..ae89492b24c649e09937028db02551ee976fc1de --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGreen.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df32cc593804f42df97464dc455057b8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat new file mode 100644 index 0000000000000000000000000000000000000000..f27b491a8c7223b2156b4c9c4c2549d650587264 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LightGrey + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.6, g: 0.6, b: 0.6, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..313168784bfc04ad882173605944e43fcdfc8bc5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fdf8e49597ff42648c9e99d7ecfc005 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightRed.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightRed.mat new file mode 100644 index 0000000000000000000000000000000000000000..b047938101d3ed066bcfb85dd82a11dfa617fe54 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightRed.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LightRed + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.74509805, g: 0.48966902, b: 0.45290273, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightRed.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightRed.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..cf86f1d399ccda7eb747c3250c24e53b7cab0a3c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightRed.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a1daf31cdf41e484ca9ac33a5c6f524a +timeCreated: 1513128297 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LogoSymbol.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LogoSymbol.mat new file mode 100644 index 0000000000000000000000000000000000000000..b577c7d2e7f7fb16bed55e31c9f469115c57d907 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LogoSymbol.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LogoSymbol + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: ETC1_EXTERNAL_ALPHA _ALPHATEST_ON _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2450 + stringTagMap: + RenderType: TransparentCutout + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: be5d24d9d9e024be784fbcb911cb18e8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.714 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LogoSymbol.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LogoSymbol.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..51b1f5ed37813c38ceb5dc6d423e90ae144d54fc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LogoSymbol.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3825ef6e3f8624bc5934d59be09c0c92 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Net.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Net.mat new file mode 100644 index 0000000000000000000000000000000000000000..6375528858fd79bdc22d508abbff6a8451eb91e5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Net.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Net + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHATEST_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2450 + stringTagMap: + RenderType: TransparentCutout + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 47c07dd05d80a8d42b0329ff416b8455, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Net.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Net.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..b795cf26cac2dc87eaa1723903224e426caad16e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Net.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: daad6e777b6e99a46bbcded7cf6816ee +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Orange.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Orange.mat new file mode 100644 index 0000000000000000000000000000000000000000..d6865f08294ba15133d4ec2489a5dd0d6f4cee12 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Orange.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Orange + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1} + - _EmissionColor: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Orange.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Orange.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..63d90aafd4602ff51c0db7a75f197f678182f206 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Orange.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c59bd36def9a4684be49a21cf201a2d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Outline.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Outline.mat new file mode 100644 index 0000000000000000000000000000000000000000..d7df39c32981c6e1e50f8330ef6ff68b04f3f74b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Outline.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Outline + m_Shader: {fileID: 4800000, guid: 5dfe02aa25125453eaaaa295936dc8cd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OutlineVal: 0.08 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpeedX: 0 + - _SpeedY: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + - _Zoom: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineCol: {r: 1, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Outline.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Outline.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebd91373e0e4b13a3a194c3175a63c6980902029 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Outline.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed61fc8f39c7640afacb9c268a73983c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat new file mode 100644 index 0000000000000000000000000000000000000000..2cf609e1359b6736449da1640424d1a274ebbf3f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Purple + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.875, g: 0.39112502, b: 0.86165184, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..c8eb5652f7019603868837dd1ac22ee0d314e3d0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff14134b548ad4790809bd7ffdffbf32 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Red.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Red.mat new file mode 100644 index 0000000000000000000000000000000000000000..8e744aa4d4ef5b5a05449136e5bc611b566cff11 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Red.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Red + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Red.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Red.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..429c30fd299a8705329fc7e89dc61dc1ccace2c5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Red.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88b9ae7af2c1748a0a1f63407587a601 +timeCreated: 1513128297 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderOutline.shader b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderOutline.shader new file mode 100644 index 0000000000000000000000000000000000000000..2daffef41ebda3f2026bfd4290b9f979002852f5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderOutline.shader @@ -0,0 +1,88 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Custom/Outline and ScreenSpace texture" +{ + Properties + { + [Header(Outline)] + _OutlineVal ("Outline value", Range(0., 2.)) = 1. + _OutlineCol ("Outline color", color) = (1., 1., 1., 1.) + [Header(Texture)] + _MainTex ("Texture", 2D) = "white" {} + _Zoom ("Zoom", Range(0.5, 20)) = 1 + _SpeedX ("Speed along X", Range(-1, 1)) = 0 + _SpeedY ("Speed along Y", Range(-1, 1)) = 0 + } + SubShader + { + Tags { "Queue"="Geometry" "RenderType"="Opaque" } + + Pass + { + Cull Front + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct v2f { + float4 pos : SV_POSITION; + }; + + float _OutlineVal; + + v2f vert(appdata_base v) { + v2f o; + + // Convert vertex to clip space + o.pos = UnityObjectToClipPos(v.vertex); + + // Convert normal to view space (camera space) + float3 normal = mul((float3x3) UNITY_MATRIX_IT_MV, v.normal); + + // Compute normal value in clip space + normal.x *= UNITY_MATRIX_P[0][0]; + normal.y *= UNITY_MATRIX_P[1][1]; + + // Scale the model depending the previous computed normal and outline value + o.pos.xy += _OutlineVal * normal.xy; + return o; + } + + fixed4 _OutlineCol; + + fixed4 frag(v2f i) : SV_Target { + return _OutlineCol; + } + + ENDCG + } + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float4 vert(appdata_base v) : SV_POSITION + { + return UnityObjectToClipPos(v.vertex); + } + + sampler2D _MainTex; + float _Zoom; + float _SpeedX; + float _SpeedY; + + fixed4 frag(float4 i : VPOS) : SV_Target + { + // Screen space texture + return tex2D(_MainTex, ((i.xy / _ScreenParams.xy) + float2(_Time.y * _SpeedX, _Time.y * _SpeedY)) / _Zoom); + } + + ENDCG + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderOutline.shader.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderOutline.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..dcbd0f9d60e69f78dc910f43ca9a62765bda365e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderOutline.shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5dfe02aa25125453eaaaa295936dc8cd +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderRadialGrid.shader b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderRadialGrid.shader new file mode 100644 index 0000000000000000000000000000000000000000..3de3352442ff603dfd07f638c5cb5c9258b49fff --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderRadialGrid.shader @@ -0,0 +1,88 @@ +Shader "Custom/WireFrame" { + Properties { + _LineColor ("LineColor", Color) = (1, 1, 1, 1) + _MainColor ("_MainColor", Color) = (1, 1, 1, 1) + _LineWidth ("Line width", Range(0, 1)) = 0.1 + _ParcelSize ("ParcelSize", Range(0, 100)) = 1 + } + SubShader { + Tags { "Queue"="Transparent" "RenderType"="Transparent" } + + CGPROGRAM + #pragma surface surf Lambert alpha + + sampler2D _MainTex; + float4 _LineColor; + float4 _MainColor; + fixed _LineWidth; + float _ParcelSize; + + struct Input { + float2 uv_MainTex; + float3 worldPos; + }; + + void surf (Input IN, inout SurfaceOutput o) { + half val1 = step(_LineWidth * 2, frac(IN.worldPos.x / _ParcelSize) + _LineWidth); + half val2 = step(_LineWidth * 2, frac(IN.worldPos.z / _ParcelSize) + _LineWidth); + fixed val = 1 - (val1 * val2); + o.Albedo = lerp(_MainColor, _LineColor, val); + o.Alpha = 1; + } + ENDCG + } + FallBack "Diffuse" +} + +// //Shader uses screen-space partial derivatives, works the best with terrain meshes. + +// Shader "Wireframe" +// { +// Properties +// { +// [Header(Settings)] [Toggle] _transparency ("Transparency", Float) = 1 +// } +// Subshader +// { +// Pass +// { +// Cull Off +// CGPROGRAM +// #pragma vertex vertex_shader +// #pragma fragment pixel_shader +// #pragma target 3.0 + +// struct structure +// { +// float4 gl_Position : SV_POSITION; +// float3 vertex : TEXCOORD0; +// }; + +// float _transparency; + +// structure vertex_shader (float4 vertex:POSITION) +// { +// structure vs; +// vs.gl_Position = UnityObjectToClipPos (vertex); +// vs.vertex = vertex; +// return vs; +// } + +// float4 pixel_shader (structure ps) : COLOR +// { +// float2 p = ps.vertex.xz; +// float2 g = abs(frac(p - 0.5) - 0.5) / fwidth(p); +// float s = min(g.x, g.y); +// float4 c = float4(s,s,s, 1.0); +// if (c.r<1.0) +// return 1.0-c; +// else +// { +// if (_transparency==1) discard; +// return 0; +// } +// } +// ENDCG +// } +// } +// } diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderRadialGrid.shader.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderRadialGrid.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..4c2cd2b597fa76bc575efe75fab563f735dfba13 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/ShaderRadialGrid.shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e0c93c373dca4f798a00646683badb2 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures.meta new file mode 100644 index 0000000000000000000000000000000000000000..88a23bc01c7abe16752703287bc2fd9679d45a2c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: deb4e063d69e95e49b8e069be7c5c886 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/CheckersGray_BC.png b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/CheckersGray_BC.png new file mode 100644 index 0000000000000000000000000000000000000000..084b1d5806ec5b4d8f96123c16a5fd518b008552 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/CheckersGray_BC.png differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/CheckersGray_BC.png.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/CheckersGray_BC.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b5f603db9e690fd7d8b365cad7d07ba60636d206 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/CheckersGray_BC.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c922805328ab07d4396783401534201b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif new file mode 100644 index 0000000000000000000000000000000000000000..85ffd2ec4ab94f87fad70f9aeccef7a3fa25328e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f387d82b72f8606a5512d83e145153347eabec680828388fa1f464ccad66b061 +size 2668851 diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif.meta new file mode 100644 index 0000000000000000000000000000000000000000..be4eeb4ccfbb8bdabc1ec84c896c50e448ee9c29 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_CO.tif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 0dbde4b748147ad46bb2c40602273db7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_NO.png b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_NO.png new file mode 100644 index 0000000000000000000000000000000000000000..6de82c7b55d47b160f6e41b241eb9cc1617a712a Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_NO.png differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_NO.png.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_NO.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c617a3ff7c702bbc1fcf6e626fe8abc99202478 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/Checkers_NO.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c4b43567aafd8a040b34a6a86ce60ad9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png new file mode 100644 index 0000000000000000000000000000000000000000..a23ed303d1d0f96312cb97129f859190757a51e5 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3ad0a748eaa6a8f64fe684e764414e4a795f1a65 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: be5d24d9d9e024be784fbcb911cb18e8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 3 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 1 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 1 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 1 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 1 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: a3ff174ca5d764281aae23e2c354baca + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/NetAL.tif b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/NetAL.tif new file mode 100644 index 0000000000000000000000000000000000000000..8d4c1f7ffec352f3525c4bd0183445a14bce6901 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/NetAL.tif differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/NetAL.tif.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/NetAL.tif.meta new file mode 100644 index 0000000000000000000000000000000000000000..045e2683e7e9cc84fa232f5f0b96bf5493fb74db --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/NetAL.tif.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 47c07dd05d80a8d42b0329ff416b8455 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/U_Logo_White_RGB.png b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/U_Logo_White_RGB.png new file mode 100644 index 0000000000000000000000000000000000000000..385a5558fa869966830fab2a306d749d112d9c33 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/U_Logo_White_RGB.png differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/U_Logo_White_RGB.png.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/U_Logo_White_RGB.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c339b6cd706d2ffcb913c03b6abbc69c470322ab --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/U_Logo_White_RGB.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: ff9a4fb150ec44c1dae2f2c249a05286 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/gridTexture.png b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/gridTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..024c58fa4af7c1c5f46368734327811d56ba63a7 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/gridTexture.png differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/gridTexture.png.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/gridTexture.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..a0356d2e89485809f4f3a2b67bb0e428121f2296 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/gridTexture.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 178121dcf42de421385195f200d9a001 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/UIDefault.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/UIDefault.mat new file mode 100644 index 0000000000000000000000000000000000000000..0fe5ed45840c3d0611a8fd228a9c08611e448d2f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/UIDefault.mat @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UIDefault + m_Shader: {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: ETC1_EXTERNAL_ALPHA + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/UIDefault.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/UIDefault.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..7aae6070c101a22f28761b3531d0fcb27308190a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/UIDefault.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 463606e709fd24f29ac1096d0aade647 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/White.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/White.mat new file mode 100644 index 0000000000000000000000000000000000000000..d06d059e6ba514991640d7a4047982f032f4d604 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/White.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: White + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.9254902, g: 0.9372549, b: 0.9411765, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/White.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/White.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..a440f5fcf4c352b97161cdef69a9f6c2a849e09f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/White.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eaad04b0e0dec42229c9cb00a981d7ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Yellow.mat b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Yellow.mat new file mode 100644 index 0000000000000000000000000000000000000000..2d5515371959f669cc0c30b986b3b9609fa75686 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Yellow.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Yellow + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.79607844, b: 0.15294118, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Yellow.mat.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Yellow.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..7a1d8e973e032b6f1412d226ffe8500a15ebf24f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Yellow.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 52eab8ab5010f438fab93da85735ba1d +timeCreated: 1513128297 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..69d173bba9c86cd1945a95597452d1680641f1a1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1eb7d6f36c88fbc48ac541afedc1ccc0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/AgentCube.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/AgentCube.fbx new file mode 100644 index 0000000000000000000000000000000000000000..2642fc91f6b3b1dfacd742d7b43df0f2d357f717 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/AgentCube.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/AgentCube.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/AgentCube.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..7685d0d0286341e17d02dcf5c2673d6a950c2c64 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/AgentCube.fbx.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: d42ce640bd273f14fb3076ec3bcd8a1b +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: rep_Agent + 2300000: //RootNode + 3300000: //RootNode + 4300000: AgentCube + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Agent + second: {fileID: 2100000, guid: f859518a4aa8c174db3ca5689255bcf6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongNarrowPlatform.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongNarrowPlatform.fbx new file mode 100644 index 0000000000000000000000000000000000000000..6da819b583cd700a3ed92af14618c0040b9e0a80 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongNarrowPlatform.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongNarrowPlatform.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongNarrowPlatform.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..6fa6b61127b34aa976745fbcd500e7264cf1072a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongNarrowPlatform.fbx.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 5b535e54498332546a40dec193a2a56a +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: CourtSurface + 100002: //RootNode + 100004: OuterWalls + 400000: CourtSurface + 400002: //RootNode + 400004: OuterWalls + 2100000: rep_CrawlerCourt + 2100002: rep_WhitePaintSG + 2300000: CourtSurface + 2300002: OuterWalls + 3300000: CourtSurface + 3300002: OuterWalls + 4300000: CourtSurface + 4300002: OuterWalls + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongPlatform.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongPlatform.fbx new file mode 100644 index 0000000000000000000000000000000000000000..1aaf1d36b0dd5d43dd3fc3cd5a2bc69c7f07dc8c Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongPlatform.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongPlatform.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongPlatform.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..ddd3a30676da7684e4fe90159c6e74c49e3a5a30 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/LongPlatform.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 123ce272c1899fe4cb9494514640e29e +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: Floor + 100002: //RootNode + 100004: WallsOuter + 400000: Floor + 400002: //RootNode + 400004: WallsOuter + 2100000: rep_WhiteWalls + 2100002: rep_Floor + 2300000: Floor + 2300002: WallsOuter + 3300000: Floor + 3300002: WallsOuter + 4300000: WallsOuter + 4300002: Floor + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Floor + second: {fileID: 2100000, guid: d66bdae8d2fdef84aba27de49d41be4f, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_WhiteWalls + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_circle.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_circle.fbx new file mode 100644 index 0000000000000000000000000000000000000000..50c814a77e50448bcda28e122f2bfe7b2429d0d6 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_circle.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_circle.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_circle.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..1c4a9995d44b21b246a27f6da5697b4c0c16df0c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_circle.fbx.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 809601725d53c41fb9c7a75071bfbf51 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: No Name + 2300000: //RootNode + 3300000: //RootNode + 4300000: symbol_circle + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_star.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_star.fbx new file mode 100644 index 0000000000000000000000000000000000000000..473aff1920213ae67496cbd79dfd69e7b6e43ed0 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_star.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_star.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_star.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..0e7e3c468091f96455bead25e108f8eab40a5245 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_star.fbx.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 5f278eab42a404bf4b9b70618654218d +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: No Name + 2300000: //RootNode + 3300000: //RootNode + 4300000: symbol_star + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_tri.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_tri.fbx new file mode 100644 index 0000000000000000000000000000000000000000..36843ae7cb39fc04990d716422e430679116095b Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_tri.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_tri.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_tri.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..731dafdc6550f967deaf1d83741f49202a4f22b3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_tri.fbx.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 09e2da39770c24cc9a71e5dbf05a1e85 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: No Name + 2300000: //RootNode + 3300000: //RootNode + 4300000: symbol_tri + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_x.fbx b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_x.fbx new file mode 100644 index 0000000000000000000000000000000000000000..9bb644e1beaf79c1ed2f05c76a8c5f635f9af3b3 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_x.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_x.fbx.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_x.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..9338127395e010b19944f08c54f022129a8b26d0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Meshes/symbol_x.fbx.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: df826ba32791e458caefe83b4498ce35 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: No Name + 2300000: //RootNode + 3300000: //RootNode + 4300000: symbol_x + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..413a49a058c4c8c1e1f6eac1d6b1a09a992e1e67 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a5b8af9e6b4248a185db6a60bd8f319 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Blue.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Blue.prefab new file mode 100644 index 0000000000000000000000000000000000000000..14cf112fe1dd1a9913060c52686773ac30531f3e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Blue.prefab @@ -0,0 +1,438 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1740551162261218} + m_IsPrefabParent: 1 +--- !u!1 &1552879437029562 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4536276975247168} + - component: {fileID: 33566889499138578} + - component: {fileID: 23925906811949090} + m_Layer: 0 + m_Name: headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1685213645101410 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4582438105426950} + - component: {fileID: 33922948913881922} + - component: {fileID: 23838502018176576} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1740551162261218 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4175896932575662} + - component: {fileID: 33269822547088274} + - component: {fileID: 23907787550355692} + m_Layer: 0 + m_Name: AgentCubeBeveled_Blue + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1806423283302662 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4936920867986940} + - component: {fileID: 33814817293145276} + - component: {fileID: 23166788082436108} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1887066189354012 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4049148659999312} + - component: {fileID: 33873307163779518} + - component: {fileID: 23508572988874010} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1920921294857500 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4923819316616534} + - component: {fileID: 20802036770896448} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4049148659999312 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1887066189354012} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 30, y: 7.4, z: 50.040054} + m_LocalScale: {x: 29.457998, y: 29.457998, z: 29.457998} + m_Children: [] + m_Father: {fileID: 4175896932575662} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4175896932575662 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740551162261218} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4923819316616534} + - {fileID: 4049148659999312} + - {fileID: 4936920867986940} + - {fileID: 4582438105426950} + - {fileID: 4536276975247168} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4536276975247168 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552879437029562} + m_LocalRotation: {x: -0, y: -0, z: 0.016349576, w: 0.99986637} + m_LocalPosition: {x: -0.2, y: 33.899998, z: 0} + m_LocalScale: {x: 1.0550003, y: 0.199, z: 1.0549998} + m_Children: [] + m_Father: {fileID: 4175896932575662} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 1.8740001} +--- !u!4 &4582438105426950 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1685213645101410} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -18.299997, z: 50.040054} + m_LocalScale: {x: 27.602, y: 4.2489996, z: 13.891} + m_Children: [] + m_Father: {fileID: 4175896932575662} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4923819316616534 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1920921294857500} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4175896932575662} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4936920867986940 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1806423283302662} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -30, y: 7.4, z: 50.040054} + m_LocalScale: {x: 29.457998, y: 29.457998, z: 29.457998} + m_Children: [] + m_Father: {fileID: 4175896932575662} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!20 &20802036770896448 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1920921294857500} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23166788082436108 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1806423283302662} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23508572988874010 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1887066189354012} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23838502018176576 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1685213645101410} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23907787550355692 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740551162261218} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23925906811949090 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552879437029562} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33269822547088274 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1740551162261218} + m_Mesh: {fileID: 4300000, guid: d42ce640bd273f14fb3076ec3bcd8a1b, type: 3} +--- !u!33 &33566889499138578 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552879437029562} + m_Mesh: {fileID: 4300000, guid: d42ce640bd273f14fb3076ec3bcd8a1b, type: 3} +--- !u!33 &33814817293145276 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1806423283302662} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33873307163779518 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1887066189354012} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33922948913881922 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1685213645101410} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Blue.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Blue.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..9f8a90f997ebd1c8860c39f137363c45243a017d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Blue.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed50871dc03034e4bb0fc839e3c5e383 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Purple.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Purple.prefab new file mode 100644 index 0000000000000000000000000000000000000000..b0f16acb2fc947d18f178dc44cd83ed27689dc43 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Purple.prefab @@ -0,0 +1,372 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1705024209618626} + m_IsPrefabParent: 1 +--- !u!1 &1078718078163756 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4816129972048284} + - component: {fileID: 33327813256870200} + - component: {fileID: 23136374309284908} + m_Layer: 0 + m_Name: headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1412179948176974 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4331179264606398} + - component: {fileID: 33551583461043228} + - component: {fileID: 23424122476828102} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1484740729265916 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4983026628864032} + - component: {fileID: 33061304468291086} + - component: {fileID: 23894154352264218} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1496366620331136 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4858780615823730} + - component: {fileID: 33273000641170738} + - component: {fileID: 23073519793017708} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1705024209618626 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4870282383278248} + - component: {fileID: 33205921733909046} + - component: {fileID: 23476260172000280} + m_Layer: 0 + m_Name: AgentCubeBeveled_Purple + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4331179264606398 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1412179948176974} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -17.7, z: 50.1} + m_LocalScale: {x: 17.167831, y: 1.5975634, z: 4.992691} + m_Children: [] + m_Father: {fileID: 4870282383278248} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4816129972048284 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1078718078163756} + m_LocalRotation: {x: -0, y: -0, z: -0.03406784, w: 0.9994195} + m_LocalPosition: {x: 0, y: 31.4, z: 0} + m_LocalScale: {x: 1.0352571, y: 0.20521104, z: 1.0352566} + m_Children: [] + m_Father: {fileID: 4870282383278248} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -3.9050002} +--- !u!4 &4858780615823730 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1496366620331136} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -30, y: 7.800001, z: 48.9} + m_LocalScale: {x: 19.48336, y: 19.483377, z: 5.401481} + m_Children: [] + m_Father: {fileID: 4870282383278248} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4870282383278248 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705024209618626} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.299, y: 0.95, z: -12.03} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 4858780615823730} + - {fileID: 4983026628864032} + - {fileID: 4331179264606398} + - {fileID: 4816129972048284} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4983026628864032 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1484740729265916} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 30, y: 7.7999954, z: 48.9} + m_LocalScale: {x: 19.483, y: 19.483, z: 5.4013762} + m_Children: [] + m_Father: {fileID: 4870282383278248} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23073519793017708 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1496366620331136} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23136374309284908 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1078718078163756} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23424122476828102 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1412179948176974} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23476260172000280 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705024209618626} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23894154352264218 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1484740729265916} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33061304468291086 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1484740729265916} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33205921733909046 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705024209618626} + m_Mesh: {fileID: 4300000, guid: d42ce640bd273f14fb3076ec3bcd8a1b, type: 3} +--- !u!33 &33273000641170738 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1496366620331136} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33327813256870200 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1078718078163756} + m_Mesh: {fileID: 4300000, guid: d42ce640bd273f14fb3076ec3bcd8a1b, type: 3} +--- !u!33 &33551583461043228 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1412179948176974} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Purple.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Purple.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..bd844b54a6a5d4d93bb173811e63bd1773c3f5ce --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeBeveled_Purple.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4068050c927b4ec0b4b561f123190cc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Blue.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Blue.prefab new file mode 100644 index 0000000000000000000000000000000000000000..f267305c4218a4cf5f723ff2b5f2907bc326bb21 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Blue.prefab @@ -0,0 +1,726 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1611965902118026} + m_IsPrefabParent: 1 +--- !u!1 &1207407969708494 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4728150272557224} + - component: {fileID: 33923225807714440} + - component: {fileID: 23969190720194280} + m_Layer: 0 + m_Name: camGlass + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1252807929931224 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4395263379360112} + - component: {fileID: 33440163666651084} + - component: {fileID: 23514752557446018} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1346795855663744 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4855008623916698} + - component: {fileID: 20046243378090484} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1585871240235648 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4976383097393896} + - component: {fileID: 33301350649693630} + - component: {fileID: 23861872654508046} + m_Layer: 0 + m_Name: camLens + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1595113803435758 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4172562209063516} + - component: {fileID: 33391274241176608} + - component: {fileID: 23901873230578236} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1611965902118026 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4176967893129316} + - component: {fileID: 33238492484755038} + - component: {fileID: 23414689658868530} + m_Layer: 0 + m_Name: AgentCubeWithCamera_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1666868574393160 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4425605993792210} + - component: {fileID: 33581055792303168} + - component: {fileID: 23690993339357864} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1668864630483664 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4291458628490776} + - component: {fileID: 33144247144244798} + - component: {fileID: 23344133976015146} + m_Layer: 0 + m_Name: camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1796433681107480 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4496169742441176} + - component: {fileID: 33605489321967030} + - component: {fileID: 23586643418093336} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1800985449330864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4682716477813794} + - component: {fileID: 33063146415318250} + - component: {fileID: 23902796487618602} + m_Layer: 0 + m_Name: camLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4172562209063516 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1595113803435758} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4176967893129316} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4176967893129316 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1611965902118026} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -2.956, y: 0.996, z: -12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4855008623916698} + - {fileID: 4425605993792210} + - {fileID: 4496169742441176} + - {fileID: 4172562209063516} + - {fileID: 4395263379360112} + - {fileID: 4291458628490776} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4291458628490776 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1668864630483664} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.351, z: 0.205} + m_LocalScale: {x: 0.29045758, y: 0.258738, z: 0.64362407} + m_Children: + - {fileID: 4976383097393896} + - {fileID: 4728150272557224} + - {fileID: 4682716477813794} + m_Father: {fileID: 4176967893129316} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4395263379360112 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252807929931224} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4176967893129316} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!4 &4425605993792210 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1666868574393160} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4176967893129316} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4496169742441176 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1796433681107480} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4176967893129316} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4682716477813794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1800985449330864} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: -0.38559845, y: 0.37180483, z: 0.46937355} + m_LocalScale: {x: 0.08611282, y: 0.038861316, z: 0.0966695} + m_Children: [] + m_Father: {fileID: 4291458628490776} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!4 &4728150272557224 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207407969708494} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0, y: -0.03478423, z: 0.22994742} + m_LocalScale: {x: 0.6175701, y: 0.2786996, z: 0.69327956} + m_Children: [] + m_Father: {fileID: 4291458628490776} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!4 &4855008623916698 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1346795855663744} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4176967893129316} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4976383097393896 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585871240235648} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.03478423, z: 0.48553178} + m_LocalScale: {x: 0.35742313, y: 0.40124092, z: 0.16129956} + m_Children: [] + m_Father: {fileID: 4291458628490776} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20046243378090484 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1346795855663744} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23344133976015146 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1668864630483664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23414689658868530 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1611965902118026} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23514752557446018 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252807929931224} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23586643418093336 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1796433681107480} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23690993339357864 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1666868574393160} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23861872654508046 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585871240235648} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23901873230578236 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1595113803435758} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23902796487618602 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1800985449330864} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23969190720194280 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207407969708494} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a0c2c8b2ac71342e1bd714d7178198e3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33063146415318250 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1800985449330864} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33144247144244798 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1668864630483664} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33238492484755038 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1611965902118026} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33301350649693630 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585871240235648} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!33 &33391274241176608 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1595113803435758} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33440163666651084 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252807929931224} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33581055792303168 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1666868574393160} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33605489321967030 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1796433681107480} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33923225807714440 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207407969708494} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Blue.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Blue.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..40da7452b67fc8bf837ef8238d74fa0c020957dd --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Blue.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a60300fb512c946049325c74b6bf6089 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Purple.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Purple.prefab new file mode 100644 index 0000000000000000000000000000000000000000..702c4d105aea08835a445aac0859762b567cb82d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Purple.prefab @@ -0,0 +1,726 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1109114803981000} + m_IsPrefabParent: 1 +--- !u!1 &1109114803981000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4457718891821786} + - component: {fileID: 33269774897629062} + - component: {fileID: 23721896933610172} + m_Layer: 0 + m_Name: AgentCubeWithCamera_Purple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1115802061308054 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4023880855530582} + - component: {fileID: 33344586880256426} + - component: {fileID: 23603627262526954} + m_Layer: 0 + m_Name: camLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1186778294605788 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4900096228214916} + - component: {fileID: 20833254204801300} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1335026532761664 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4937523761435726} + - component: {fileID: 33082026851348854} + - component: {fileID: 23130597185163284} + m_Layer: 0 + m_Name: camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1434544611255446 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4974720627441392} + - component: {fileID: 33561587437805168} + - component: {fileID: 23092224396957888} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1663420176214440 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4204357218892426} + - component: {fileID: 33032196648591250} + - component: {fileID: 23740107821314292} + m_Layer: 0 + m_Name: camGlass + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1694539758466116 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4422992721346670} + - component: {fileID: 33384604822457258} + - component: {fileID: 23636400167147106} + m_Layer: 0 + m_Name: camLens + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1851302739971444 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4946114064355066} + - component: {fileID: 33314960357443884} + - component: {fileID: 23168166329253754} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1925714680708254 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4938367630419366} + - component: {fileID: 33897846996530674} + - component: {fileID: 23187584102198634} + m_Layer: 0 + m_Name: headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1930879893515110 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4041278038386486} + - component: {fileID: 33435091338519926} + - component: {fileID: 23304703878415216} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4023880855530582 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1115802061308054} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: -0.38559845, y: 0.37180483, z: 0.46937355} + m_LocalScale: {x: 0.08611282, y: 0.038861316, z: 0.0966695} + m_Children: [] + m_Father: {fileID: 4937523761435726} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!4 &4041278038386486 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1930879893515110} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4457718891821786} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4204357218892426 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663420176214440} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067} + m_LocalPosition: {x: 0, y: -0.03478423, z: 0.22994742} + m_LocalScale: {x: 0.6175701, y: 0.2786996, z: 0.69327956} + m_Children: [] + m_Father: {fileID: 4937523761435726} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!4 &4422992721346670 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694539758466116} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.03478423, z: 0.48553178} + m_LocalScale: {x: 0.35742313, y: 0.40124092, z: 0.16129956} + m_Children: [] + m_Father: {fileID: 4937523761435726} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4457718891821786 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1109114803981000} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 1.443, y: 1, z: -12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4900096228214916} + - {fileID: 4946114064355066} + - {fileID: 4974720627441392} + - {fileID: 4041278038386486} + - {fileID: 4938367630419366} + - {fileID: 4937523761435726} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4900096228214916 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1186778294605788} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4457718891821786} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4937523761435726 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1335026532761664} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.351, z: 0.205} + m_LocalScale: {x: 0.29045758, y: 0.258738, z: 0.64362407} + m_Children: + - {fileID: 4422992721346670} + - {fileID: 4204357218892426} + - {fileID: 4023880855530582} + m_Father: {fileID: 4457718891821786} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4938367630419366 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1925714680708254} + m_LocalRotation: {x: -0, y: -0, z: -0.036135223, w: 0.999347} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4457718891821786} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -4.142} +--- !u!4 &4946114064355066 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1851302739971444} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4457718891821786} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4974720627441392 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1434544611255446} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4457718891821786} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!20 &20833254204801300 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1186778294605788} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23092224396957888 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1434544611255446} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23130597185163284 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1335026532761664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23168166329253754 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1851302739971444} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23187584102198634 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1925714680708254} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23304703878415216 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1930879893515110} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23603627262526954 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1115802061308054} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 88b9ae7af2c1748a0a1f63407587a601, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23636400167147106 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694539758466116} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23721896933610172 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1109114803981000} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23740107821314292 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663420176214440} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a0c2c8b2ac71342e1bd714d7178198e3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33032196648591250 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663420176214440} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33082026851348854 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1335026532761664} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33269774897629062 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1109114803981000} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33314960357443884 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1851302739971444} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33344586880256426 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1115802061308054} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33384604822457258 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694539758466116} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!33 &33435091338519926 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1930879893515110} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33561587437805168 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1434544611255446} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33897846996530674 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1925714680708254} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Purple.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Purple.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..48255a9187b9773b3f9c08207ebcbdea73e8942d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCubeWithCamera_Purple.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3f44c5319ba14b88a7cc096cfd91979 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Blue.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Blue.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6316e3063685edf5fc0a900ccc308de0ba8df1e2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Blue.prefab @@ -0,0 +1,438 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1293290366791352} + m_IsPrefabParent: 1 +--- !u!1 &1170655137580842 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4606123245040782} + - component: {fileID: 33962055814158598} + - component: {fileID: 23336100960796244} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1180475074726172 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4665910583758396} + - component: {fileID: 20968265540301958} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1293290366791352 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4521296116772160} + - component: {fileID: 33040811493814618} + - component: {fileID: 23024127177786336} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1403682198038744 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4369854024240858} + - component: {fileID: 33599117012852102} + - component: {fileID: 23386696179499502} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1732512757313038 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4294025894413644} + - component: {fileID: 33735714974363708} + - component: {fileID: 23170014768823630} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1821905062018382 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4109178191404694} + - component: {fileID: 33052724106875566} + - component: {fileID: 23795637202710896} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4109178191404694 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1821905062018382} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4521296116772160} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!4 &4294025894413644 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1732512757313038} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4521296116772160} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4369854024240858 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403682198038744} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4521296116772160} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4521296116772160 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1293290366791352} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -1.43, y: 1, z: -12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4665910583758396} + - {fileID: 4369854024240858} + - {fileID: 4606123245040782} + - {fileID: 4294025894413644} + - {fileID: 4109178191404694} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4606123245040782 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1170655137580842} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4521296116772160} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4665910583758396 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1180475074726172} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4521296116772160} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20968265540301958 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1180475074726172} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23024127177786336 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1293290366791352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23170014768823630 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1732512757313038} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23336100960796244 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1170655137580842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23386696179499502 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403682198038744} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23795637202710896 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1821905062018382} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33040811493814618 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1293290366791352} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33052724106875566 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1821905062018382} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33599117012852102 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1403682198038744} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33735714974363708 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1732512757313038} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33962055814158598 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1170655137580842} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Blue.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Blue.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..a0106fc9241c7f557658e52715676bd12449a0ae --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Blue.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 70d695e1d8399400bb0f2873bdf29bb0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Purple.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Purple.prefab new file mode 100644 index 0000000000000000000000000000000000000000..9f3a977d895ab67cc91b6a7b75837222921fe484 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Purple.prefab @@ -0,0 +1,438 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1866108040232428} + m_IsPrefabParent: 1 +--- !u!1 &1017115736985112 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4945428708113348} + - component: {fileID: 33513637509120034} + - component: {fileID: 23252519576391502} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1351413059312668 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4916121998815726} + - component: {fileID: 20906068861943394} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1429496965644006 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4024120479754936} + - component: {fileID: 33627783754649538} + - component: {fileID: 23050111481517258} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1542687652693390 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4864945386649204} + - component: {fileID: 33782857197410114} + - component: {fileID: 23760378764947252} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1866108040232428 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4535779181765056} + - component: {fileID: 33627863616370418} + - component: {fileID: 23693764256246216} + m_Layer: 0 + m_Name: AgentCube_Purple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1882891393951358 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4488436572151100} + - component: {fileID: 33295123348327478} + - component: {fileID: 23415947533036062} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4024120479754936 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1429496965644006} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4535779181765056} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4488436572151100 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882891393951358} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4535779181765056} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4535779181765056 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1866108040232428} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 1, z: -12} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4916121998815726} + - {fileID: 4488436572151100} + - {fileID: 4024120479754936} + - {fileID: 4864945386649204} + - {fileID: 4945428708113348} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4864945386649204 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542687652693390} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4535779181765056} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!4 &4916121998815726 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1351413059312668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4535779181765056} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4945428708113348 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1017115736985112} + m_LocalRotation: {x: -0, y: -0, z: -0.036135223, w: 0.999347} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4535779181765056} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -4.142} +--- !u!20 &20906068861943394 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1351413059312668} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23050111481517258 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1429496965644006} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23252519576391502 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1017115736985112} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23415947533036062 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882891393951358} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23693764256246216 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1866108040232428} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23760378764947252 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542687652693390} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33295123348327478 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882891393951358} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33513637509120034 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1017115736985112} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33627783754649538 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1429496965644006} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33627863616370418 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1866108040232428} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33782857197410114 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542687652693390} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Purple.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Purple.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..ab30641bc58735a0abd07686abf6e2b56c59ee47 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/AgentCube_Purple.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f203a22ac5f5e484386222536623c6ab +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Canvas_Watermark.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Canvas_Watermark.prefab new file mode 100644 index 0000000000000000000000000000000000000000..078274d921ad2f73b63417a271c607fbc2ba1488 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Canvas_Watermark.prefab @@ -0,0 +1,177 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1508578353888260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224796324260922368} + - component: {fileID: 222875034646499690} + - component: {fileID: 114223610671736162} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224796324260922368 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508578353888260} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.3300893, y: 0.3300892, z: 0.3300892} + m_Children: [] + m_Father: {fileID: 224194346362733190} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -209, y: -116} + m_SizeDelta: {x: 715.7, y: 715.69995} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222875034646499690 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508578353888260} + m_CullTransparentMesh: 1 +--- !u!114 &114223610671736162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508578353888260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ff9a4fb150ec44c1dae2f2c249a05286, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1537641056927260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224194346362733190} + - component: {fileID: 223703725700644330} + - component: {fileID: 114816648722094340} + - component: {fileID: 114595077744033850} + m_Layer: 5 + m_Name: Canvas_Watermark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224194346362733190 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537641056927260} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224796324260922368} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &223703725700644330 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537641056927260} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &114816648722094340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537641056927260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1200} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &114595077744033850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537641056927260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Canvas_Watermark.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Canvas_Watermark.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..22504d9589b651b4817f46eda25c26214c989c05 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Canvas_Watermark.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ce107b4a79bc4eef83afde434932a68 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DirectionIndicator.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DirectionIndicator.prefab new file mode 100644 index 0000000000000000000000000000000000000000..d3f976b1b908f021ab0012e3fafd159d5946297a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DirectionIndicator.prefab @@ -0,0 +1,360 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2514443435243387629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6084207059270429360} + - component: {fileID: 3572515572438364913} + - component: {fileID: 2192497693817360670} + - component: {fileID: 6026464216722085689} + m_Layer: 0 + m_Name: DirectionIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6084207059270429360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2514443435243387629} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.50600004, z: 0} + m_LocalScale: {x: 2.032082, y: 0.033901207, z: 2.032082} + m_Children: + - {fileID: 4079890302404926952} + - {fileID: 1845243336219478450} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3572515572438364913 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2514443435243387629} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2192497693817360670 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2514443435243387629} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ecd59def9213741058b969f699d10e8e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &6026464216722085689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2514443435243387629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1513f8a85fedd47efba089213b7c5bde, type: 3} + m_Name: + m_EditorClassIdentifier: + transformToFollow: {fileID: 0} + targetToLookAt: {fileID: 0} + heightOffset: 0 +--- !u!1 &4561961988867667266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1845243336219478450} + - component: {fileID: 7983784586377712118} + - component: {fileID: 5723763284955004263} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1845243336219478450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4561961988867667266} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0000000020283, y: 0.000045714, z: 7.2344e-10} + m_LocalScale: {x: 0.65353715, y: 0.66474384, z: 4.816799} + m_Children: [] + m_Father: {fileID: 6084207059270429360} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &7983784586377712118 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4561961988867667266} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &5723763284955004263 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4561961988867667266} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4872164875762137063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5748945399363311661} + - component: {fileID: 206630142170338935} + - component: {fileID: 8245468300138044459} + m_Layer: 0 + m_Name: symbol_tri + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5748945399363311661 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4872164875762137063} + m_LocalRotation: {x: -0.5000024, y: -0.49999765, z: 0.4999684, w: -0.5000316} + m_LocalPosition: {x: 0.239, y: 0.001, z: 0} + m_LocalScale: {x: 0.27411628, y: 0.27881688, z: 0.07305265} + m_Children: [] + m_Father: {fileID: 4079890302404926952} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &206630142170338935 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4872164875762137063} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &8245468300138044459 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4872164875762137063} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &9062221030534616196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4079890302404926952} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4079890302404926952 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9062221030534616196} + m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: -0.1681389, z: 0.929} + m_LocalScale: {x: 1.3184041, y: 79.02667, z: 1.3184041} + m_Children: + - {fileID: 5748945399363311661} + - {fileID: 73096696075172993} + m_Father: {fileID: 6084207059270429360} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!1 &9087387297522881283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 73096696075172993} + - component: {fileID: 5963196127926268312} + - component: {fileID: 3391471341523331296} + m_Layer: 0 + m_Name: Symbol_Triangle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &73096696075172993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9087387297522881283} + m_LocalRotation: {x: -0.5000024, y: -0.49999765, z: 0.4999684, w: -0.5000316} + m_LocalPosition: {x: -0.109, y: 0.001, z: -0} + m_LocalScale: {x: 0.21395722, y: 0.34634632, z: 0.025049753} + m_Children: [] + m_Father: {fileID: 4079890302404926952} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90.00001, y: 0, z: 270.007} +--- !u!33 &5963196127926268312 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9087387297522881283} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3391471341523331296 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9087387297522881283} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DirectionIndicator.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DirectionIndicator.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..e9be066cbc3a73e153cc0dbf4aab50f13a472f69 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DirectionIndicator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e568400ebedb3474fac505995f12ed4a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Directional_Light.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Directional_Light.prefab new file mode 100644 index 0000000000000000000000000000000000000000..f6cbffb608b6721af2416699ddb1162a7f3fb6fd --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Directional_Light.prefab @@ -0,0 +1,96 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1537121661968964 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4943719350691982} + - component: {fileID: 108227806558212132} + m_Layer: 0 + m_Name: Directional_Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &4943719350691982 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537121661968964} + m_LocalRotation: {x: 0.31598538, y: -0.3596048, z: 0.13088542, w: 0.8681629} + m_LocalPosition: {x: 106.38621, y: 38.840767, z: 34.72934} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 40, y: -45, z: 0} +--- !u!108 &108227806558212132 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537121661968964} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.99570733, b: 0.984, a: 1} + m_Intensity: 0.7 + m_Range: 27.9 + m_SpotAngle: 74.8 + m_InnerSpotAngle: 57.579865 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 0.8 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Directional_Light.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Directional_Light.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..7e04d96f745ac3b565bfac3684ebeadceebbc970 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Directional_Light.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5889392e3f05b448a8a06c5def6c2dec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DynamicTargetPlatform.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DynamicTargetPlatform.prefab new file mode 100644 index 0000000000000000000000000000000000000000..0ab8eec1688f1bb94e0450f5574589bdfbf8c7ef --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DynamicTargetPlatform.prefab @@ -0,0 +1,523 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &845536147473668688 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 840131528275521684} + - component: {fileID: 850925866003461664} + - component: {fileID: 859076012202878004} + - component: {fileID: 815643536240931858} + m_Layer: 0 + m_Name: Wall (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &840131528275521684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845536147473668688} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -50, y: 0, z: 0} + m_LocalScale: {x: 1, y: 5, z: 101} + m_Children: [] + m_Father: {fileID: 839929025558985770} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &850925866003461664 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845536147473668688} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &859076012202878004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845536147473668688} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &815643536240931858 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845536147473668688} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &845566399918322646 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 839922442615925678} + m_Layer: 0 + m_Name: DynamicTargetPlatform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &839922442615925678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845566399918322646} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.031, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 839929025558985770} + - {fileID: 840186797462469276} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &845609993457303584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 840297416095417194} + - component: {fileID: 851088301024847298} + - component: {fileID: 858742211616569018} + - component: {fileID: 819454741375499406} + m_Layer: 0 + m_Name: Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &840297416095417194 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845609993457303584} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 50, y: 0, z: 0} + m_LocalScale: {x: 1, y: 5, z: 101} + m_Children: [] + m_Father: {fileID: 839929025558985770} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &851088301024847298 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845609993457303584} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &858742211616569018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845609993457303584} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &819454741375499406 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845609993457303584} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &845711308080566368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 840287990888334796} + - component: {fileID: 850355067456890338} + - component: {fileID: 859124036259725104} + - component: {fileID: 815238519217806050} + m_Layer: 0 + m_Name: Wall (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &840287990888334796 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845711308080566368} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 50} + m_LocalScale: {x: 100, y: 5, z: 1} + m_Children: [] + m_Father: {fileID: 839929025558985770} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &850355067456890338 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845711308080566368} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &859124036259725104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845711308080566368} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &815238519217806050 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845711308080566368} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &845759966583653904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 844403944355493640} + - component: {fileID: 850961583964857778} + - component: {fileID: 858710160614006974} + - component: {fileID: 815445646158418370} + m_Layer: 0 + m_Name: Wall (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &844403944355493640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845759966583653904} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -50} + m_LocalScale: {x: 100, y: 5, z: 1} + m_Children: [] + m_Father: {fileID: 839929025558985770} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &850961583964857778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845759966583653904} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &858710160614006974 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845759966583653904} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &815445646158418370 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845759966583653904} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &845889415043745588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 840186797462469276} + - component: {fileID: 846923533051838968} + - component: {fileID: 815440076290523758} + - component: {fileID: 858612234444023958} + m_Layer: 14 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &840186797462469276 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845889415043745588} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 1, z: 100} + m_Children: [] + m_Father: {fileID: 839922442615925678} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &846923533051838968 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845889415043745588} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &815440076290523758 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845889415043745588} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &858612234444023958 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845889415043745588} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &846045050685113208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 839929025558985770} + m_Layer: 0 + m_Name: Walls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &839929025558985770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846045050685113208} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 840297416095417194} + - {fileID: 840131528275521684} + - {fileID: 840287990888334796} + - {fileID: 844403944355493640} + m_Father: {fileID: 839922442615925678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DynamicTargetPlatform.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DynamicTargetPlatform.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..f579fdddb8453f0d68b35d74f56abd955bcd55d0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/DynamicTargetPlatform.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6fc96a99a9754f07b48abf1e0d55a5c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-BLACK.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-BLACK.prefab new file mode 100644 index 0000000000000000000000000000000000000000..01d7dfde6fa5bdd17c6f0cba2a0bea57040c9847 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-BLACK.prefab @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1670979188378804} + m_IsPrefabParent: 1 +--- !u!1 &1670979188378804 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4010633778163818} + - component: {fileID: 33960811207869758} + - component: {fileID: 23396971507563632} + m_Layer: 0 + m_Name: Logo-PlaneMesh-BLACK + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4010633778163818 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.296126, y: 8.521804, z: -1.6835386} + m_LocalScale: {x: 0.26148, y: 0.26148003, z: 0.26148} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23396971507563632 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 3825ef6e3f8624bc5934d59be09c0c92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33960811207869758 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-BLACK.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-BLACK.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..19beb6fc316df17c048060520f60d021b897e4df --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-BLACK.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a475958cc9466411db1430dcd47163d2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-GRAY.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-GRAY.prefab new file mode 100644 index 0000000000000000000000000000000000000000..7ed0074b4c16fb40b58ee58d335fca97a56f86d3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-GRAY.prefab @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1670979188378804} + m_IsPrefabParent: 1 +--- !u!1 &1670979188378804 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4010633778163818} + - component: {fileID: 33960811207869758} + - component: {fileID: 23396971507563632} + m_Layer: 0 + m_Name: Logo-PlaneMesh-GRAY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4010633778163818 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.296126, y: 8.521804, z: -1.6835386} + m_LocalScale: {x: 0.26148, y: 0.26148003, z: 0.26148} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23396971507563632 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 3825ef6e3f8624bc5934d59be09c0c92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33960811207869758 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-GRAY.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-GRAY.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..9b1f182ad0feca342324e746ee7a5a2d716a7891 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-GRAY.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c8b8cb388800475291391089d1a2351 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-WHITE.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-WHITE.prefab new file mode 100644 index 0000000000000000000000000000000000000000..547c3d96d49ee93a246c15d272b6cb988f919368 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-WHITE.prefab @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1670979188378804} + m_IsPrefabParent: 1 +--- !u!1 &1670979188378804 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4010633778163818} + - component: {fileID: 33960811207869758} + - component: {fileID: 23396971507563632} + m_Layer: 0 + m_Name: Logo-PlaneMesh-WHITE + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4010633778163818 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.296126, y: 8.521804, z: -1.6835386} + m_LocalScale: {x: 0.26148, y: 0.26148003, z: 0.26148} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23396971507563632 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 3825ef6e3f8624bc5934d59be09c0c92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33960811207869758 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1670979188378804} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-WHITE.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-WHITE.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..34881eb304c5fffa8f47d8cb8b4f5b3bf117d2f8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Logo-PlaneMesh-WHITE.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b6ea6f04dd0647a1bde5bea97c8cd35 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/OrientationCube.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/OrientationCube.prefab new file mode 100644 index 0000000000000000000000000000000000000000..3fae12c028f72c963e5f5c28dde0ff136dd2d61e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/OrientationCube.prefab @@ -0,0 +1,310 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2591864625898824423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2591864625898824440} + - component: {fileID: 2591864625898824442} + - component: {fileID: 2591864625898824441} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2591864625898824440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2591864625898824423} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2591864627374185741} + m_Father: {fileID: 2591864627249999504} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2591864625898824442 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2591864625898824423} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2591864625898824441 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2591864625898824423} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2591864627249999519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2591864627249999504} + - component: {fileID: 114705911240010044} + m_Layer: 0 + m_Name: OrientationCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2591864627249999504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2591864627249999519} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2591864625898824440} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114705911240010044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2591864627249999519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 771e78c5e980e440e8cd19716b55075f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2591864627374185740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2591864627374185741} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2591864627374185741 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2591864627374185740} + m_LocalRotation: {x: -0, y: -0.7071066, z: -0, w: 0.707107} + m_LocalPosition: {x: 0, y: 0.119, z: 0} + m_LocalScale: {x: 0.7764428, y: 0.7764428, z: 0.7764428} + m_Children: + - {fileID: 3256674261123397973} + - {fileID: 3257148088533667597} + m_Father: {fileID: 2591864625898824440} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 0} +--- !u!1 &3258603775602446353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3256674261123397973} + - component: {fileID: 3263562959519547143} + - component: {fileID: 3273629389920486807} + m_Layer: 0 + m_Name: symbol_tri + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3256674261123397973 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3258603775602446353} + m_LocalRotation: {x: -0.5000024, y: -0.49999765, z: 0.4999684, w: -0.5000316} + m_LocalPosition: {x: 0.22598267, y: 0.5, z: 0} + m_LocalScale: {x: 0.39859864, y: 0.4054339, z: 0.25} + m_Children: [] + m_Father: {fileID: 2591864627374185741} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3263562959519547143 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3258603775602446353} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &3273629389920486807 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3258603775602446353} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3259145720179606813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3257148088533667597} + - component: {fileID: 3263743565359806181} + - component: {fileID: 3272323263339836425} + m_Layer: 0 + m_Name: Symbol_Triangle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3257148088533667597 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3259145720179606813} + m_LocalRotation: {x: -0.5000024, y: -0.49999765, z: 0.4999684, w: -0.5000316} + m_LocalPosition: {x: -0.20300293, y: 0.5, z: 0} + m_LocalScale: {x: 0.31112, y: 0.4054339, z: 0.085725} + m_Children: [] + m_Father: {fileID: 2591864627374185741} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90.00001, y: 0, z: 270.007} +--- !u!33 &3263743565359806181 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3259145720179606813} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3272323263339836425 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3259145720179606813} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/OrientationCube.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/OrientationCube.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..86e172fbca87a87d94d6da227dca1e6f0d2d813b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/OrientationCube.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 72f745913c5a34df5aaadd5c1f0024cb +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/PlatformDynamicTarget.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/PlatformDynamicTarget.prefab new file mode 100644 index 0000000000000000000000000000000000000000..7d450d6885a6457a8a9f23d9832ba6bb4e3de5dc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/PlatformDynamicTarget.prefab @@ -0,0 +1,523 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6907050159044240885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6902197503240654641} + - component: {fileID: 6894500521640151429} + - component: {fileID: 6885223417161833361} + - component: {fileID: 6859132155796343735} + m_Layer: 0 + m_Name: Wall (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6902197503240654641 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907050159044240885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -50, y: 0, z: 0} + m_LocalScale: {x: 1, y: 5, z: 101} + m_Children: [] + m_Father: {fileID: 6902102727328990095} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6894500521640151429 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907050159044240885} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6885223417161833361 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907050159044240885} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6859132155796343735 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907050159044240885} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6907401236047902865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6902265967514060089} + - component: {fileID: 6891025662345346653} + - component: {fileID: 6859036447448677835} + - component: {fileID: 6884684845870454579} + m_Layer: 14 + m_Name: Ground + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6902265967514060089 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907401236047902865} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 1, z: 100} + m_Children: [] + m_Father: {fileID: 6902107422946006027} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!33 &6891025662345346653 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907401236047902865} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6859036447448677835 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907401236047902865} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &6884684845870454579 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907401236047902865} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6907666814270504157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6902102727328990095} + m_Layer: 0 + m_Name: Walls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6902102727328990095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907666814270504157} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6901873285403999439} + - {fileID: 6902197503240654641} + - {fileID: 6901900959948323433} + - {fileID: 6905948743199606957} + m_Father: {fileID: 6902107422946006027} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6907680617094430597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6901873285403999439} + - component: {fileID: 6894618984257886823} + - component: {fileID: 6884854148710353183} + - component: {fileID: 6863062098498978603} + m_Layer: 0 + m_Name: Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6901873285403999439 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907680617094430597} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 50, y: 0, z: 0} + m_LocalScale: {x: 1, y: 5, z: 101} + m_Children: [] + m_Father: {fileID: 6902102727328990095} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6894618984257886823 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907680617094430597} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6884854148710353183 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907680617094430597} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6863062098498978603 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907680617094430597} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6907740118844148851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6902107422946006027} + m_Layer: 0 + m_Name: PlatformDynamicTarget + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6902107422946006027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907740118844148851} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6902102727328990095} + - {fileID: 6902265967514060089} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6907828132384848309 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6905948743199606957} + - component: {fileID: 6894463671975680535} + - component: {fileID: 6884868534516719387} + - component: {fileID: 6859048605259525735} + m_Layer: 0 + m_Name: Wall (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6905948743199606957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907828132384848309} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -50} + m_LocalScale: {x: 100, y: 5, z: 1} + m_Children: [] + m_Father: {fileID: 6902102727328990095} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6894463671975680535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907828132384848309} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6884868534516719387 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907828132384848309} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6859048605259525735 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907828132384848309} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6907860845836169157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6901900959948323433} + - component: {fileID: 6893927248293796423} + - component: {fileID: 6885176866006237333} + - component: {fileID: 6859395915623032135} + m_Layer: 0 + m_Name: Wall (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &6901900959948323433 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907860845836169157} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 50} + m_LocalScale: {x: 100, y: 5, z: 1} + m_Children: [] + m_Father: {fileID: 6902102727328990095} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6893927248293796423 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907860845836169157} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6885176866006237333 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907860845836169157} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6859395915623032135 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6907860845836169157} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/PlatformDynamicTarget.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/PlatformDynamicTarget.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..e71b08a262cfc94341e911dc6acbebdd19a8e286 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/PlatformDynamicTarget.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f0d7741d9e06247f6843b921a206b978 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms.meta new file mode 100644 index 0000000000000000000000000000000000000000..950e32cf2fdf3bd01df89ba74d302e64d4162071 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7242efdea21e94af2990b19ee4524b17 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms/LongPlatform.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms/LongPlatform.prefab new file mode 100644 index 0000000000000000000000000000000000000000..5e6071ab9e6835f9e07a6e76e2b5649d59af683e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms/LongPlatform.prefab @@ -0,0 +1,258 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1235438788178583761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1235438788178099441} + - component: {fileID: 1235438788179426519} + - component: {fileID: 1235438788180524567} + - component: {fileID: 1235438789059429774} + - component: {fileID: 1235438789059429769} + - component: {fileID: 1235438789059429768} + - component: {fileID: 1235438789059429771} + m_Layer: 0 + m_Name: WallsOuter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1235438788178099441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -992.6302, y: 0, z: -366.9186} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 1235438788178099447} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1235438788179426519 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_Mesh: {fileID: 4300000, guid: 123ce272c1899fe4cb9494514640e29e, type: 3} +--- !u!23 &1235438788180524567 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1235438789059429774 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 1100, z: 72100} + m_Center: {x: 198929, y: 500, z: 35000} +--- !u!65 &1235438789059429769 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 50, y: 1100, z: 72100} + m_Center: {x: -1015, y: 500, z: 35000} +--- !u!65 &1235438789059429768 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200000, y: 1100, z: 50} + m_Center: {x: 98950, y: 500, z: -1015} +--- !u!65 &1235438789059429771 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583761} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200000, y: 1100, z: 50} + m_Center: {x: 98950, y: 500, z: 71025} +--- !u!1 &1235438788178583765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1235438788178099445} + - component: {fileID: 1235438788179426517} + - component: {fileID: 1235438788180524565} + - component: {fileID: 1235438788505421258} + m_Layer: 0 + m_Name: Floor + m_TagString: ground + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1235438788178099445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583765} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1002.6302, y: 0, z: -376.9186} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 1235438788178099447} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1235438788179426517 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583765} + m_Mesh: {fileID: 4300002, guid: 123ce272c1899fe4cb9494514640e29e, type: 3} +--- !u!23 &1235438788180524565 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583765} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1235438788505421258 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583765} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 199900, y: 100, z: 72000} + m_Center: {x: 99950, y: -50, z: 36000} +--- !u!1 &1235438788178583767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1235438788178099447} + m_Layer: 0 + m_Name: WalkerCourt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1235438788178099447 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235438788178583767} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1235438788178099445} + - {fileID: 1235438788178099441} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms/LongPlatform.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms/LongPlatform.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..2e590f73bff485b7df99cb52d09d5e621075881e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Platforms/LongPlatform.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 790f969f5c774490abce721fdd2fa4b4 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_O.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_O.prefab new file mode 100644 index 0000000000000000000000000000000000000000..84c33c99f8abb85596e66bffaa4f01b80a33d50d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_O.prefab @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1483364366128366} + m_IsPrefabParent: 1 +--- !u!1 &1483364366128366 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4965201289082674} + - component: {fileID: 33298428727380436} + - component: {fileID: 65752241868694738} + - component: {fileID: 23811313056099224} + m_Layer: 0 + m_Name: Symbol_O + m_TagString: symbol_O + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1492439455937572 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4163221487120766} + - component: {fileID: 33532750285307344} + - component: {fileID: 23997787767704046} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4163221487120766 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492439455937572} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.33826} + m_LocalScale: {x: 0.37466624, y: 0.38109082, z: 1.3355573} + m_Children: [] + m_Father: {fileID: 4965201289082674} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4965201289082674 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1483364366128366} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.235, y: 2.45, z: 0.23} + m_LocalScale: {x: 4, y: 4, z: 1} + m_Children: + - {fileID: 4163221487120766} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23811313056099224 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1483364366128366} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23997787767704046 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492439455937572} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33298428727380436 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1483364366128366} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33532750285307344 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492439455937572} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!65 &65752241868694738 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1483364366128366} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_O.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_O.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..9987a5e630dd36d3f84aef7e5ad978e160e0a2a9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_O.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0ce898e8d61d44a2b141509e1e6969d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Star.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Star.prefab new file mode 100644 index 0000000000000000000000000000000000000000..60cd94be6e2f0d214adb4ced51c54ca9e80633a9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Star.prefab @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1178743713787780} + m_IsPrefabParent: 1 +--- !u!1 &1084832641966364 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4762166767394926} + - component: {fileID: 33110216487420488} + - component: {fileID: 23714611497034514} + m_Layer: 0 + m_Name: symbol_star + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1178743713787780 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4277752729364842} + - component: {fileID: 33638939571291710} + - component: {fileID: 65699026135470410} + - component: {fileID: 23129387863939820} + m_Layer: 0 + m_Name: Symbol_Star + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4277752729364842 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1178743713787780} + m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.31000006, y: 0.10241926, z: -0.07385714} + m_LocalScale: {x: 0.1155323, y: 0.46428585, z: 0.67072415} + m_Children: + - {fileID: 4762166767394926} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!4 &4762166767394926 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1084832641966364} + m_LocalRotation: {x: 0, y: 0, z: 0.15212336, w: 0.98836154} + m_LocalPosition: {x: 0, y: -0.022, z: -0.3459999} + m_LocalScale: {x: 0.42268595, y: 0.42993492, z: 1.5067288} + m_Children: [] + m_Father: {fileID: 4277752729364842} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 17.5} +--- !u!23 &23129387863939820 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1178743713787780} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23714611497034514 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1084832641966364} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33110216487420488 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1084832641966364} + m_Mesh: {fileID: 4300000, guid: 5f278eab42a404bf4b9b70618654218d, type: 3} +--- !u!33 &33638939571291710 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1178743713787780} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65699026135470410 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1178743713787780} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Star.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Star.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..8539c0be31087685835c28783b10b38bdb9b7f46 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Star.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9f9ac03f750149ed8ae35949376dbf5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Triangle.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Triangle.prefab new file mode 100644 index 0000000000000000000000000000000000000000..16e38f8886fc31e3c819596bfce3699ce8aa4a2b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Triangle.prefab @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1775647165880558} + m_IsPrefabParent: 1 +--- !u!1 &1235767931964898 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4088872140088486} + - component: {fileID: 33214092891333364} + - component: {fileID: 23298269818296420} + m_Layer: 0 + m_Name: symbol_tri + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1775647165880558 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4283556473836286} + - component: {fileID: 33676159210695446} + - component: {fileID: 65631753760547576} + - component: {fileID: 23962316140046842} + m_Layer: 0 + m_Name: Symbol_Triangle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4088872140088486 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1235767931964898} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.007, z: -0.309} + m_LocalScale: {x: 0.39859864, y: 0.4054339, z: 1.4208636} + m_Children: [] + m_Father: {fileID: 4283556473836286} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4283556473836286 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1775647165880558} + m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.31, y: 0.10241926, z: 0.069} + m_LocalScale: {x: 0.1155323, y: 0.46428585, z: 0.67072415} + m_Children: + - {fileID: 4088872140088486} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &23298269818296420 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1235767931964898} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23962316140046842 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1775647165880558} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33214092891333364 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1235767931964898} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!33 &33676159210695446 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1775647165880558} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65631753760547576 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1775647165880558} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Triangle.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Triangle.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..55b361e67178570805929019f5c2b239458cde4d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_Triangle.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58c36a1fc2609452c92aaa5a0b56b8c4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_X.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_X.prefab new file mode 100644 index 0000000000000000000000000000000000000000..82444502bd0d22cfc17ed49b9f00c7413f8fb038 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_X.prefab @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1147101126618602} + m_IsPrefabParent: 1 +--- !u!1 &1147101126618602 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4134156155830030} + - component: {fileID: 33781785803569660} + - component: {fileID: 65535238649650828} + - component: {fileID: 23435667802952786} + m_Layer: 0 + m_Name: Symbol_X + m_TagString: symbol_X + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1800632560103032 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4247497194682288} + - component: {fileID: 33445901905875220} + - component: {fileID: 23052055968543938} + m_Layer: 0 + m_Name: symbol_x + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4134156155830030 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1147101126618602} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7, y: 2.45, z: 24.7} + m_LocalScale: {x: 4.08117, y: 4.01236, z: 1.1449} + m_Children: + - {fileID: 4247497194682288} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4247497194682288 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1800632560103032} + m_LocalRotation: {x: -0, y: -0, z: 0.38268343, w: 0.92387956} + m_LocalPosition: {x: 0, y: 0, z: -0.337} + m_LocalScale: {x: 0.39643255, y: 0.39643255, z: 1.4011297} + m_Children: [] + m_Father: {fileID: 4134156155830030} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} +--- !u!23 &23052055968543938 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1800632560103032} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23435667802952786 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1147101126618602} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33445901905875220 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1800632560103032} + m_Mesh: {fileID: 4300000, guid: df826ba32791e458caefe83b4498ce35, type: 3} +--- !u!33 &33781785803569660 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1147101126618602} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65535238649650828 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1147101126618602} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_X.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_X.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..517ff7d4e6b0fd942da495bd1682bd0de1fb8e64 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Symbol_X.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58a7c245130274d559eccf656e2fbc44 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets.meta new file mode 100644 index 0000000000000000000000000000000000000000..bcc1ada4baff64449c94fae144f40ffa73e54a56 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88818c9b63c96424aa8e0fca85552133 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/DynamicTarget.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/DynamicTarget.prefab new file mode 100644 index 0000000000000000000000000000000000000000..df9838fe43e87a757d8b516d087e65af70fa2b1d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/DynamicTarget.prefab @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3840539935788495952 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3839136118347789758} + - component: {fileID: 3836793085241645916} + - component: {fileID: 3868551391811062596} + - component: {fileID: 3826955612593018128} + - component: {fileID: 3858402326794362026} + - component: {fileID: 3631016866778687563} + m_Layer: 0 + m_Name: DynamicTarget + m_TagString: target + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3839136118347789758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3836793085241645916 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3868551391811062596 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3826955612593018128 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &3858402326794362026 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!114 &3631016866778687563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c8f113a8b8d94967b1b1782c549be81, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: agent + spawnRadius: 40 + respawnIfTouched: 1 + respawnIfFallsOffPlatform: 1 + fallDistance: 5 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionEnterEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionStayEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionExitEvent: + m_PersistentCalls: + m_Calls: [] diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/DynamicTarget.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/DynamicTarget.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..b6598013d3a4ae75c44e9f033a4bc097f3a1bea3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/DynamicTarget.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 46734abd0de454192b407379c6a4ab8d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/StaticTarget.prefab b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/StaticTarget.prefab new file mode 100644 index 0000000000000000000000000000000000000000..b0bcb1e4642d60e4b0a3e4eaa7a85f743b6ce5f3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/StaticTarget.prefab @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3840539935788495952 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3839136118347789758} + - component: {fileID: 3836793085241645916} + - component: {fileID: 3868551391811062596} + - component: {fileID: 3826955612593018128} + - component: {fileID: 3858402326794362026} + - component: {fileID: 3631016866778687563} + m_Layer: 0 + m_Name: StaticTarget + m_TagString: target + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3839136118347789758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: 1, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3836793085241645916 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3868551391811062596 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3826955612593018128 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &3858402326794362026 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!114 &3631016866778687563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3840539935788495952} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c8f113a8b8d94967b1b1782c549be81, type: 3} + m_Name: + m_EditorClassIdentifier: + tagToDetect: agent + spawnRadius: 0 + respawnIfTouched: 0 + respawnIfFallsOffPlatform: 1 + fallDistance: 5 + onTriggerEnterEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerStayEvent: + m_PersistentCalls: + m_Calls: [] + onTriggerExitEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionEnterEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionStayEvent: + m_PersistentCalls: + m_Calls: [] + onCollisionExitEvent: + m_PersistentCalls: + m_Calls: [] diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/StaticTarget.prefab.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/StaticTarget.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..50c13fef2e7055977ba765076c823ae40a71a15d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Prefabs/Targets/StaticTarget.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2173d15c0b5fc49e5870c9d1c7f7ee8e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..df15e99af99e3b3c10234f1e40f5f7f6c27b0043 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4636aef99947747db8e1ed87884ed35b +folderAsset: yes +timeCreated: 1518416203 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/AdjustTrainingTimescale.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/AdjustTrainingTimescale.cs new file mode 100644 index 0000000000000000000000000000000000000000..e111353c99d36a69fc90c1b6a1eb96a2ee8fd0c5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/AdjustTrainingTimescale.cs @@ -0,0 +1,54 @@ +//This script lets you change time scale during training. It is not a required script for this demo to function + +using UnityEngine; + +namespace MLAgentsExamples +{ + public class AdjustTrainingTimescale : MonoBehaviour + { + // Update is called once per frame + void Update() + { + if (Input.GetKeyDown(KeyCode.Alpha1)) + { + Time.timeScale = 1f; + } + if (Input.GetKeyDown(KeyCode.Alpha2)) + { + Time.timeScale = 2f; + } + if (Input.GetKeyDown(KeyCode.Alpha3)) + { + Time.timeScale = 3f; + } + if (Input.GetKeyDown(KeyCode.Alpha4)) + { + Time.timeScale = 4f; + } + if (Input.GetKeyDown(KeyCode.Alpha5)) + { + Time.timeScale = 5f; + } + if (Input.GetKeyDown(KeyCode.Alpha6)) + { + Time.timeScale = 6f; + } + if (Input.GetKeyDown(KeyCode.Alpha7)) + { + Time.timeScale = 7f; + } + if (Input.GetKeyDown(KeyCode.Alpha8)) + { + Time.timeScale = 8f; + } + if (Input.GetKeyDown(KeyCode.Alpha9)) + { + Time.timeScale = 9f; + } + if (Input.GetKeyDown(KeyCode.Alpha0)) + { + Time.timeScale *= 2f; + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/AdjustTrainingTimescale.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/AdjustTrainingTimescale.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ed6469dcb4e3d432b5ee5b1fe869bb201db74c3f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/AdjustTrainingTimescale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d6f3eab3776b4fb79724ac4216dfd7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Area.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Area.cs new file mode 100644 index 0000000000000000000000000000000000000000..65bc08acdac9f67b05921a9718943913e168d324 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Area.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + public class Area : MonoBehaviour + { + public virtual void ResetArea() + { + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Area.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Area.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b08c7db438d23798bd8137cee8f352fe4fee9d92 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Area.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b46b66a9b32b24fab9d7ffcca24f1f43 +timeCreated: 1506809357 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CameraFollow.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CameraFollow.cs new file mode 100644 index 0000000000000000000000000000000000000000..d387223c67801df97d2d96a19e13f71310117fa1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CameraFollow.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + public class CameraFollow : MonoBehaviour + { + [Tooltip("The target to follow")] public Transform target; + + [Tooltip("The time it takes to move to the new position")] + public float smoothingTime; //The time it takes to move to the new position + + private Vector3 m_Offset; + private Vector3 m_CamVelocity; //Camera's velocity (used by SmoothDamp) + + // Use this for initialization + void Start() + { + m_Offset = gameObject.transform.position - target.position; + } + + void FixedUpdate() + { + var newPosition = new Vector3(target.position.x + m_Offset.x, transform.position.y, + target.position.z + m_Offset.z); + + gameObject.transform.position = + Vector3.SmoothDamp(transform.position, newPosition, ref m_CamVelocity, smoothingTime, Mathf.Infinity, + Time.fixedDeltaTime); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CameraFollow.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CameraFollow.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cd6bf5139e4aaff290779f5da641a00d0759622f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CameraFollow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ec40c70d5160b47cd8deaab79e24892c +timeCreated: 1508523647 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs new file mode 100644 index 0000000000000000000000000000000000000000..c9a26bfc8cdcbf62f7ef80fa72fcda5da94b7fd9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs @@ -0,0 +1,141 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Unity.MLAgentsExamples +{ + /// + /// Utility class to allow target placement and collision detection with an agent + /// Add this script to the target you want the agent to touch. + /// Callbacks will be triggered any time the target is touched with a collider tagged as 'tagToDetect' + /// + public class CollisionCallbacks : MonoBehaviour + { + // [System.Serializable] public class BoolEvent : UnityEvent { } + // [SerializeField] BoolEvent boolEvent = new BoolEvent(); + // public void OnBoolEvent(bool value) + // { + // Debug.Log($"OnBoolEvent {value}"); + // } + + + [Header("Collider Tag To Detect")] + public string tagToDetect = "agent"; //collider tag to detect + + // [Header("Target Placement")] + // public float spawnRadius; //The radius in which a target can be randomly spawned. + // public bool respawnIfTouched; //Should the target respawn to a different position when touched + // + // [Header("Target Fell Protection")] + // public bool respawnIfFallsOffPlatform = true; //If the target falls off the platform, reset the position. + // public float fallDistance = 5; //distance below the starting height that will trigger a respawn + // + // + // private Vector3 m_startingPos; //the starting position of the target + // private Agent m_agentTouching; //the agent currently touching the target + + [System.Serializable] + // public class TriggerEvent : UnityEvent + public class TriggerEvent : UnityEvent + { + } + + [Header("Trigger Callbacks")] + public TriggerEvent onTriggerEnterEvent = new TriggerEvent(); + public TriggerEvent onTriggerStayEvent = new TriggerEvent(); + public TriggerEvent onTriggerExitEvent = new TriggerEvent(); + + [System.Serializable] + public class CollisionEvent : UnityEvent + { + } + + [Header("Collision Callbacks")] + public CollisionEvent onCollisionEnterEvent = new CollisionEvent(); + public CollisionEvent onCollisionStayEvent = new CollisionEvent(); + public CollisionEvent onCollisionExitEvent = new CollisionEvent(); + + // // Start is called before the first frame update + // void OnEnable() + // { + // m_startingPos = transform.position; + // if (respawnIfTouched) + // { + // MoveTargetToRandomPosition(); + // } + // } + + // void Update() + // { + // if (respawnIfFallsOffPlatform) + // { + // if (transform.position.y < m_startingPos.y - fallDistance) + // { + // Debug.Log($"{transform.name} Fell Off Platform"); + // MoveTargetToRandomPosition(); + // } + // } + // } + + // /// + // /// Moves target to a random position within specified radius. + // /// + // public void MoveTargetToRandomPosition() + // { + // var newTargetPos = m_startingPos + (Random.insideUnitSphere * spawnRadius); + // newTargetPos.y = m_startingPos.y; + // transform.position = newTargetPos; + // } + + private void OnCollisionEnter(Collision col) + { + if (col.transform.CompareTag(tagToDetect)) + { + onCollisionEnterEvent.Invoke(col, transform); + // if (respawnIfTouched) + // { + // MoveTargetToRandomPosition(); + // } + } + } + + private void OnCollisionStay(Collision col) + { + if (col.transform.CompareTag(tagToDetect)) + { + onCollisionStayEvent.Invoke(col, transform); + } + } + + private void OnCollisionExit(Collision col) + { + if (col.transform.CompareTag(tagToDetect)) + { + onCollisionExitEvent.Invoke(col, transform); + } + } + + private void OnTriggerEnter(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerEnterEvent.Invoke(col); + } + } + + private void OnTriggerStay(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerStayEvent.Invoke(col); + } + } + + private void OnTriggerExit(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerExitEvent.Invoke(col); + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9219d2c741ac9f0bd40c5afb8aece7e7e898eb4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df05ec10e50114a9d92106879d04d89d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/DirectionIndicator.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/DirectionIndicator.cs new file mode 100644 index 0000000000000000000000000000000000000000..fe6a07f0c799b43108b4b84597cf0eb93b177ff1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/DirectionIndicator.cs @@ -0,0 +1,37 @@ +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + public class DirectionIndicator : MonoBehaviour + { + + public bool updatedByAgent; //should this be updated by the agent? If not, it will use local settings + public Transform transformToFollow; //ex: hips or body + public Transform targetToLookAt; //target in the scene the indicator will point to + public float heightOffset; + private float m_StartingYPos; + + void OnEnable() + { + m_StartingYPos = transform.position.y; + } + + void Update() + { + if (updatedByAgent) + return; + transform.position = new Vector3(transformToFollow.position.x, m_StartingYPos + heightOffset, + transformToFollow.position.z); + Vector3 walkDir = targetToLookAt.position - transform.position; + walkDir.y = 0; //flatten dir on the y + transform.rotation = Quaternion.LookRotation(walkDir); + } + + //Public method to allow an agent to directly update this component + public void MatchOrientation(Transform t) + { + transform.position = new Vector3(t.position.x, m_StartingYPos + heightOffset, t.position.z); + transform.rotation = t.rotation; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/DirectionIndicator.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/DirectionIndicator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7d3b7674caacfc9187a87cc9be8cc755f00bba0d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/DirectionIndicator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1513f8a85fedd47efba089213b7c5bde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/FlyCamera.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/FlyCamera.cs new file mode 100644 index 0000000000000000000000000000000000000000..8fe3fd0cdd3a52c20e6438209f596248b064e2e5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/FlyCamera.cs @@ -0,0 +1,116 @@ +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + public class FlyCamera : MonoBehaviour + { + /* + wasd : basic movement + shift : Makes camera accelerate + space : Moves camera on X and Z axis only. So camera doesn't gain any height*/ + + + public float mainSpeed = 100.0f; // regular speed + public float shiftAdd = 250.0f; // multiplied by how long shift is held. Basically running + public float maxShift = 1000.0f; // Maximum speed when holdin gshift + public float camSens = 0.25f; // How sensitive it with mouse + public bool rotateOnlyIfMousedown = true; + public bool movementStaysFlat = true; + + Vector3 + m_LastMouse = + new Vector3(255, 255, + 255); // kind of in the middle of the screen, rather than at the top (play) + + float m_TotalRun = 1.0f; + + void Awake() + { + Debug.Log("FlyCamera Awake() - RESETTING CAMERA POSITION"); // nop? + // nop: + // transform.position.Set(0,8,-32); + // transform.rotation.Set(15,0,0,1); + transform.position = new Vector3(0, 8, -32); + transform.rotation = Quaternion.Euler(25, 0, 0); + } + + void Update() + { + if (Input.GetMouseButtonDown(1)) + { + m_LastMouse = Input.mousePosition; // $CTK reset when we begin + } + + if (!rotateOnlyIfMousedown || + (rotateOnlyIfMousedown && Input.GetMouseButton(1))) + { + m_LastMouse = Input.mousePosition - m_LastMouse; + m_LastMouse = new Vector3(-m_LastMouse.y * camSens, m_LastMouse.x * camSens, 0); + m_LastMouse = new Vector3(transform.eulerAngles.x + m_LastMouse.x, + transform.eulerAngles.y + m_LastMouse.y, 0); + transform.eulerAngles = m_LastMouse; + m_LastMouse = Input.mousePosition; + // Mouse camera angle done. + } + + // Keyboard commands + var p = GetBaseInput(); + if (Input.GetKey(KeyCode.LeftShift)) + { + m_TotalRun += Time.deltaTime; + p = shiftAdd * m_TotalRun * p; + p.x = Mathf.Clamp(p.x, -maxShift, maxShift); + p.y = Mathf.Clamp(p.y, -maxShift, maxShift); + p.z = Mathf.Clamp(p.z, -maxShift, maxShift); + } + else + { + m_TotalRun = Mathf.Clamp(m_TotalRun * 0.5f, 1f, 1000f); + p = p * mainSpeed; + } + + p = p * Time.deltaTime; + var newPosition = transform.position; + if (Input.GetKey(KeyCode.Space) + || (movementStaysFlat && !(rotateOnlyIfMousedown && Input.GetMouseButton(1)))) + { + // If player wants to move on X and Z axis only + transform.Translate(p); + newPosition.x = transform.position.x; + newPosition.z = transform.position.z; + transform.position = newPosition; + } + else + { + transform.Translate(p); + } + } + + Vector3 GetBaseInput() + { + // returns the basic values, if it's 0 than it's not active. + var pVelocity = new Vector3(); + if (Input.GetKey(KeyCode.W)) + { + pVelocity += new Vector3(0, 0, 1); + } + + if (Input.GetKey(KeyCode.S)) + { + pVelocity += new Vector3(0, 0, -1); + } + + if (Input.GetKey(KeyCode.A)) + { + pVelocity += new Vector3(-1, 0, 0); + } + + if (Input.GetKey(KeyCode.D)) + { + pVelocity += new Vector3(1, 0, 0); + } + + return pVelocity; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/FlyCamera.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/FlyCamera.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..31dd4804738369984615a2817da1c9060d8222be --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/FlyCamera.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 83d7b886385fb48b999bc3fbc41bc181 +timeCreated: 1508627099 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/GroundContact.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/GroundContact.cs new file mode 100644 index 0000000000000000000000000000000000000000..785d3579814f70c1866c403b375d56fbd74f56aa --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/GroundContact.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using Unity.MLAgents; + +namespace Unity.MLAgentsExamples +{ + /// + /// This class contains logic for locomotion agents with joints which might make contact with the ground. + /// By attaching this as a component to those joints, their contact with the ground can be used as either + /// an observation for that agent, and/or a means of punishing the agent for making undesirable contact. + /// + [DisallowMultipleComponent] + public class GroundContact : MonoBehaviour + { + [HideInInspector] public Agent agent; + + [Header("Ground Check")] public bool agentDoneOnGroundContact; // Whether to reset agent on ground contact. + public bool penalizeGroundContact; // Whether to penalize on contact. + public float groundContactPenalty; // Penalty amount (ex: -1). + public bool touchingGround; + const string k_Ground = "ground"; // Tag of ground object. + + /// + /// Check for collision with ground, and optionally penalize agent. + /// + void OnCollisionEnter(Collision col) + { + if (col.transform.CompareTag(k_Ground)) + { + touchingGround = true; + if (penalizeGroundContact) + { + agent.SetReward(groundContactPenalty); + } + + if (agentDoneOnGroundContact) + { + agent.EndEpisode(); + } + } + } + + /// + /// Check for end of ground collision and reset flag appropriately. + /// + void OnCollisionExit(Collision other) + { + if (other.transform.CompareTag(k_Ground)) + { + touchingGround = false; + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/GroundContact.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/GroundContact.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d0857933f277ead547fdf382b938b899b06cf15d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/GroundContact.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2666e257ea992476cae0f7f163165e71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/JointDriveController.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/JointDriveController.cs new file mode 100644 index 0000000000000000000000000000000000000000..3a443978b5097a7c26207d406ec0fc9f59c32956 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/JointDriveController.cs @@ -0,0 +1,188 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; +using Unity.MLAgents; + +namespace Unity.MLAgentsExamples +{ + /// + /// Used to store relevant information for acting and learning for each body part in agent. + /// + [System.Serializable] + public class BodyPart + { + [Header("Body Part Info")][Space(10)] public ConfigurableJoint joint; + public Rigidbody rb; + [HideInInspector] public Vector3 startingPos; + [HideInInspector] public Quaternion startingRot; + + [Header("Ground & Target Contact")] + [Space(10)] + public GroundContact groundContact; + + public TargetContact targetContact; + + [FormerlySerializedAs("thisJDController")] + [HideInInspector] public JointDriveController thisJdController; + + [Header("Current Joint Settings")] + [Space(10)] + public Vector3 currentEularJointRotation; + + [HideInInspector] public float currentStrength; + public float currentXNormalizedRot; + public float currentYNormalizedRot; + public float currentZNormalizedRot; + + [Header("Other Debug Info")] + [Space(10)] + public Vector3 currentJointForce; + + public float currentJointForceSqrMag; + public Vector3 currentJointTorque; + public float currentJointTorqueSqrMag; + public AnimationCurve jointForceCurve = new AnimationCurve(); + public AnimationCurve jointTorqueCurve = new AnimationCurve(); + + /// + /// Reset body part to initial configuration. + /// + public void Reset(BodyPart bp) + { + bp.rb.transform.position = bp.startingPos; + bp.rb.transform.rotation = bp.startingRot; + bp.rb.velocity = Vector3.zero; + bp.rb.angularVelocity = Vector3.zero; + if (bp.groundContact) + { + bp.groundContact.touchingGround = false; + } + + if (bp.targetContact) + { + bp.targetContact.touchingTarget = false; + } + } + + /// + /// Apply torque according to defined goal `x, y, z` angle and force `strength`. + /// + public void SetJointTargetRotation(float x, float y, float z) + { + x = (x + 1f) * 0.5f; + y = (y + 1f) * 0.5f; + z = (z + 1f) * 0.5f; + + var xRot = Mathf.Lerp(joint.lowAngularXLimit.limit, joint.highAngularXLimit.limit, x); + var yRot = Mathf.Lerp(-joint.angularYLimit.limit, joint.angularYLimit.limit, y); + var zRot = Mathf.Lerp(-joint.angularZLimit.limit, joint.angularZLimit.limit, z); + + currentXNormalizedRot = + Mathf.InverseLerp(joint.lowAngularXLimit.limit, joint.highAngularXLimit.limit, xRot); + currentYNormalizedRot = Mathf.InverseLerp(-joint.angularYLimit.limit, joint.angularYLimit.limit, yRot); + currentZNormalizedRot = Mathf.InverseLerp(-joint.angularZLimit.limit, joint.angularZLimit.limit, zRot); + + joint.targetRotation = Quaternion.Euler(xRot, yRot, zRot); + currentEularJointRotation = new Vector3(xRot, yRot, zRot); + } + + public void SetJointStrength(float strength) + { + var rawVal = (strength + 1f) * 0.5f * thisJdController.maxJointForceLimit; + var jd = new JointDrive + { + positionSpring = thisJdController.maxJointSpring, + positionDamper = thisJdController.jointDampen, + maximumForce = rawVal + }; + joint.slerpDrive = jd; + currentStrength = jd.maximumForce; + } + } + + public class JointDriveController : MonoBehaviour + { + [Header("Joint Drive Settings")] + [Space(10)] + public float maxJointSpring; + + public float jointDampen; + public float maxJointForceLimit; + + [HideInInspector] public Dictionary bodyPartsDict = new Dictionary(); + + [HideInInspector] public List bodyPartsList = new List(); + const float k_MaxAngularVelocity = 50.0f; + + /// + /// Create BodyPart object and add it to dictionary. + /// + public void SetupBodyPart(Transform t) + { + var bp = new BodyPart + { + rb = t.GetComponent(), + joint = t.GetComponent(), + startingPos = t.position, + startingRot = t.rotation + }; + bp.rb.maxAngularVelocity = k_MaxAngularVelocity; + + // Add & setup the ground contact script + bp.groundContact = t.GetComponent(); + if (!bp.groundContact) + { + bp.groundContact = t.gameObject.AddComponent(); + bp.groundContact.agent = gameObject.GetComponent(); + } + else + { + bp.groundContact.agent = gameObject.GetComponent(); + } + + if (bp.joint) + { + var jd = new JointDrive + { + positionSpring = maxJointSpring, + positionDamper = jointDampen, + maximumForce = maxJointForceLimit + }; + bp.joint.slerpDrive = jd; + } + + bp.thisJdController = this; + bodyPartsDict.Add(t, bp); + bodyPartsList.Add(bp); + } + + public void GetCurrentJointForces() + { + foreach (var bodyPart in bodyPartsDict.Values) + { + if (bodyPart.joint) + { + bodyPart.currentJointForce = bodyPart.joint.currentForce; + bodyPart.currentJointForceSqrMag = bodyPart.joint.currentForce.magnitude; + bodyPart.currentJointTorque = bodyPart.joint.currentTorque; + bodyPart.currentJointTorqueSqrMag = bodyPart.joint.currentTorque.magnitude; + if (Application.isEditor) + { + if (bodyPart.jointForceCurve.length > 1000) + { + bodyPart.jointForceCurve = new AnimationCurve(); + } + + if (bodyPart.jointTorqueCurve.length > 1000) + { + bodyPart.jointTorqueCurve = new AnimationCurve(); + } + + bodyPart.jointForceCurve.AddKey(Time.time, bodyPart.currentJointForceSqrMag); + bodyPart.jointTorqueCurve.AddKey(Time.time, bodyPart.currentJointTorqueSqrMag); + } + } + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/JointDriveController.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/JointDriveController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..03c214aea118d6cbd72b40d0693fefab5d6ca22b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/JointDriveController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b29724baddfa457da6eeab446fa49ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelCarousel.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelCarousel.cs new file mode 100644 index 0000000000000000000000000000000000000000..891fc4bb0b1d1a32977480121f8aa4bdfd2736e1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelCarousel.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using TMPro; +using Unity.Barracuda; +using Unity.MLAgents; +using Unity.MLAgents.Policies; +using UnityEditor; +#if UNITY_EDITOR +using UnityEditor.Recorder; +#endif +using UnityEngine; + +/** + * Usage Notes: + * + * Add onnx models to the list and they will be played sequentially. + * Create a recorder and a video of the sequence will be captured automatically if "Auto Record" is selected. + * Recording only works in the Editor (not in standalone build) + * Create a TextMeshPro Text GameObject and attach it to have the number of training steps of the current model shown. + * To manually control transition between models choose a very large time, or "Pause" the system, + * then use "Force Next" to advance. + * "Reset" will start the sequence from the beginning again, use "Start" to proceed after resetting. + * "Time Scale Override" can be set, "Seconds Between Switches" will decrease proportionally if you increase this + * (i.e it represents simulated seconds between switches, not real time) + */ + + +public class ModelCarousel : MonoBehaviour +{ + public bool m_Start = true; + public bool m_Reset = false; + public bool m_Pause = true; + public bool m_ForceNext = false; + public bool m_Loop = false; + public bool m_AutoRecord = true; + public bool m_ResetAgentOnModelChange = false; + public int m_SecondsBetweenSwitches = 10; + public float m_TimeScaleOverride = 0.0f; + public List m_Models = new List(); + public bool m_ShowStepNumber = true; + public int m_StepNumberRounding = 10000; + + private int m_StepsSinceLastSwitch = 0; + private int m_CurrentModelIndex = 0; + private int m_CurrentlySetModelIndex = -1; + + private NNModel m_OriginalModel = null; + + private int k_FixedUpdatePerSecond; + + // The attached Agent + Agent m_Agent; + + public TextMeshProUGUI textMeshComponent; + +#if UNITY_EDITOR + private RecorderWindow GetRecorderWindow() + { + return (RecorderWindow)EditorWindow.GetWindow(typeof(RecorderWindow)); + } +#endif + + private void Reset() + { + m_Reset = false; + m_StepsSinceLastSwitch = 0; + m_CurrentModelIndex = 0; + m_Agent.SetModel(m_OriginalModel.name, m_OriginalModel); + textMeshComponent?.SetText("Ready to Start"); + } + + private void OnEnable() + { + m_Agent = GetComponent(); + m_OriginalModel = m_Agent.GetComponent().Model; + + Reset(); + + k_FixedUpdatePerSecond = (int)(1.0f / Time.fixedDeltaTime); + + if (m_TimeScaleOverride > 0.0f) + { + Time.timeScale = m_TimeScaleOverride; + } + } + + void StartRecording() + { +#if UNITY_EDITOR + if (!m_AutoRecord) + return; + + Debug.Log("Starting Recording"); + RecorderWindow recorderWindow = GetRecorderWindow(); + if (!recorderWindow.IsRecording()) + recorderWindow.StartRecording(); +#endif + } + + void StopRecording() + { +#if UNITY_EDITOR + if (!m_AutoRecord) + return; + + Debug.Log("Stopping Recording"); + RecorderWindow recorderWindow = GetRecorderWindow(); + if (recorderWindow.IsRecording()) + recorderWindow.StopRecording(); +#endif + } + + void UpdateStepNumberText() + { + if (!m_ShowStepNumber) + return; + + var result = Regex.Match(m_Models[m_CurrentModelIndex].name, @".*-(\d+)$"); + + string newText = ""; + if (result.Success && result.Groups.Count > 0) + { + var steps = Int32.Parse(result.Groups[1].Captures[0].Value); + + int round = m_StepNumberRounding; + steps += round / 2; + steps /= round; + steps *= round; + + newText = $"After {steps:n0} steps"; + } + + textMeshComponent?.SetText(newText); + } + + void SetModel() + { + if (m_CurrentModelIndex < 0 || m_CurrentModelIndex >= m_Models.Count) + return; + + m_Agent.SetModel(m_Models[m_CurrentModelIndex].name, m_Models[m_CurrentModelIndex]); + m_CurrentlySetModelIndex = m_CurrentModelIndex; + + UpdateStepNumberText(); + + if (m_ResetAgentOnModelChange) + m_Agent.EndEpisode(); + } + + void FixedUpdate() + { + if (m_Start) + { + m_Start = false; + m_Pause = false; + StartRecording(); + } + + if (m_Reset) + { + StopRecording(); + Reset(); + m_Pause = true; + m_Start = false; + } + + if (m_Pause && !m_ForceNext) + return; + + if (m_CurrentlySetModelIndex != m_CurrentModelIndex) + { + SetModel(); + } + + m_StepsSinceLastSwitch++; + + if (m_StepsSinceLastSwitch >= m_SecondsBetweenSwitches * k_FixedUpdatePerSecond || m_ForceNext) + { + m_ForceNext = false; + m_StepsSinceLastSwitch = 0; + m_CurrentModelIndex++; + + if (m_CurrentModelIndex == m_Models.Count) + { + if (m_Loop) + { + m_CurrentModelIndex = 0; + } + else + { + Application.Quit(0); +#if UNITY_EDITOR + EditorApplication.isPlaying = false; +#endif + return; + } + } + + SetModel(); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelCarousel.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelCarousel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..affb030bc91dfa120d895c34838a1c1dc52c6e74 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelCarousel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b941e667fa5163242bb52545d80e4059 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelOverrider.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelOverrider.cs new file mode 100644 index 0000000000000000000000000000000000000000..9390598a03125e10a7637dcf3f3192615af1f55f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelOverrider.cs @@ -0,0 +1,378 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Unity.Barracuda; +using System.IO; +using Unity.Barracuda.ONNX; +using Unity.MLAgents; +using Unity.MLAgents.Policies; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Unity.MLAgentsExamples +{ + /// + /// Utility class to allow the NNModel file for an agent to be overriden during inference. + /// This is used internally to validate the file after training is done. + /// The behavior name to override and file path are specified on the commandline, e.g. + /// player.exe --mlagents-override-model-directory /path/to/models + /// + /// Additionally, a number of episodes to run can be specified; after this, the application will quit. + /// Note this will only work with example scenes that have 1:1 Agent:Behaviors. More complicated scenes like WallJump + /// probably won't override correctly. + /// + public class ModelOverrider : MonoBehaviour + { + HashSet k_SupportedExtensions = new HashSet { "nn", "onnx" }; + const string k_CommandLineModelOverrideDirectoryFlag = "--mlagents-override-model-directory"; + const string k_CommandLineModelOverrideExtensionFlag = "--mlagents-override-model-extension"; + const string k_CommandLineQuitAfterEpisodesFlag = "--mlagents-quit-after-episodes"; + const string k_CommandLineQuitAfterSeconds = "--mlagents-quit-after-seconds"; + const string k_CommandLineQuitOnLoadFailure = "--mlagents-quit-on-load-failure"; + + // The attached Agent + Agent m_Agent; + + // Whether or not the commandline args have already been processed. + // Used to make sure that HasOverrides doesn't spam the logs if it's called multiple times. + private bool m_HaveProcessedCommandLine; + + string m_BehaviorNameOverrideDirectory; + + private string m_OriginalBehaviorName; + + private List m_OverrideExtensions = new List(); + + // Cached loaded NNModels, with the behavior name as the key. + Dictionary m_CachedModels = new Dictionary(); + + + // Max episodes to run. Only used if > 0 + // Will default to 1 if override models are specified, otherwise 0. + int m_MaxEpisodes; + + // Deadline - exit if the time exceeds this + DateTime m_Deadline = DateTime.MaxValue; + + int m_NumSteps; + int m_PreviousNumSteps; + int m_PreviousAgentCompletedEpisodes; + + bool m_QuitOnLoadFailure; + [Tooltip("Debug values to be used in place of the command line for overriding models.")] + public string debugCommandLineOverride; + + // Static values to keep track of completed episodes and steps across resets + // These are updated in OnDisable. + static int s_PreviousAgentCompletedEpisodes; + static int s_PreviousNumSteps; + + int TotalCompletedEpisodes + { + get { return m_PreviousAgentCompletedEpisodes + (m_Agent == null ? 0 : m_Agent.CompletedEpisodes); } + } + + int TotalNumSteps + { + get { return m_PreviousNumSteps + m_NumSteps; } + } + + public bool HasOverrides + { + get + { + GetAssetPathFromCommandLine(); + return !string.IsNullOrEmpty(m_BehaviorNameOverrideDirectory); + } + } + + /// + /// The original behavior name of the agent. The actual behavior name will change when it is overridden. + /// + public string OriginalBehaviorName + { + get + { + if (string.IsNullOrEmpty(m_OriginalBehaviorName)) + { + var bp = m_Agent.GetComponent(); + m_OriginalBehaviorName = bp.BehaviorName; + } + + return m_OriginalBehaviorName; + } + } + + public static string GetOverrideBehaviorName(string originalBehaviorName) + { + return $"Override_{originalBehaviorName}"; + } + + /// + /// Get the asset path to use from the commandline arguments. + /// Can be called multiple times - if m_HaveProcessedCommandLine is set, will have no effect. + /// + /// + void GetAssetPathFromCommandLine() + { + if (m_HaveProcessedCommandLine) + { + return; + } + var maxEpisodes = 0; + var timeoutSeconds = 0; + + string[] commandLineArgsOverride = null; + if (!string.IsNullOrEmpty(debugCommandLineOverride) && Application.isEditor) + { + commandLineArgsOverride = debugCommandLineOverride.Split(' '); + } + + var args = commandLineArgsOverride ?? Environment.GetCommandLineArgs(); + for (var i = 0; i < args.Length; i++) + { + if (args[i] == k_CommandLineModelOverrideDirectoryFlag && i < args.Length - 1) + { + m_BehaviorNameOverrideDirectory = args[i + 1].Trim(); + } + else if (args[i] == k_CommandLineModelOverrideExtensionFlag && i < args.Length - 1) + { + var overrideExtension = args[i + 1].Trim().ToLower(); + var isKnownExtension = k_SupportedExtensions.Contains(overrideExtension); + if (!isKnownExtension) + { + Debug.LogError($"loading unsupported format: {overrideExtension}"); + Application.Quit(1); +#if UNITY_EDITOR + EditorApplication.isPlaying = false; +#endif + } + m_OverrideExtensions.Add(overrideExtension); + } + else if (args[i] == k_CommandLineQuitAfterEpisodesFlag && i < args.Length - 1) + { + Int32.TryParse(args[i + 1], out maxEpisodes); + } + else if (args[i] == k_CommandLineQuitAfterSeconds && i < args.Length - 1) + { + Int32.TryParse(args[i + 1], out timeoutSeconds); + } + else if (args[i] == k_CommandLineQuitOnLoadFailure) + { + m_QuitOnLoadFailure = true; + } + } + + if (!string.IsNullOrEmpty(m_BehaviorNameOverrideDirectory)) + { + // If overriding models, set maxEpisodes to 1 or the command line value + m_MaxEpisodes = maxEpisodes > 0 ? maxEpisodes : 1; + Debug.Log($"setting m_MaxEpisodes to {maxEpisodes}"); + } + + if (timeoutSeconds > 0) + { + m_Deadline = DateTime.Now + TimeSpan.FromSeconds(timeoutSeconds); + Debug.Log($"setting deadline to {timeoutSeconds} from now."); + } + + m_HaveProcessedCommandLine = true; + } + + void OnEnable() + { + // Start with these initialized to previous values in the case where we're resetting scenes. + m_PreviousNumSteps = s_PreviousNumSteps; + m_PreviousAgentCompletedEpisodes = s_PreviousAgentCompletedEpisodes; + + m_Agent = GetComponent(); + + GetAssetPathFromCommandLine(); + if (HasOverrides) + { + OverrideModel(); + } + } + + void OnDisable() + { + // Update the static episode and step counts. + // For a single agent in the scene, this will be a straightforward increment. + // If there are multiple agents, we'll increment the count by the Agent that completed the most episodes. + s_PreviousAgentCompletedEpisodes = Mathf.Max(s_PreviousAgentCompletedEpisodes, TotalCompletedEpisodes); + s_PreviousNumSteps = Mathf.Max(s_PreviousNumSteps, TotalNumSteps); + } + + void FixedUpdate() + { + if (m_MaxEpisodes > 0) + { + // For Agents without maxSteps, exit as soon as we've hit the target number of episodes. + // For Agents that specify MaxStep, also make sure we've gone at least that many steps. + // Since we exit as soon as *any* Agent hits its target, the maxSteps condition keeps us running + // a bit longer in case there's an early failure. + if (TotalCompletedEpisodes >= m_MaxEpisodes && TotalNumSteps > m_MaxEpisodes * m_Agent.MaxStep) + { + Debug.Log($"ModelOverride reached {TotalCompletedEpisodes} episodes and {TotalNumSteps} steps. Exiting."); + Application.Quit(0); +#if UNITY_EDITOR + EditorApplication.isPlaying = false; +#endif + } + else if (DateTime.Now >= m_Deadline) + { + Debug.Log( + $"Deadline exceeded. " + + $"{TotalCompletedEpisodes}/{m_MaxEpisodes} episodes and " + + $"{TotalNumSteps}/{m_MaxEpisodes * m_Agent.MaxStep} steps completed. Exiting."); + Application.Quit(0); +#if UNITY_EDITOR + EditorApplication.isPlaying = false; +#endif + } + } + + m_NumSteps++; + } + + public NNModel GetModelForBehaviorName(string behaviorName) + { + if (m_CachedModels.ContainsKey(behaviorName)) + { + return m_CachedModels[behaviorName]; + } + + if (string.IsNullOrEmpty(m_BehaviorNameOverrideDirectory)) + { + Debug.Log($"No override directory set."); + return null; + } + + // Try the override extensions in order. If they weren't set, try .nn first, then .onnx. + var overrideExtensions = (m_OverrideExtensions.Count > 0) + ? m_OverrideExtensions.ToArray() + : new[] { "nn", "onnx" }; + + byte[] rawModel = null; + bool isOnnx = false; + string assetName = null; + foreach (var overrideExtension in overrideExtensions) + { + var assetPath = Path.Combine(m_BehaviorNameOverrideDirectory, $"{behaviorName}.{overrideExtension}"); + try + { + rawModel = File.ReadAllBytes(assetPath); + isOnnx = overrideExtension.Equals("onnx"); + assetName = "Override - " + Path.GetFileName(assetPath); + break; + } + catch (IOException) + { + // Do nothing - try the next extension, or we'll exit if nothing loaded. + } + } + + if (rawModel == null) + { + Debug.Log($"Couldn't load model file(s) for {behaviorName} in {m_BehaviorNameOverrideDirectory} (full path: {Path.GetFullPath(m_BehaviorNameOverrideDirectory)}"); + // Cache the null so we don't repeatedly try to load a missing file + m_CachedModels[behaviorName] = null; + return null; + } + + var asset = isOnnx ? LoadOnnxModel(rawModel) : LoadBarracudaModel(rawModel); + asset.name = assetName; + m_CachedModels[behaviorName] = asset; + return asset; + } + + NNModel LoadBarracudaModel(byte[] rawModel) + { + var asset = ScriptableObject.CreateInstance(); + asset.modelData = ScriptableObject.CreateInstance(); + asset.modelData.Value = rawModel; + return asset; + } + + NNModel LoadOnnxModel(byte[] rawModel) + { + var converter = new ONNXModelConverter(true); + var onnxModel = converter.Convert(rawModel); + + NNModelData assetData = ScriptableObject.CreateInstance(); + using (var memoryStream = new MemoryStream()) + using (var writer = new BinaryWriter(memoryStream)) + { + ModelWriter.Save(writer, onnxModel); + assetData.Value = memoryStream.ToArray(); + } + assetData.name = "Data"; + assetData.hideFlags = HideFlags.HideInHierarchy; + + var asset = ScriptableObject.CreateInstance(); + asset.modelData = assetData; + return asset; + } + + + /// + /// Load the NNModel file from the specified path, and give it to the attached agent. + /// + void OverrideModel() + { + bool overrideOk = false; + string overrideError = null; + + m_Agent.LazyInitialize(); + + NNModel nnModel = null; + try + { + nnModel = GetModelForBehaviorName(OriginalBehaviorName); + } + catch (Exception e) + { + overrideError = $"Exception calling GetModelForBehaviorName: {e}"; + } + + if (nnModel == null) + { + if (string.IsNullOrEmpty(overrideError)) + { + overrideError = + $"Didn't find a model for behaviorName {OriginalBehaviorName}. Make " + + "sure the behaviorName is set correctly in the commandline " + + "and that the model file exists"; + } + } + else + { + var modelName = nnModel != null ? nnModel.name : ""; + Debug.Log($"Overriding behavior {OriginalBehaviorName} for agent with model {modelName}"); + try + { + m_Agent.SetModel(GetOverrideBehaviorName(OriginalBehaviorName), nnModel); + overrideOk = true; + } + catch (Exception e) + { + overrideError = $"Exception calling Agent.SetModel: {e}"; + } + } + + if (!overrideOk && m_QuitOnLoadFailure) + { + if (!string.IsNullOrEmpty(overrideError)) + { + Debug.LogWarning(overrideError); + } + Application.Quit(1); +#if UNITY_EDITOR + EditorApplication.isPlaying = false; +#endif + } + + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelOverrider.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelOverrider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f16a462ebf1790a0da1edbad5ef22b50accce553 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ModelOverrider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3a6da8f78a394c6ab027688eab81e04d +timeCreated: 1579651041 \ No newline at end of file diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Monitor.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Monitor.cs new file mode 100644 index 0000000000000000000000000000000000000000..73e7c34d23bf2046da654205ffd3f20a79c152cf --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Monitor.cs @@ -0,0 +1,563 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Unity.MLAgents +{ + /// + /// Monitor is used to display information about the Agent within the Unity + /// scene. Use the log function to add information to your monitor. + /// + public class Monitor : MonoBehaviour + { + /// + /// The type of monitor the information must be displayed in. + /// corresponds to a single rectangle whose width is given + /// by a float between -1 and 1. (green is positive, red is negative) + /// + /// corresponds to n vertical sliders. + /// is a text field. + /// is a rectangle of fixed length to represent the proportions + /// of a list of floats. + /// + public enum DisplayType + { + Independent, + Proportion + } + + /// + /// Represents how high above the target the monitors will be. + /// + public static float verticalOffset = 3f; + + static bool s_IsInstantiated; + static GameObject s_Canvas; + static Dictionary> s_DisplayTransformValues; + + /// + /// Camera used to calculate GUI screen position relative to the target + /// transform. + /// + static Dictionary s_TransformCamera; + + static Color[] s_BarColors; + + struct DisplayValue + { + public float time; + public string stringValue; + public float floatValue; + public float[] floatArrayValues; + + public enum ValueType + { + Float, + FloatarrayIndependent, + FloatarrayProportion, + String + } + + public ValueType valueType; + } + + static GUIStyle s_KeyStyle; + static GUIStyle s_ValueStyle; + static GUIStyle s_GreenStyle; + static GUIStyle s_RedStyle; + static GUIStyle[] s_ColorStyle; + static bool s_Initialized; + + /// + /// Use the Monitor.Log static function to attach information to a transform. + /// + /// The log. + /// The name of the information you wish to Log. + /// The string value you want to display. + /// The transform you want to attach the information to. + /// + /// Camera used to calculate GUI position relative to + /// the target. If null, `Camera.main` will be used. + public static void Log( + string key, + string value, + Transform target = null, + Camera camera = null) + { + if (!s_IsInstantiated) + { + InstantiateCanvas(); + s_IsInstantiated = true; + } + if (s_Canvas == null) + { + return; + } + + if (target == null) + { + target = s_Canvas.transform; + } + + s_TransformCamera[target] = camera; + + if (!s_DisplayTransformValues.Keys.Contains(target)) + { + s_DisplayTransformValues[target] = + new Dictionary(); + } + + var displayValues = + s_DisplayTransformValues[target]; + + if (value == null) + { + RemoveValue(target, key); + return; + } + + if (!displayValues.ContainsKey(key)) + { + var dv = new DisplayValue(); + dv.time = Time.timeSinceLevelLoad; + dv.stringValue = value; + dv.valueType = DisplayValue.ValueType.String; + displayValues[key] = dv; + while (displayValues.Count > 20) + { + var max = ( + displayValues + .Aggregate((l, r) => l.Value.time < r.Value.time ? l : r) + .Key + ); + RemoveValue(target, max); + } + } + else + { + var dv = displayValues[key]; + dv.stringValue = value; + dv.valueType = DisplayValue.ValueType.String; + displayValues[key] = dv; + } + } + + /// + /// Use the Monitor.Log static function to attach information to a transform. + /// + /// The log. + /// The name of the information you wish to Log. + /// The float value you want to display. + /// The transform you want to attach the information to. + /// + /// Camera used to calculate GUI position relative to + /// the target. If null, `Camera.main` will be used. + public static void Log( + string key, + float value, + Transform target = null, + Camera camera = null) + { + if (!s_IsInstantiated) + { + InstantiateCanvas(); + s_IsInstantiated = true; + } + + if (target == null) + { + target = s_Canvas.transform; + } + + s_TransformCamera[target] = camera; + + if (!s_DisplayTransformValues.Keys.Contains(target)) + { + s_DisplayTransformValues[target] = new Dictionary(); + } + + var displayValues = s_DisplayTransformValues[target]; + + if (!displayValues.ContainsKey(key)) + { + var dv = new DisplayValue(); + dv.time = Time.timeSinceLevelLoad; + dv.floatValue = value; + dv.valueType = DisplayValue.ValueType.Float; + displayValues[key] = dv; + while (displayValues.Count > 20) + { + var max = ( + displayValues.Aggregate((l, r) => l.Value.time < r.Value.time ? l : r).Key); + RemoveValue(target, max); + } + } + else + { + var dv = displayValues[key]; + dv.floatValue = value; + dv.valueType = DisplayValue.ValueType.Float; + displayValues[key] = dv; + } + } + + /// + /// Use the Monitor.Log static function to attach information to a transform. + /// + /// The log. + /// The name of the information you wish to Log. + /// The array of float you want to display. + /// The type of display. + /// The transform you want to attach the information to. + /// + /// Camera used to calculate GUI position relative to + /// the target. If null, `Camera.main` will be used. + public static void Log( + string key, + float[] value, + Transform target = null, + DisplayType displayType = DisplayType.Independent, + Camera camera = null + ) + { + if (!s_IsInstantiated) + { + InstantiateCanvas(); + s_IsInstantiated = true; + } + + if (target == null) + { + target = s_Canvas.transform; + } + + s_TransformCamera[target] = camera; + + if (!s_DisplayTransformValues.Keys.Contains(target)) + { + s_DisplayTransformValues[target] = new Dictionary(); + } + + var displayValues = s_DisplayTransformValues[target]; + + if (!displayValues.ContainsKey(key)) + { + var dv = new DisplayValue(); + dv.time = Time.timeSinceLevelLoad; + dv.floatArrayValues = value; + if (displayType == DisplayType.Independent) + { + dv.valueType = DisplayValue.ValueType.FloatarrayIndependent; + } + else + { + dv.valueType = DisplayValue.ValueType.FloatarrayProportion; + } + + displayValues[key] = dv; + while (displayValues.Count > 20) + { + var max = ( + displayValues.Aggregate((l, r) => l.Value.time < r.Value.time ? l : r).Key); + RemoveValue(target, max); + } + } + else + { + var dv = displayValues[key]; + dv.floatArrayValues = value; + if (displayType == DisplayType.Independent) + { + dv.valueType = DisplayValue.ValueType.FloatarrayIndependent; + } + else + { + dv.valueType = DisplayValue.ValueType.FloatarrayProportion; + } + + displayValues[key] = dv; + } + } + + /// + /// Remove a value from a monitor. + /// + /// + /// The transform to which the information is attached. + /// + /// The key of the information you want to remove. + public static void RemoveValue(Transform target, string key) + { + if (target == null) + { + target = s_Canvas.transform; + } + + if (s_DisplayTransformValues.Keys.Contains(target)) + { + if (s_DisplayTransformValues[target].ContainsKey(key)) + { + s_DisplayTransformValues[target].Remove(key); + if (s_DisplayTransformValues[target].Keys.Count == 0) + { + s_DisplayTransformValues.Remove(target); + } + } + } + } + + /// + /// Remove all information from a monitor. + /// + /// + /// The transform to which the information is attached. + /// + public static void RemoveAllValues(Transform target) + { + if (target == null) + { + target = s_Canvas.transform; + } + + if (s_DisplayTransformValues.Keys.Contains(target)) + { + s_DisplayTransformValues.Remove(target); + } + } + + /// + /// Use SetActive to enable or disable the Monitor via script + /// + /// Value to set the Monitor's status to. + public static void SetActive(bool active) + { + if (!s_IsInstantiated) + { + InstantiateCanvas(); + s_IsInstantiated = true; + } + + if (s_Canvas != null) + { + s_Canvas.SetActive(active); + } + } + + /// Initializes the canvas. + static void InstantiateCanvas() + { + s_Canvas = GameObject.Find("AgentMonitorCanvas"); + if (s_Canvas == null) + { + s_Canvas = new GameObject(); + s_Canvas.name = "AgentMonitorCanvas"; + s_Canvas.AddComponent(); + } + + s_DisplayTransformValues = new Dictionary>(); + + s_TransformCamera = new Dictionary(); + } + + void OnGUI() + { + if (!s_Initialized) + { + Initialize(); + s_Initialized = true; + } + + var toIterate = s_DisplayTransformValues.Keys.ToList(); + foreach (var target in toIterate) + { + if (target == null) + { + s_DisplayTransformValues.Remove(target); + continue; + } + + // get camera + var cam = s_TransformCamera[target]; + if (cam == null) + { + cam = Camera.main; + } + + var widthScaler = (Screen.width / 1000f); + var keyPixelWidth = 100 * widthScaler; + var keyPixelHeight = 20 * widthScaler; + var paddingWidth = 10 * widthScaler; + + var scale = 1f; + var origin = new Vector3( + Screen.width / 2.0f - keyPixelWidth, Screen.height); + if (!(target == s_Canvas.transform)) + { + var camTransform = cam.transform; + var position = target.position; + var cam2Obj = position - camTransform.position; + scale = Mathf.Min( + 1, + 20f / (Vector3.Dot(cam2Obj, camTransform.forward))); + var worldPosition = cam.WorldToScreenPoint( + position + new Vector3(0, verticalOffset, 0)); + origin = new Vector3( + worldPosition.x - keyPixelWidth * scale, Screen.height - worldPosition.y); + } + + keyPixelWidth *= scale; + keyPixelHeight *= scale; + paddingWidth *= scale; + s_KeyStyle.fontSize = (int)(keyPixelHeight * 0.8f); + if (s_KeyStyle.fontSize < 2) + { + continue; + } + + + var displayValues = s_DisplayTransformValues[target]; + + var index = 0; + var orderedKeys = displayValues.Keys.OrderBy(x => -displayValues[x].time); + foreach (var key in orderedKeys) + { + s_KeyStyle.alignment = TextAnchor.MiddleRight; + GUI.Label( + new Rect( + origin.x, origin.y - (index + 1) * keyPixelHeight, + keyPixelWidth, keyPixelHeight), + key, + s_KeyStyle); + float[] vals; + GUIStyle s; + switch (displayValues[key].valueType) + { + case DisplayValue.ValueType.String: + s_ValueStyle.alignment = TextAnchor.MiddleLeft; + GUI.Label( + new Rect( + origin.x + paddingWidth + keyPixelWidth, + origin.y - (index + 1) * keyPixelHeight, + keyPixelWidth, keyPixelHeight), + displayValues[key].stringValue, + s_ValueStyle); + break; + case DisplayValue.ValueType.Float: + var sliderValue = displayValues[key].floatValue; + sliderValue = Mathf.Min(1f, sliderValue); + s = s_GreenStyle; + if (sliderValue < 0) + { + sliderValue = Mathf.Min(1f, -sliderValue); + s = s_RedStyle; + } + + GUI.Box( + new Rect( + origin.x + paddingWidth + keyPixelWidth, + origin.y - (index + 0.9f) * keyPixelHeight, + keyPixelWidth * sliderValue, keyPixelHeight * 0.8f), + GUIContent.none, + s); + break; + + case DisplayValue.ValueType.FloatarrayIndependent: + const float histWidth = 0.15f; + vals = displayValues[key].floatArrayValues; + for (var i = 0; i < vals.Length; i++) + { + var value = Mathf.Min(vals[i], 1); + s = s_GreenStyle; + if (value < 0) + { + value = Mathf.Min(1f, -value); + s = s_RedStyle; + } + + GUI.Box( + new Rect( + origin.x + paddingWidth + keyPixelWidth + + (keyPixelWidth * histWidth + paddingWidth / 2) * i, + origin.y - (index + 0.1f) * keyPixelHeight, + keyPixelWidth * histWidth, -keyPixelHeight * value), + GUIContent.none, + s); + } + + break; + + case DisplayValue.ValueType.FloatarrayProportion: + var valsSum = 0f; + var valsCum = 0f; + vals = displayValues[key].floatArrayValues; + foreach (var f in vals) + { + valsSum += Mathf.Max(f, 0); + } + + if (valsSum < float.Epsilon) + { + Debug.LogError( + $"The Monitor value for key {key} " + + "must be a list or array of " + + "positive values and cannot " + + "be empty."); + } + else + { + for (var i = 0; i < vals.Length; i++) + { + var value = Mathf.Max(vals[i], 0) / valsSum; + GUI.Box( + new Rect( + origin.x + paddingWidth + + keyPixelWidth + keyPixelWidth * valsCum, + origin.y - (index + 0.9f) * keyPixelHeight, + keyPixelWidth * value, keyPixelHeight * 0.8f), + GUIContent.none, + s_ColorStyle[i % s_ColorStyle.Length]); + valsCum += value; + } + } + + break; + } + + index++; + } + } + } + + /// Helper method used to initialize the GUI. Called once. + void Initialize() + { + s_KeyStyle = GUI.skin.label; + s_ValueStyle = GUI.skin.label; + s_ValueStyle.clipping = TextClipping.Overflow; + s_ValueStyle.wordWrap = false; + s_BarColors = new[] + { + Color.magenta, + Color.blue, + Color.cyan, + Color.green, + Color.yellow, + Color.red + }; + s_ColorStyle = new GUIStyle[s_BarColors.Length]; + for (var i = 0; i < s_BarColors.Length; i++) + { + var texture = new Texture2D(1, 1, TextureFormat.ARGB32, false); + texture.SetPixel(0, 0, s_BarColors[i]); + texture.Apply(); + var staticRectStyle = new GUIStyle(); + staticRectStyle.normal.background = texture; + s_ColorStyle[i] = staticRectStyle; + } + + s_GreenStyle = s_ColorStyle[3]; + s_RedStyle = s_ColorStyle[5]; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Monitor.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Monitor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e10bd36d988600b2f33bcdf164e1d448a75f1fca --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/Monitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eca114d0a5b45439384024291ba7d40a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/OrientationCubeController.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/OrientationCubeController.cs new file mode 100644 index 0000000000000000000000000000000000000000..b257b3021590d05c2cd9200e9a93f6b67b5a7462 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/OrientationCubeController.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + /// + /// Utility class to allow a stable observation platform. + /// + public class OrientationCubeController : MonoBehaviour + { + //Update position and Rotation + public void UpdateOrientation(Transform rootBP, Transform target) + { + var dirVector = target.position - transform.position; + dirVector.y = 0; //flatten dir on the y. this will only work on level, uneven surfaces + var lookRot = + dirVector == Vector3.zero + ? Quaternion.identity + : Quaternion.LookRotation(dirVector); //get our look rot to the target + + //UPDATE ORIENTATION CUBE POS & ROT + transform.SetPositionAndRotation(rootBP.position, lookRot); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/OrientationCubeController.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/OrientationCubeController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9fb2a07facb9b4241deba897f178cf6ce4422532 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/OrientationCubeController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 771e78c5e980e440e8cd19716b55075f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ProjectSettingsOverrides.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ProjectSettingsOverrides.cs new file mode 100644 index 0000000000000000000000000000000000000000..9b77251e6500d831728ae8a52ad3664927bd6844 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ProjectSettingsOverrides.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using Unity.MLAgents; + +namespace Unity.MLAgentsExamples +{ + /// + /// A helper class for the ML-Agents example scenes to override various + /// global settings, and restore them afterwards. + /// This can modify some Physics and time-stepping properties, so you + /// shouldn't copy it into your project unless you know what you're doing. + /// + public class ProjectSettingsOverrides : MonoBehaviour + { + // Original values + Vector3 m_OriginalGravity; + float m_OriginalFixedDeltaTime; + float m_OriginalMaximumDeltaTime; + int m_OriginalSolverIterations; + int m_OriginalSolverVelocityIterations; + bool m_OriginalReuseCollisionCallbacks; + + [Tooltip("Increase or decrease the scene gravity. Use ~3x to make things less floaty")] + public float gravityMultiplier = 1.0f; + + [Header("Advanced physics settings")] + [Tooltip("The interval in seconds at which physics and other fixed frame rate updates (like MonoBehaviour's FixedUpdate) are performed.")] + public float fixedDeltaTime = .02f; + [Tooltip("The maximum time a frame can take. Physics and other fixed frame rate updates (like MonoBehaviour's FixedUpdate) will be performed only for this duration of time per frame.")] + public float maximumDeltaTime = 1.0f / 3.0f; + [Tooltip("Determines how accurately Rigidbody joints and collision contacts are resolved. (default 6). Must be positive.")] + public int solverIterations = 6; + [Tooltip("Affects how accurately the Rigidbody joints and collision contacts are resolved. (default 1). Must be positive.")] + public int solverVelocityIterations = 1; + [Tooltip("Determines whether the garbage collector should reuse only a single instance of a Collision type for all collision callbacks. Reduces Garbage.")] + public bool reuseCollisionCallbacks = true; + + public void Awake() + { + // Save the original values + m_OriginalGravity = Physics.gravity; + m_OriginalFixedDeltaTime = Time.fixedDeltaTime; + m_OriginalMaximumDeltaTime = Time.maximumDeltaTime; + m_OriginalSolverIterations = Physics.defaultSolverIterations; + m_OriginalSolverVelocityIterations = Physics.defaultSolverVelocityIterations; + m_OriginalReuseCollisionCallbacks = Physics.reuseCollisionCallbacks; + + // Override + Physics.gravity *= gravityMultiplier; + Time.fixedDeltaTime = fixedDeltaTime; + Time.maximumDeltaTime = maximumDeltaTime; + Physics.defaultSolverIterations = solverIterations; + Physics.defaultSolverVelocityIterations = solverVelocityIterations; + Physics.reuseCollisionCallbacks = reuseCollisionCallbacks; + + // Make sure the Academy singleton is initialized first, since it will create the SideChannels. + Academy.Instance.EnvironmentParameters.RegisterCallback("gravity", f => { Physics.gravity = new Vector3(0, -f, 0); }); + } + + public void OnDestroy() + { + Physics.gravity = m_OriginalGravity; + Time.fixedDeltaTime = m_OriginalFixedDeltaTime; + Time.maximumDeltaTime = m_OriginalMaximumDeltaTime; + Physics.defaultSolverIterations = m_OriginalSolverIterations; + Physics.defaultSolverVelocityIterations = m_OriginalSolverVelocityIterations; + Physics.reuseCollisionCallbacks = m_OriginalReuseCollisionCallbacks; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ProjectSettingsOverrides.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ProjectSettingsOverrides.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9dbadc5b82f09ea3b77643e265d4b13a77acd3f1 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/ProjectSettingsOverrides.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec51f47c5ed0478080c449c74fd9c154 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 100 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/SensorBase.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/SensorBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..31bc7c8556328408cd9b48f6a963fc7c93d21f84 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/SensorBase.cs @@ -0,0 +1,59 @@ +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgentsExamples +{ + /// + /// A simple sensor that provides a number default implementations. + /// + public abstract class SensorBase : ISensor + { + /// + /// Write the observations to the output buffer. This size of the buffer will be product + /// of the Shape array values returned by . + /// + /// + public abstract void WriteObservation(float[] output); + + /// + public abstract ObservationSpec GetObservationSpec(); + + /// + public abstract string GetName(); + + /// + /// Default implementation of Write interface. This creates a temporary array, + /// calls WriteObservation, and then writes the results to the ObservationWriter. + /// + /// + /// The number of elements written. + public virtual int Write(ObservationWriter writer) + { + // TODO reuse buffer for similar agents + var numFloats = this.ObservationSize(); + float[] buffer = new float[numFloats]; + WriteObservation(buffer); + + writer.AddList(buffer); + + return numFloats; + } + + /// + public void Update() { } + + /// + public void Reset() { } + + /// + public virtual byte[] GetCompressedObservation() + { + return null; + } + + /// + public virtual CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/SensorBase.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/SensorBase.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..af6783dbf6e1a490f85b2e40ebeed9e412dc4847 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/SensorBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf19888920fa24df7ad75a52ede51cf3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetContact.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetContact.cs new file mode 100644 index 0000000000000000000000000000000000000000..fa4580f40bb56031b0ec3c9281482e1f81f41487 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetContact.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + /// + /// This class contains logic for locomotion agents with joints which might make contact with a target. + /// By attaching this as a component to those joints, their contact with the ground can be used as + /// an observation for that agent. + /// + [DisallowMultipleComponent] + public class TargetContact : MonoBehaviour + { + [Header("Detect Targets")] public bool touchingTarget; + const string k_Target = "target"; // Tag on target object. + + /// + /// Check for collision with a target. + /// + void OnCollisionEnter(Collision col) + { + if (col.transform.CompareTag(k_Target)) + { + touchingTarget = true; + } + } + + /// + /// Check for end of ground collision and reset flag appropriately. + /// + void OnCollisionExit(Collision other) + { + if (other.transform.CompareTag(k_Target)) + { + touchingTarget = false; + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetContact.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetContact.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..02b1fe71b177324145a64f5ae33f6a5f65de6c3b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetContact.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5086c435d3e8b44ffa8262a5c124661f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetController.cs b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetController.cs new file mode 100644 index 0000000000000000000000000000000000000000..e2b2c627788e94092f20c1463ad27f22695b59da --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetController.cs @@ -0,0 +1,133 @@ +using UnityEngine; +using Random = UnityEngine.Random; +using Unity.MLAgents; +using UnityEngine.Events; + +namespace Unity.MLAgentsExamples +{ + /// + /// Utility class to allow target placement and collision detection with an agent + /// Add this script to the target you want the agent to touch. + /// Callbacks will be triggered any time the target is touched with a collider tagged as 'tagToDetect' + /// + public class TargetController : MonoBehaviour + { + + [Header("Collider Tag To Detect")] + public string tagToDetect = "agent"; //collider tag to detect + + [Header("Target Placement")] + public float spawnRadius; //The radius in which a target can be randomly spawned. + public bool respawnIfTouched; //Should the target respawn to a different position when touched + + [Header("Target Fell Protection")] + public bool respawnIfFallsOffPlatform = true; //If the target falls off the platform, reset the position. + public float fallDistance = 5; //distance below the starting height that will trigger a respawn + + private Vector3 m_startingPos; //the starting position of the target + + [System.Serializable] + public class TriggerEvent : UnityEvent + { + } + + [Header("Trigger Callbacks")] + public TriggerEvent onTriggerEnterEvent = new TriggerEvent(); + public TriggerEvent onTriggerStayEvent = new TriggerEvent(); + public TriggerEvent onTriggerExitEvent = new TriggerEvent(); + + [System.Serializable] + public class CollisionEvent : UnityEvent + { + } + + [Header("Collision Callbacks")] + public CollisionEvent onCollisionEnterEvent = new CollisionEvent(); + public CollisionEvent onCollisionStayEvent = new CollisionEvent(); + public CollisionEvent onCollisionExitEvent = new CollisionEvent(); + + // Start is called before the first frame update + void OnEnable() + { + m_startingPos = transform.position; + if (respawnIfTouched) + { + MoveTargetToRandomPosition(); + } + } + + void Update() + { + if (respawnIfFallsOffPlatform) + { + if (transform.position.y < m_startingPos.y - fallDistance) + { + Debug.Log($"{transform.name} Fell Off Platform"); + MoveTargetToRandomPosition(); + } + } + } + + /// + /// Moves target to a random position within specified radius. + /// + public void MoveTargetToRandomPosition() + { + var newTargetPos = m_startingPos + (Random.insideUnitSphere * spawnRadius); + newTargetPos.y = m_startingPos.y; + transform.position = newTargetPos; + } + + private void OnCollisionEnter(Collision col) + { + if (col.transform.CompareTag(tagToDetect)) + { + onCollisionEnterEvent.Invoke(col); + if (respawnIfTouched) + { + MoveTargetToRandomPosition(); + } + } + } + + private void OnCollisionStay(Collision col) + { + if (col.transform.CompareTag(tagToDetect)) + { + onCollisionStayEvent.Invoke(col); + } + } + + private void OnCollisionExit(Collision col) + { + if (col.transform.CompareTag(tagToDetect)) + { + onCollisionExitEvent.Invoke(col); + } + } + + private void OnTriggerEnter(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerEnterEvent.Invoke(col); + } + } + + private void OnTriggerStay(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerStayEvent.Invoke(col); + } + } + + private void OnTriggerExit(Collider col) + { + if (col.CompareTag(tagToDetect)) + { + onTriggerExitEvent.Invoke(col); + } + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetController.cs.meta b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..439d4c10ea09f2711db1ac8bb23fcde7ac1f8050 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/TargetController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c8f113a8b8d94967b1b1782c549be81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer.meta b/Project/Assets/ML-Agents/Examples/Soccer.meta new file mode 100644 index 0000000000000000000000000000000000000000..999b71c8c6441861716b03f12ffa97db6b4abc1c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f28ff3b6532d4945972ae7d73c9aa5f +folderAsset: yes +timeCreated: 1512705579 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5a0668ae9c87292e9928f09ad54a8f9cd2e1a50 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ce77335ae1d534c948a63633ac06337f +folderAsset: yes +timeCreated: 1506189694 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/ClearPlastic.mat b/Project/Assets/ML-Agents/Examples/Soccer/Materials/ClearPlastic.mat new file mode 100644 index 0000000000000000000000000000000000000000..fd0c7f8506ecaafe137c93d768d91211549c0379 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/ClearPlastic.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ClearPlastic + m_Shader: {fileID: 45, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0.492 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 0.17194101, g: 0.40551123, b: 0.847, a: 0.039215688} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.103, g: 0.103, b: 0.103, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/ClearPlastic.mat.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/ClearPlastic.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..97f99965d23df9199dd63e005d7a2555f37f872f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/ClearPlastic.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec99cc74da6543b459e71a51834b037d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..1f347ca125299bc50afdb21cd23e90b79ff16d12 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c541dc686bf2a6b44a5f7295de0a1e04 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/Bouncy.physicMaterial b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/Bouncy.physicMaterial new file mode 100644 index 0000000000000000000000000000000000000000..9138d2e6ce3daf095ee8d17cb03ddd839e2d56b9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/Bouncy.physicMaterial @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Bouncy + dynamicFriction: 0.6 + staticFriction: 0.6 + bounciness: 0.8 + frictionCombine: 0 + bounceCombine: 3 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/Bouncy.physicMaterial.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/Bouncy.physicMaterial.meta new file mode 100644 index 0000000000000000000000000000000000000000..098262071242e8c02cb8cb7785c97c9fcd7d5548 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/Bouncy.physicMaterial.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 54ed79b9254e1456587c8cf3849f6dc1 +timeCreated: 1513650193 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/NoFriction.physicMaterial b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/NoFriction.physicMaterial new file mode 100644 index 0000000000000000000000000000000000000000..9ead4b369cb6e64dcd180dad294688a494d44acb --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/NoFriction.physicMaterial @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: NoFriction + dynamicFriction: 0.6 + staticFriction: 0.6 + bounciness: 0.75 + frictionCombine: 0 + bounceCombine: 3 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/NoFriction.physicMaterial.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/NoFriction.physicMaterial.meta new file mode 100644 index 0000000000000000000000000000000000000000..b2bb9addc33014565a1764f532d6b50a7021b92b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/NoFriction.physicMaterial.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4ed55169d81ee40a0a1f8be2420eba78 +timeCreated: 1513650193 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/reducedFriction.physicMaterial b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/reducedFriction.physicMaterial new file mode 100644 index 0000000000000000000000000000000000000000..79a615dcb1f3f79a177eb5444f7981bc2a50d2ae --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/reducedFriction.physicMaterial @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: reducedFriction + dynamicFriction: 0.1 + staticFriction: 0.1 + bounciness: 0 + frictionCombine: 0 + bounceCombine: 3 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/reducedFriction.physicMaterial.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/reducedFriction.physicMaterial.meta new file mode 100644 index 0000000000000000000000000000000000000000..ab8d915a15bfe5612b94163d6f59768a3c222377 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/reducedFriction.physicMaterial.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1d7384a79905e47399076985ef6317bb +timeCreated: 1513650193 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/rollyCubeFriction.physicMaterial b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/rollyCubeFriction.physicMaterial new file mode 100644 index 0000000000000000000000000000000000000000..7a9d39edce80697cd3a38370428f056e05849e24 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/rollyCubeFriction.physicMaterial @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: rollyCubeFriction + dynamicFriction: 1 + staticFriction: 1 + bounciness: 0 + frictionCombine: 3 + bounceCombine: 3 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/rollyCubeFriction.physicMaterial.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/rollyCubeFriction.physicMaterial.meta new file mode 100644 index 0000000000000000000000000000000000000000..dcc13750e5a0561c6507443067442389a782dad4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/rollyCubeFriction.physicMaterial.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1be61b07f47b047389faf65ea43831c4 +timeCreated: 1513650193 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/zeroFriction.physicMaterial b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/zeroFriction.physicMaterial new file mode 100644 index 0000000000000000000000000000000000000000..d10e78c724ce35bad16dc0448adbafd831ef48b8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/zeroFriction.physicMaterial @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: zeroFriction + dynamicFriction: 0 + staticFriction: 0 + bounciness: 0 + frictionCombine: 0 + bounceCombine: 3 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/zeroFriction.physicMaterial.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/zeroFriction.physicMaterial.meta new file mode 100644 index 0000000000000000000000000000000000000000..126e2caf5d1ca6cd385703eda9e49d1a1c3e02a5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Physic_Materials/zeroFriction.physicMaterial.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8c6374adc4d814c2eb5ecdfe810d813b +timeCreated: 1513650193 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerBall.mat b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerBall.mat new file mode 100644 index 0000000000000000000000000000000000000000..8e14237644c524bfca5ab1c851a51ca797474c8d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerBall.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SoccerBall + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: ea01cf4a25b735d478f6ee1dd3cdbcf1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0.181 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerBall.mat.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerBall.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..f76c15085cd9c2c5e12c231913efd63b74110cd8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerBall.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1644c0cb0c67e314194579be857f87da +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitch.mat b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitch.mat new file mode 100644 index 0000000000000000000000000000000000000000..7e3d5e516dd7ecbde18d2a150f97ee904fe3d205 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitch.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SoccerPitch + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 90184a84e40c343c2b851750c4d795f1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitch.mat.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitch.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..faf4d619bdf16bf93ea55fbd25bd6b2c5c3bac14 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitch.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff03c5911bd5dfa49a040cf45420a0e4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitchAL.png b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitchAL.png new file mode 100644 index 0000000000000000000000000000000000000000..3738d7fed8ff8c4c1ac4c9eedf24bd5148500856 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitchAL.png differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitchAL.png.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitchAL.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..843fe047a40054b53b3061e94c565ed0fa2439ca --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerPitchAL.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 8017a3765fe3641a78c35e605b6d7a83 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerSky.mat b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerSky.mat new file mode 100644 index 0000000000000000000000000000000000000000..496cb100357379ea68cf59368a02d83e9d3eb604 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerSky.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SoccerSky + m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _SUNDISK_HIGH_QUALITY + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AtmosphereThickness: 1 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Exposure: 1.3 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SunDisk: 2 + - _SunSize: 0.04 + - _SunSizeConvergence: 5 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _GroundColor: {r: 0.369, g: 0.349, b: 0.341, a: 1} + - _SkyTint: {r: 0.5, g: 0.5, b: 0.5, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerSky.mat.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerSky.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..cbd8e31ab0d700c1bcb1c7ab51324f1135f3eb82 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/SoccerSky.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 186120fb7839f584d9fdcd5794edbc78 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures.meta new file mode 100644 index 0000000000000000000000000000000000000000..2533f26f32721806b6bddd92f63a18aa2937fddd --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9dad699bc985f8c4992e697862b03855 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/BallAL.tif b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/BallAL.tif new file mode 100644 index 0000000000000000000000000000000000000000..206a0f678f4f8ba2d31b8b195a89a3b4dc623a5f Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/BallAL.tif differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/BallAL.tif.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/BallAL.tif.meta new file mode 100644 index 0000000000000000000000000000000000000000..a5a4c2448ce36b2c0f1a0f9efc73a1f5911d35b0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/BallAL.tif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: ea01cf4a25b735d478f6ee1dd3cdbcf1 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGray.png b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGray.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9aa0a1520d52d33bc25919eba6a718f3767615 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGray.png differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGray.png.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGray.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..bde0fe577023da9b260813b1e8d4bb45e58e6ffe --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGray.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 90184a84e40c343c2b851750c4d795f1 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGreen.png b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..22a45cb8e1dbad59ed9ea256d6d080e57fff3ac6 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGreen.png differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGreen.png.meta b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGreen.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..271cfa2c7310cc7e4039089779d23d0dd5454740 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Materials/Textures/SoccerPitchGreen.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 94c0e0aad7fb0a248993e8e5e0fee826 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Meshes.meta b/Project/Assets/ML-Agents/Examples/Soccer/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..ccb83b424be148550b32065f66f8d94e1fab6dd9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 501b3edf3690641468c9eb2e0c7dc955 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Ball.fbx b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Ball.fbx new file mode 100644 index 0000000000000000000000000000000000000000..11403f2894d59002a821ce0272d233cc175fc0a6 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Ball.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Ball.fbx.meta b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Ball.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..40633fa81a717fb0e8a9fef048a108c0b5d84cb9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Ball.fbx.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 7cb7c129b7ec1fb4293dd40773bdce33 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: rep_SoccerBall + 2300000: //RootNode + 3300000: //RootNode + 4300000: Ball + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_SoccerBall + second: {fileID: 2100000, guid: 1644c0cb0c67e314194579be857f87da, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Pitch.fbx b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Pitch.fbx new file mode 100644 index 0000000000000000000000000000000000000000..0cc599e1ecc3f30b747de7eb0f8d7fcc1785bdf6 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Pitch.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Pitch.fbx.meta b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Pitch.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..cee08871d5d3a16797e6fd51eddbedb5173bba62 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Meshes/Pitch.fbx.meta @@ -0,0 +1,197 @@ +fileFormatVersion: 2 +guid: 02257fc10ef7ad149b5daa123a7df881 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: CenterPitch + 100002: GlassSideA + 100004: GlassSideB + 100006: GoalAreaBlue + 100008: GoalAreaRed + 100010: GoalNetBlue + 100012: GoalNetBlueOuter + 100014: GoalNetRed + 100016: GoalNetRedOuter + 100018: //RootNode + 100020: WallSideA + 100022: WallSideB + 100024: GoalBlue + 100026: GoalRed + 400000: CenterPitch + 400002: GlassSideA + 400004: GlassSideB + 400006: GoalAreaBlue + 400008: GoalAreaRed + 400010: GoalNetBlue + 400012: GoalNetBlueOuter + 400014: GoalNetRed + 400016: GoalNetRedOuter + 400018: //RootNode + 400020: WallSideA + 400022: WallSideB + 400024: GoalBlue + 400026: GoalRed + 2100000: rep_Pitch + 2100002: rep_Clear + 2100004: rep_BlackPaint + 2100006: rep_Net + 2100008: rep_White + 2100010: rep_goalMaterial + 2100012: rep_SoccerAgent + 2300000: CenterPitch + 2300002: GlassSideA + 2300004: GlassSideB + 2300006: GoalAreaBlue + 2300008: GoalAreaRed + 2300010: GoalNetBlue + 2300012: GoalNetBlueOuter + 2300014: GoalNetRed + 2300016: GoalNetRedOuter + 2300018: //RootNode + 2300020: WallSideA + 2300022: WallSideB + 2300024: GoalBlue + 2300026: GoalRed + 3300000: CenterPitch + 3300002: GlassSideA + 3300004: GlassSideB + 3300006: GoalAreaBlue + 3300008: GoalAreaRed + 3300010: GoalNetBlue + 3300012: GoalNetBlueOuter + 3300014: GoalNetRed + 3300016: GoalNetRedOuter + 3300018: //RootNode + 3300020: WallSideA + 3300022: WallSideB + 3300024: GoalBlue + 3300026: GoalRed + 4300000: Pitch + 4300002: GlassSideA + 4300004: GlassSideB + 4300006: GoalNetBlue + 4300008: GoalNetBlueOuter + 4300010: GoalNetRed + 4300012: GoalNetRedOuter + 4300014: WallSideA + 4300016: WallSideB + 4300018: GoalAreaBlue + 4300020: GoalAreaRed + 4300022: CenterPitch + 4300024: GoalBlue + 4300026: GoalRed + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_BlackPaint + second: {fileID: 2100000, guid: e5d7512a7920cc443b7ac82824bb561e, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Clear + second: {fileID: 2100000, guid: ec99cc74da6543b459e71a51834b037d, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Net + second: {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Pitch + second: {fileID: 2100000, guid: ff03c5911bd5dfa49a040cf45420a0e4, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_SoccerAgent + second: {fileID: 2100000, guid: ff03c5911bd5dfa49a040cf45420a0e4, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_White + second: {fileID: 2100000, guid: 6a39c0407dd85684384bf0277294e9b6, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_goalMaterial + second: {fileID: 2100000, guid: ef4e40785f0a2bc409010f7bed622ee0, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef55820400027cd712b8a57b56e8baa79f724593 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6809ced55cda049b1a010b37a70a10ee +folderAsset: yes +timeCreated: 1515613083 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall.meta new file mode 100644 index 0000000000000000000000000000000000000000..86347a5abb228e62cf134b96109ed23e328ad5d3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 335257470e04a4baab8013eeefb17768 +folderAsset: yes +timeCreated: 1515574366 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..ee8fe5a82f2791ddb1cec1f20293b78e1780091c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ca25f5934cb6f5e469a9be3010ef64dc +folderAsset: yes +timeCreated: 1488398870 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/Black-Ball-Material.mat b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/Black-Ball-Material.mat new file mode 100644 index 0000000000000000000000000000000000000000..293e036eb44437c00a773f844c2dbfe309e1d9e7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/Black-Ball-Material.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Black-Ball-Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _NORMALMAP _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: a0d8751da35d5344ea4738f6a8227a0d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/Black-Ball-Material.mat.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/Black-Ball-Material.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..b189eac6ff6a56087a6d4d55f5c7e199739b27cc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/Black-Ball-Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb69c479c3cec624b96dfe20d305c1b9 +timeCreated: 1488398871 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/White-Ball-Material.mat b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/White-Ball-Material.mat new file mode 100644 index 0000000000000000000000000000000000000000..d8260313f874ac48c73f58628600eadaea1d0da9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/White-Ball-Material.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: White-Ball-Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _NORMALMAP _SPECULARHIGHLIGHTS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: a0d8751da35d5344ea4738f6a8227a0d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/White-Ball-Material.mat.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/White-Ball-Material.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..bafc15f2a4eed90c767313b84c42c10044b6f9d4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Materials/White-Ball-Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cff0f8a4e9c85a045be6d610d20b87b3 +timeCreated: 1488398871 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..76e858e9e72047033eadc1cf881efacd8986db1b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c5d8a6c3714e5f843b93ff540e6ac8c0 +folderAsset: yes +timeCreated: 1488399503 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes/SoccerBallMesh.fbx b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes/SoccerBallMesh.fbx new file mode 100644 index 0000000000000000000000000000000000000000..06cb090808c335a490018dce4320e41dd5f82d0d Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes/SoccerBallMesh.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes/SoccerBallMesh.fbx.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes/SoccerBallMesh.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..3b51ce88c9732a3daa8d10330d61a00bad278f72 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Meshes/SoccerBallMesh.fbx.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 58119f7e9f45c2944a0b18dd33378ffd +timeCreated: 1488399239 +licenseType: Store +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: Ball-LP + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0b5852d6ed163b9dcb45763be7707a38eb19e6b5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0568f5915658c3f4fa3c842868a406ee +folderAsset: yes +timeCreated: 1488399515 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs/SoccerBall.prefab b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs/SoccerBall.prefab new file mode 100644 index 0000000000000000000000000000000000000000..c696e4169a0220a93d5f028b679ca653605319c3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs/SoccerBall.prefab @@ -0,0 +1,132 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1975457108487340} + m_IsPrefabParent: 1 +--- !u!1 &1975457108487340 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4935240531098310} + - component: {fileID: 33935909779426952} + - component: {fileID: 23737651838244920} + - component: {fileID: 135134225773752490} + - component: {fileID: 114729878072981838} + - component: {fileID: 54501682632205078} + m_Layer: 0 + m_Name: SoccerBall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4935240531098310 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1975457108487340} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.161438, y: 1.01, z: -6} + m_LocalScale: {x: 7.95607, y: 7.95607, z: 7.95607} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23737651838244920 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1975457108487340} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: cff0f8a4e9c85a045be6d610d20b87b3, type: 2} + - {fileID: 2100000, guid: fb69c479c3cec624b96dfe20d305c1b9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33935909779426952 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1975457108487340} + m_Mesh: {fileID: 4300000, guid: 58119f7e9f45c2944a0b18dd33378ffd, type: 3} +--- !u!54 &54501682632205078 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1975457108487340} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.1 + m_AngularDrag: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 1 +--- !u!114 &114729878072981838 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1975457108487340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93558b952b37a4b0ebaca3ca6711bcc4, type: 3} + m_Name: + m_EditorClassIdentifier: + area: {fileID: 0} + lastTouchedBy: {fileID: 0} + agentTag: agent + redGoalTag: redGoal + blueGoalTag: blueGoal +--- !u!135 &135134225773752490 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1975457108487340} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.11000001 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs/SoccerBall.prefab.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs/SoccerBall.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..6992030b9ea91ce18448e6e0d69db5bca58d322f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Prefabs/SoccerBall.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec3e8f3ed27e2244caaedaf589590a03 +timeCreated: 1488399492 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures.meta new file mode 100644 index 0000000000000000000000000000000000000000..c4e5cfe141121c667a7455796eaa08cf740ea889 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6faa3d855cf626b4a9c681d552256f42 +folderAsset: yes +timeCreated: 1488399466 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures/SoccerBallNormalMap.png b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures/SoccerBallNormalMap.png new file mode 100644 index 0000000000000000000000000000000000000000..02ef0b0c5b965ba1a8788c8016bd82bfaa448313 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures/SoccerBallNormalMap.png differ diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures/SoccerBallNormalMap.png.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures/SoccerBallNormalMap.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..637cef6ba82b1c338fcbb273b3f13dcfbbfc936f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerBall/Textures/SoccerBallNormalMap.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: a0d8751da35d5344ea4738f6a8227a0d +timeCreated: 1488398870 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab new file mode 100644 index 0000000000000000000000000000000000000000..33e7c3f39f39ec65c97619f12307b9718cdfc540 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab @@ -0,0 +1,5309 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3521400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3521401} + m_Layer: 0 + m_Name: WallColliders + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3521401 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3521400} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1730970187} + - {fileID: 1013497680} + m_Father: {fileID: 257899726} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &25743880 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 25743881} + - component: {fileID: 25743882} + m_Layer: 0 + m_Name: Wall Angle (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &25743881 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25743880} + m_LocalRotation: {x: 0, y: -0.5, z: 0, w: 0.8660254} + m_LocalPosition: {x: -1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1013497680} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -60, z: 0} +--- !u!65 &25743882 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25743880} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &129409745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 129409746} + - component: {fileID: 129409747} + m_Layer: 0 + m_Name: Wall Angle (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &129409746 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 129409745} + m_LocalRotation: {x: 0, y: -0.5, z: 0, w: 0.8660254} + m_LocalPosition: {x: -1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1730970187} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -60, z: 0} +--- !u!65 &129409747 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 129409745} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &159982127 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 159982128} + - component: {fileID: 159982131} + - component: {fileID: 159982130} + - component: {fileID: 159982129} + m_Layer: 0 + m_Name: GoalAreaBlue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &159982128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159982127} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1400, y: 0, z: 0} + m_LocalScale: {x: 300, y: 10, z: 1200} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &159982131 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159982127} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &159982130 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159982127} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 0 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &159982129 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159982127} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &166240760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 166240761} + - component: {fileID: 166240763} + - component: {fileID: 166240762} + m_Layer: 0 + m_Name: CenterPitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &166240761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166240760} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000061035156, y: 1, z: 0.000061035156} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &166240763 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166240760} + m_Mesh: {fileID: 4300022, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &166240762 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166240760} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ff03c5911bd5dfa49a040cf45420a0e4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &257899725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 257899726} + - component: {fileID: 257899730} + - component: {fileID: 257899729} + - component: {fileID: 257899728} + - component: {fileID: 257899727} + m_Layer: 0 + m_Name: Field + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &257899726 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257899725} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3521401} + - {fileID: 166240761} + - {fileID: 2075395422} + - {fileID: 1867830919} + - {fileID: 971710692} + - {fileID: 809268602} + - {fileID: 1420281428} + - {fileID: 740089993} + - {fileID: 2036291520} + - {fileID: 868835400} + - {fileID: 901290777} + - {fileID: 2091312082} + - {fileID: 601292580} + - {fileID: 159982128} + - {fileID: 784958407} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &257899730 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257899725} + m_Mesh: {fileID: 4300000, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &257899729 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257899725} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ff03c5911bd5dfa49a040cf45420a0e4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &257899728 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257899725} + m_Material: {fileID: 13400000, guid: 1d7384a79905e47399076985ef6317bb, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 3100, y: 100, z: 1500.0001} + m_Center: {x: 0, y: -50, z: 0} +--- !u!215 &257899727 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257899725} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 0 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 512 + m_UpdateFrequency: 0 + m_BoxSize: {x: 34, y: 15, z: 18} + m_BoxOffset: {x: 0, y: 0, z: 0} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 0 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} +--- !u!1 &309062024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 309062025} + - component: {fileID: 309062026} + m_Layer: 0 + m_Name: Wall Angle + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &309062025 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 309062024} + m_LocalRotation: {x: -0, y: 0.49999917, z: -0, w: 0.86602587} + m_LocalPosition: {x: 1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1013497680} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 60.000004, z: 0} +--- !u!65 &309062026 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 309062024} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &459835897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 459835898} + - component: {fileID: 459835899} + m_Layer: 0 + m_Name: Side + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &459835898 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 459835897} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 176, z: 775} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1730970187} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &459835899 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 459835897} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 31, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: -0.011573717} +--- !u!1 &601292579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 601292580} + - component: {fileID: 601292583} + - component: {fileID: 601292582} + - component: {fileID: 601292581} + m_Layer: 0 + m_Name: GoalAreaPurple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &601292580 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601292579} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1400, y: 0, z: 0} + m_LocalScale: {x: 300, y: 10, z: 1200} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &601292583 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601292579} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &601292582 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601292579} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 0 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &601292581 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601292579} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &695073581 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 695073582} + - component: {fileID: 695073583} + m_Layer: 0 + m_Name: Side + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &695073582 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695073581} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 176, z: 775} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1013497680} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &695073583 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695073581} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 31, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: -0.011573717} +--- !u!1 &740089992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 740089993} + - component: {fileID: 740089995} + - component: {fileID: 740089994} + m_Layer: 0 + m_Name: GoalNetBlueOuter + m_TagString: blueGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &740089993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740089992} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1643.9795, y: 186.06555, z: 0.49998474} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &740089995 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740089992} + m_Mesh: {fileID: 4300008, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &740089994 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740089992} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &784958406 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 784958407} + - component: {fileID: 784958408} + m_Layer: 0 + m_Name: Roof + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &784958407 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784958406} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 425, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &784958408 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784958406} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 30, y: 0.1, z: 16} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &809268601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 809268602} + - component: {fileID: 809268605} + - component: {fileID: 809268604} + - component: {fileID: 809268603} + m_Layer: 0 + m_Name: GoalPurple + m_TagString: purpleGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &809268602 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809268601} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1650, y: -25, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &809268605 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809268601} + m_Mesh: {fileID: 4300020, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &809268604 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809268601} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &809268603 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809268601} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200, y: 50, z: 850.0001} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &868835399 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 868835400} + - component: {fileID: 868835402} + - component: {fileID: 868835401} + m_Layer: 0 + m_Name: GoalNetPurpleOuter + m_TagString: purpleGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &868835400 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 868835399} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1640.98, y: 186.06555, z: -0.50001526} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &868835402 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 868835399} + m_Mesh: {fileID: 4300012, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &868835401 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 868835399} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &901290776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 901290777} + - component: {fileID: 901290780} + - component: {fileID: 901290779} + m_Layer: 0 + m_Name: WallSideA + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &901290777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 901290776} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -774.99994, y: 175, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &901290780 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 901290776} + m_Mesh: {fileID: 4300014, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &901290779 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 901290776} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &905539299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 905539300} + - component: {fileID: 905539301} + m_Layer: 0 + m_Name: Wall Angle + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &905539300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905539299} + m_LocalRotation: {x: -0, y: 0.49999917, z: -0, w: 0.86602587} + m_LocalPosition: {x: 1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1730970187} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 60.000004, z: 0} +--- !u!65 &905539301 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905539299} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &971710691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 971710692} + - component: {fileID: 971710695} + - component: {fileID: 971710694} + - component: {fileID: 971710693} + m_Layer: 0 + m_Name: GoalBlue + m_TagString: blueGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &971710692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 971710691} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1650, y: -25, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &971710695 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 971710691} + m_Mesh: {fileID: 4300018, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &971710694 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 971710691} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &971710693 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 971710691} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200, y: 50, z: 850.0001} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1013497679 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1013497680} + m_Layer: 0 + m_Name: SideB + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1013497680 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013497679} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000021010635} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 695073582} + - {fileID: 309062025} + - {fileID: 25743881} + m_Father: {fileID: 3521401} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: -180.00002, z: 0} +--- !u!1 &1420281427 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1420281428} + - component: {fileID: 1420281434} + - component: {fileID: 1420281433} + - component: {fileID: 1420281432} + - component: {fileID: 1420281431} + - component: {fileID: 1420281430} + - component: {fileID: 1420281429} + m_Layer: 0 + m_Name: GoalNetBlue + m_TagString: blueGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1420281428 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1650, y: 192.0061, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1420281434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_Mesh: {fileID: 4300006, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1420281433 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1420281432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200.00024, y: 384.01212, z: 10} + m_Center: {x: 0.00023841858, y: 0, z: -420} +--- !u!65 &1420281431 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200.00024, y: 384.01212, z: 10} + m_Center: {x: 0.00023841858, y: 0, z: 420} +--- !u!65 &1420281430 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 12.737513, y: 384.01212, z: 830} + m_Center: {x: -93.6311, y: 0, z: 0} +--- !u!65 &1420281429 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420281427} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 186.31436, y: 7.4030876, z: 830} + m_Center: {x: 6.8431735, y: 188.3043, z: 0} +--- !u!1 &1730970186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1730970187} + m_Layer: 0 + m_Name: SideA + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1730970187 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1730970186} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 459835898} + - {fileID: 905539300} + - {fileID: 129409746} + m_Father: {fileID: 3521401} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1867830918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1867830919} + - component: {fileID: 1867830922} + - component: {fileID: 1867830921} + m_Layer: 0 + m_Name: GlassSideB + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1867830919 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867830918} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 272.05, z: -607.00037} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1867830922 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867830918} + m_Mesh: {fileID: 4300004, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1867830921 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867830918} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ec99cc74da6543b459e71a51834b037d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2036291519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2036291520} + - component: {fileID: 2036291526} + - component: {fileID: 2036291525} + - component: {fileID: 2036291524} + - component: {fileID: 2036291523} + - component: {fileID: 2036291522} + - component: {fileID: 2036291521} + m_Layer: 0 + m_Name: GoalNetPurple + m_TagString: purpleGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &2036291520 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1647, y: 192.0061, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2036291526 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_Mesh: {fileID: 4300010, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &2036291525 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2036291524 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200.00047, y: 384.01212, z: 10} + m_Center: {x: -0.00023841858, y: 0, z: -420} +--- !u!65 &2036291523 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200.00047, y: 384.01212, z: 10} + m_Center: {x: -0.00023841858, y: 0, z: 420} +--- !u!65 &2036291522 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 10, y: 384.01212, z: 830} + m_Center: {x: 93.6, y: 0, z: 0} +--- !u!65 &2036291521 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036291519} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 200.00047, y: 13.09334, z: 830} + m_Center: {x: -0.00023841858, y: 185.45909, z: 0} +--- !u!1 &2075395421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2075395422} + - component: {fileID: 2075395425} + - component: {fileID: 2075395424} + m_Layer: 0 + m_Name: GlassSideA + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &2075395422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2075395421} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 272.05, z: 607.00037} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2075395425 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2075395421} + m_Mesh: {fileID: 4300002, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &2075395424 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2075395421} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ec99cc74da6543b459e71a51834b037d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2091312081 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2091312082} + - component: {fileID: 2091312085} + - component: {fileID: 2091312084} + m_Layer: 0 + m_Name: WallSideB + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &2091312082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091312081} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 775, y: 175, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257899726} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2091312085 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091312081} + m_Mesh: {fileID: 4300016, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &2091312084 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091312081} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1032056389038868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4859417942674614} + - component: {fileID: 20622362340627540} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4859417942674614 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1032056389038868} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20622362340627540 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1032056389038868} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1083582452036196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4991109413118678} + - component: {fileID: 33298283473714412} + - component: {fileID: 23549972778301016} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4991109413118678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083582452036196} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4859417942674614} + - {fileID: 4039980604236862} + - {fileID: 4683691907469924} + - {fileID: 4222051823283070} + - {fileID: 4671048899227928} + m_Father: {fileID: 4444285537983296} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33298283473714412 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083582452036196} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23549972778301016 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083582452036196} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1095606497496374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4277721046484044} + - component: {fileID: 54348679551516588} + - component: {fileID: 135232974003521068} + - component: {fileID: 114734187185382186} + - component: {fileID: 114492261207303438} + - component: {fileID: 114320493772006642} + - component: {fileID: 9152743230243588598} + - component: {fileID: 798330825103180240} + m_Layer: 0 + m_Name: PurpleStriker + m_TagString: purpleAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4277721046484044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 3.19, y: 0.5, z: 1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4540034559941056} + - {fileID: 2148914632064875291} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!54 &54348679551516588 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + serializedVersion: 4 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &135232974003521068 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114734187185382186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 8cd4584c2f2cb4c5fb51675d364e10ec, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: SoccerTwos + TeamId: 1 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_DeterministicInference: 0 + m_ObservableAttributeHandling: 0 +--- !u!114 &114492261207303438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 0 + position: 2 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &114320493772006642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: PurpleRayPerceptionSensor + m_DetectableTags: + - ball + - purpleGoal + - blueGoal + - wall + - purpleAgent + - blueAgent + m_RaysPerDirection: 5 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &9152743230243588598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + DecisionStep: 0 + TakeActionsBetweenDecisions: 1 +--- !u!114 &798330825103180240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1101518129530804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4904293978873118} + - component: {fileID: 20243662707170704} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4904293978873118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101518129530804} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20243662707170704 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101518129530804} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1131626411948014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4444285537983296} + - component: {fileID: 54609996481602788} + - component: {fileID: 135208952479003512} + - component: {fileID: 114387866097048300} + - component: {fileID: 114850431417842684} + - component: {fileID: 114516244030127556} + - component: {fileID: 404683423509059512} + - component: {fileID: 8557426429796011212} + m_Layer: 0 + m_Name: BlueStriker + m_TagString: blueAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4444285537983296 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -3.19, y: 0.5, z: 1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4991109413118678} + - {fileID: 4942358209803819540} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!54 &54609996481602788 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + serializedVersion: 4 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &135208952479003512 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114387866097048300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 8cd4584c2f2cb4c5fb51675d364e10ec, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: SoccerTwos + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_DeterministicInference: 0 + m_ObservableAttributeHandling: 0 +--- !u!114 &114850431417842684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 1 + position: 2 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &114516244030127556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensor + m_DetectableTags: + - ball + - blueGoal + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 5 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &404683423509059512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + DecisionStep: 0 + TakeActionsBetweenDecisions: 1 +--- !u!114 &8557426429796011212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1141134673700168 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4558743310993102} + - component: {fileID: 8122248192225965164} + m_Layer: 0 + m_Name: SoccerFieldTwos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4558743310993102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1141134673700168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4540201673231058} + - {fileID: 4867652605555692} + - {fileID: 4444285537983296} + - {fileID: 4277721046484044} + - {fileID: 7843730402782877929} + - {fileID: 5643284048999299831} + - {fileID: 257899726} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8122248192225965164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1141134673700168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e397bc3ae78c466a8d44400f5b68e38, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxEnvironmentSteps: 5000 + ball: {fileID: 1682753582128710} + ballRb: {fileID: 0} + AgentsList: + - Agent: {fileID: 114850431417842684} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 114492261207303438} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 5379409612883756837} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 5320024511406682322} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} +--- !u!1 &1366507812774098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4266272446237730} + - component: {fileID: 33201643863918062} + - component: {fileID: 23624366765569318} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4266272446237730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366507812774098} + m_LocalRotation: {x: -0, y: -0, z: -0.036135223, w: 0.999347} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -4.142} +--- !u!33 &33201643863918062 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366507812774098} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23624366765569318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366507812774098} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1383518430785328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4867652605555692} + m_Layer: 0 + m_Name: Players + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4867652605555692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383518430785328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4558743310993102} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1557392375314408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4039980604236862} + - component: {fileID: 33462524524189736} + - component: {fileID: 23293559766629696} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4039980604236862 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1557392375314408} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33462524524189736 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1557392375314408} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23293559766629696 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1557392375314408} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1623838202568698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4222051823283070} + - component: {fileID: 33079734303900652} + - component: {fileID: 23044742990593156} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4222051823283070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623838202568698} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33079734303900652 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623838202568698} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23044742990593156 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623838202568698} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1682753582128710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4540201673231058} + - component: {fileID: 33063578823143084} + - component: {fileID: 23962084906832836} + - component: {fileID: 135993924486820224} + - component: {fileID: 114273807544954564} + - component: {fileID: 54100138833592438} + m_Layer: 0 + m_Name: Soccer Ball + m_TagString: ball + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4540201673231058 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4558743310993102} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33063578823143084 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Mesh: {fileID: 4300000, guid: 7cb7c129b7ec1fb4293dd40773bdce33, type: 3} +--- !u!23 &23962084906832836 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1644c0cb0c67e314194579be857f87da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &135993924486820224 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Material: {fileID: 13400000, guid: 54ed79b9254e1456587c8cf3849f6dc1, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 41.61146 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114273807544954564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93558b952b37a4b0ebaca3ca6711bcc4, type: 3} + m_Name: + m_EditorClassIdentifier: + area: {fileID: 1141134673700168} + envController: {fileID: 0} + purpleGoalTag: purpleGoal + blueGoalTag: blueGoal +--- !u!54 &54100138833592438 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + serializedVersion: 4 + m_Mass: 3 + m_Drag: 1 + m_AngularDrag: 1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 4 + m_CollisionDetection: 1 +--- !u!1 &1817598442362300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4671048899227928} + - component: {fileID: 33400024424252764} + - component: {fileID: 23876007776278096} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4671048899227928 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817598442362300} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33400024424252764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817598442362300} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23876007776278096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817598442362300} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1836679221278734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4540034559941056} + - component: {fileID: 33174308205182346} + - component: {fileID: 23344424056921900} + m_Layer: 0 + m_Name: AgentCube_Purple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4540034559941056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836679221278734} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4904293978873118} + - {fileID: 4058002210749422} + - {fileID: 4857307866975302} + - {fileID: 4874120150569100} + - {fileID: 4266272446237730} + m_Father: {fileID: 4277721046484044} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33174308205182346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836679221278734} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23344424056921900 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836679221278734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1841872787705274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4058002210749422} + - component: {fileID: 33223661134341430} + - component: {fileID: 23837187974122722} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4058002210749422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841872787705274} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33223661134341430 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841872787705274} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23837187974122722 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841872787705274} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1931023723143276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4874120150569100} + - component: {fileID: 33486671041495046} + - component: {fileID: 23179297000275962} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4874120150569100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931023723143276} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33486671041495046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931023723143276} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23179297000275962 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931023723143276} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1933336248964008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4857307866975302} + - component: {fileID: 33689349573892708} + - component: {fileID: 23033472357858008} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4857307866975302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1933336248964008} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33689349573892708 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1933336248964008} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23033472357858008 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1933336248964008} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1988976889579366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4683691907469924} + - component: {fileID: 33422890814875164} + - component: {fileID: 23996567852471186} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4683691907469924 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988976889579366} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33422890814875164 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988976889579366} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23996567852471186 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988976889579366} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &736576636681813138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1271329604630503873} + - component: {fileID: 7548069788310921501} + m_Layer: 0 + m_Name: PurpleReverseRays (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1271329604630503873 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 736576636681813138} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5643284048999299831} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &7548069788310921501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 736576636681813138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: PurpleRayPerceptionSensorReverse + m_DetectableTags: + - ball + - purpleGoal + - blueGoal + - wall + - purpleAgent + - blueAgent + m_RaysPerDirection: 1 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!1 &742736642297762088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5868624583800292425} + - component: {fileID: 5360408467290783020} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5868624583800292425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742736642297762088} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4355548278584398525} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &5360408467290783020 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742736642297762088} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1897170901855235213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4942358209803819540} + - component: {fileID: 796105769966339250} + m_Layer: 0 + m_Name: BlueReverseRays + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4942358209803819540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897170901855235213} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4444285537983296} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &796105769966339250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897170901855235213} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensorReverse + m_DetectableTags: + - ball + - blueGoal + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 1 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!1 &2016057044266316337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3343797950804926185} + - component: {fileID: 7679702203014927471} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3343797950804926185 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016057044266316337} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &7679702203014927471 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016057044266316337} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &2329918556726399591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3597096365793476057} + - component: {fileID: 3272648336714276914} + - component: {fileID: 6521557456685239880} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3597096365793476057 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329918556726399591} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &3272648336714276914 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329918556726399591} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6521557456685239880 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329918556726399591} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2909838886639257826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3567543467983998314} + - component: {fileID: 5705175531533507764} + - component: {fileID: 630866108016762318} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3567543467983998314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2909838886639257826} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &5705175531533507764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2909838886639257826} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &630866108016762318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2909838886639257826} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &4407673136905670519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8224668928246715092} + - component: {fileID: 217286280874173272} + m_Layer: 0 + m_Name: BlueReverseRays (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8224668928246715092 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4407673136905670519} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7843730402782877929} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &217286280874173272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4407673136905670519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensorReverse + m_DetectableTags: + - ball + - blueGoal + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 1 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!1 &4599713170205044794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6439063416007821090} + - component: {fileID: 4119411769362767890} + - component: {fileID: 304632679239919484} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6439063416007821090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4599713170205044794} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &4119411769362767890 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4599713170205044794} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &304632679239919484 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4599713170205044794} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6007240757639156798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3493354028456101517} + - component: {fileID: 6322537730689507644} + - component: {fileID: 4272497041746572966} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3493354028456101517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6007240757639156798} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3343797950804926185} + - {fileID: 8909689398596890234} + - {fileID: 3597096365793476057} + - {fileID: 6439063416007821090} + - {fileID: 3567543467983998314} + m_Father: {fileID: 7843730402782877929} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6322537730689507644 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6007240757639156798} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4272497041746572966 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6007240757639156798} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6257467487437560250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5643284048999299831} + - component: {fileID: 1324273637967659108} + - component: {fileID: 5270610052139618491} + - component: {fileID: 8577361778124631730} + - component: {fileID: 5320024511406682322} + - component: {fileID: 1023485123796557062} + - component: {fileID: 8734522883866558980} + - component: {fileID: 6283479335904612434} + m_Layer: 0 + m_Name: PurpleStriker (1) + m_TagString: purpleAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5643284048999299831 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 3.19, y: 0.5, z: -1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4355548278584398525} + - {fileID: 1271329604630503873} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!54 &1324273637967659108 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + serializedVersion: 4 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &5270610052139618491 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8577361778124631730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 8cd4584c2f2cb4c5fb51675d364e10ec, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: SoccerTwos + TeamId: 1 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_DeterministicInference: 0 + m_ObservableAttributeHandling: 0 +--- !u!114 &5320024511406682322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 0 + position: 2 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &1023485123796557062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: PurpleRayPerceptionSensor + m_DetectableTags: + - ball + - purpleGoal + - blueGoal + - wall + - purpleAgent + - blueAgent + m_RaysPerDirection: 5 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &8734522883866558980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + DecisionStep: 0 + TakeActionsBetweenDecisions: 1 +--- !u!114 &6283479335904612434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6257467487437560250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &6442519122303792292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4355548278584398525} + - component: {fileID: 3534255588188033322} + - component: {fileID: 4872299408492315403} + m_Layer: 0 + m_Name: AgentCube_Purple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4355548278584398525 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442519122303792292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5868624583800292425} + - {fileID: 5053100904557680885} + - {fileID: 2501726581560323400} + - {fileID: 8802067563818986573} + - {fileID: 7605150222862474933} + m_Father: {fileID: 5643284048999299831} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3534255588188033322 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442519122303792292} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4872299408492315403 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442519122303792292} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7925489420550093475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8909689398596890234} + - component: {fileID: 7272623948078999278} + - component: {fileID: 3843749850161548145} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8909689398596890234 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7925489420550093475} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &7272623948078999278 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7925489420550093475} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3843749850161548145 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7925489420550093475} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8225820398989514451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5053100904557680885} + - component: {fileID: 4888431171612470503} + - component: {fileID: 7155011180492427886} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5053100904557680885 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8225820398989514451} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4355548278584398525} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &4888431171612470503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8225820398989514451} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7155011180492427886 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8225820398989514451} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8351168634331197049 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8802067563818986573} + - component: {fileID: 552518267806356677} + - component: {fileID: 3398345510881788368} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8802067563818986573 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8351168634331197049} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4355548278584398525} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &552518267806356677 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8351168634331197049} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3398345510881788368 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8351168634331197049} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8360301818957399454 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7843730402782877929} + - component: {fileID: 648637983722350212} + - component: {fileID: 559349321895083135} + - component: {fileID: 3316085536305919483} + - component: {fileID: 5379409612883756837} + - component: {fileID: 2562571719799803906} + - component: {fileID: 1018414316889932458} + - component: {fileID: 6939753220642424022} + m_Layer: 0 + m_Name: BlueStriker (1) + m_TagString: blueAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7843730402782877929 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -3.19, y: 0.5, z: -1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3493354028456101517} + - {fileID: 8224668928246715092} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!54 &648637983722350212 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + serializedVersion: 4 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &559349321895083135 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3316085536305919483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 8cd4584c2f2cb4c5fb51675d364e10ec, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: SoccerTwos + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_DeterministicInference: 0 + m_ObservableAttributeHandling: 0 +--- !u!114 &5379409612883756837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 1 + position: 2 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &2562571719799803906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensor + m_DetectableTags: + - ball + - blueGoal + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 5 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &1018414316889932458 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + DecisionStep: 0 + TakeActionsBetweenDecisions: 1 +--- !u!114 &6939753220642424022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &8673569163220857793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7605150222862474933} + - component: {fileID: 8415410816520105838} + - component: {fileID: 4306488311039827830} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7605150222862474933 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8673569163220857793} + m_LocalRotation: {x: -0, y: -0, z: -0.036135223, w: 0.999347} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4355548278584398525} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -4.142} +--- !u!33 &8415410816520105838 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8673569163220857793} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4306488311039827830 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8673569163220857793} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8902619455849538040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2501726581560323400} + - component: {fileID: 2536558714243097673} + - component: {fileID: 509807725215820459} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2501726581560323400 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8902619455849538040} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4355548278584398525} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &2536558714243097673 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8902619455849538040} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &509807725215820459 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8902619455849538040} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &9136065168043485173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2148914632064875291} + - component: {fileID: 4662000663245579659} + m_Layer: 0 + m_Name: PurpleReverseRays + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2148914632064875291 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9136065168043485173} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4277721046484044} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &4662000663245579659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9136065168043485173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: PurpleRayPerceptionSensorReverse + m_DetectableTags: + - ball + - purpleGoal + - blueGoal + - wall + - purpleAgent + - blueAgent + m_RaysPerDirection: 1 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + m_AlternatingRayOrder: 1 + m_UseBatchedRaycasts: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..43a1f950775632e2be560c7f37ca5be234fbbbc3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54f3340298537426e96a6cc530e2d5d8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/StrikersVsGoalieField.prefab b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/StrikersVsGoalieField.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6f174163dd6fd2b91ec430b8d912e9e7e969c042 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/StrikersVsGoalieField.prefab @@ -0,0 +1,4138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &253232877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 253232878} + - component: {fileID: 253232880} + - component: {fileID: 253232879} + m_Layer: 0 + m_Name: WallSideB + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &253232878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 253232877} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 775, y: 175, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &253232880 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 253232877} + m_Mesh: {fileID: 4300016, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &253232879 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 253232877} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &444114134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 444114135} + - component: {fileID: 444114137} + - component: {fileID: 444114136} + m_Layer: 0 + m_Name: CenterPitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &444114135 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444114134} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000061035156, y: 1, z: 0.000061035156} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &444114137 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444114134} + m_Mesh: {fileID: 4300022, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &444114136 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444114134} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ff03c5911bd5dfa49a040cf45420a0e4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &473053727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 473053728} + m_Layer: 0 + m_Name: SideB + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &473053728 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473053727} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000021010635} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1227615309} + - {fileID: 1155121818} + - {fileID: 2049130509} + m_Father: {fileID: 1838648424} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: -180.00002, z: 0} +--- !u!1 &474940249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 474940250} + - component: {fileID: 474940251} + m_Layer: 0 + m_Name: Roof + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &474940250 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474940249} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 425, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &474940251 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474940249} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 30, y: 0.1, z: 16} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &615018290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 615018291} + - component: {fileID: 615018297} + - component: {fileID: 615018296} + - component: {fileID: 615018295} + - component: {fileID: 615018294} + - component: {fileID: 615018293} + - component: {fileID: 615018292} + m_Layer: 0 + m_Name: GoalNetBlue + m_TagString: blueGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &615018291 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1650, y: 192.0061, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &615018297 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_Mesh: {fileID: 4300006, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &615018296 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &615018295 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200.00024, y: 384.01212, z: 10} + m_Center: {x: 0.00023841858, y: 0, z: -420} +--- !u!65 &615018294 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200.00024, y: 384.01212, z: 10} + m_Center: {x: 0.00023841858, y: 0, z: 420} +--- !u!65 &615018293 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 12.737513, y: 384.01212, z: 830} + m_Center: {x: -93.6311, y: 0, z: 0} +--- !u!65 &615018292 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615018290} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 186.31436, y: 7.4030876, z: 830} + m_Center: {x: 6.8431735, y: 188.3043, z: 0} +--- !u!1 &654598887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 654598888} + - component: {fileID: 654598890} + - component: {fileID: 654598889} + m_Layer: 0 + m_Name: GlassSideB + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &654598888 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 654598887} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 272.05, z: -607.00037} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &654598890 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 654598887} + m_Mesh: {fileID: 4300004, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &654598889 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 654598887} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ec99cc74da6543b459e71a51834b037d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &738577471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738577472} + - component: {fileID: 738577478} + - component: {fileID: 738577477} + - component: {fileID: 738577476} + - component: {fileID: 738577475} + - component: {fileID: 738577474} + - component: {fileID: 738577473} + m_Layer: 0 + m_Name: GoalNetPurple + m_TagString: purpleGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &738577472 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1647, y: 192.0061, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &738577478 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_Mesh: {fileID: 4300010, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &738577477 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &738577476 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200.00047, y: 384.01212, z: 10} + m_Center: {x: -0.00023841858, y: 0, z: -420} +--- !u!65 &738577475 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200.00047, y: 384.01212, z: 10} + m_Center: {x: -0.00023841858, y: 0, z: 420} +--- !u!65 &738577474 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10, y: 384.01212, z: 830} + m_Center: {x: 93.6, y: 0, z: 0} +--- !u!65 &738577473 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738577471} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200.00047, y: 13.09334, z: 830} + m_Center: {x: -0.00023841858, y: 185.45909, z: 0} +--- !u!1 &922552524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 922552525} + - component: {fileID: 922552527} + - component: {fileID: 922552526} + m_Layer: 0 + m_Name: GoalNetPurpleOuter + m_TagString: purpleGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &922552525 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 922552524} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1640.98, y: 186.06555, z: -0.50001526} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &922552527 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 922552524} + m_Mesh: {fileID: 4300012, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &922552526 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 922552524} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &940293614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 940293615} + - component: {fileID: 940293616} + m_Layer: 0 + m_Name: Side + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &940293615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 940293614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 176, z: 775} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 1280034523} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &940293616 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 940293614} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 31, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: -0.011573717} +--- !u!1 &1155121817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1155121818} + - component: {fileID: 1155121819} + m_Layer: 0 + m_Name: Wall Angle + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1155121818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1155121817} + m_LocalRotation: {x: -0, y: 0.49999917, z: -0, w: 0.86602587} + m_LocalPosition: {x: 1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 473053728} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 60.000004, z: 0} +--- !u!65 &1155121819 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1155121817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1227615308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1227615309} + - component: {fileID: 1227615310} + m_Layer: 0 + m_Name: Side + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1227615309 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227615308} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 176, z: 775} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 473053728} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1227615310 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227615308} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 31, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: -0.011573717} +--- !u!1 &1280034522 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1280034523} + m_Layer: 0 + m_Name: SideA + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1280034523 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1280034522} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 940293615} + - {fileID: 1348508957} + - {fileID: 1681476315} + m_Father: {fileID: 1838648424} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1348508956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1348508957} + - component: {fileID: 1348508958} + m_Layer: 0 + m_Name: Wall Angle + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1348508957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1348508956} + m_LocalRotation: {x: -0, y: 0.49999917, z: -0, w: 0.86602587} + m_LocalPosition: {x: 1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 1280034523} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 60.000004, z: 0} +--- !u!65 &1348508958 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1348508956} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1358559436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1358559437} + - component: {fileID: 1358559440} + - component: {fileID: 1358559439} + - component: {fileID: 1358559438} + m_Layer: 0 + m_Name: GoalAreaPurple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1358559437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559436} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1400, y: 0, z: 0} + m_LocalScale: {x: 300, y: 10, z: 1200} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1358559440 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559436} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1358559439 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559436} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1358559438 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559436} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1411349252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1411349253} + - component: {fileID: 1411349256} + - component: {fileID: 1411349255} + - component: {fileID: 1411349254} + m_Layer: 0 + m_Name: GoalPurple + m_TagString: purpleGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1411349253 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1411349252} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1650, y: -25, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1411349256 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1411349252} + m_Mesh: {fileID: 4300020, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1411349255 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1411349252} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1411349254 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1411349252} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200, y: 50, z: 850.0001} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1590368732 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1590368733} + - component: {fileID: 1590368737} + - component: {fileID: 1590368736} + - component: {fileID: 1590368735} + - component: {fileID: 1590368734} + m_Layer: 0 + m_Name: Field + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1590368733 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590368732} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 5380420931288637108} + - {fileID: 1838648424} + - {fileID: 444114135} + - {fileID: 1905370727} + - {fileID: 654598888} + - {fileID: 1685058923} + - {fileID: 1411349253} + - {fileID: 615018291} + - {fileID: 1641907511} + - {fileID: 738577472} + - {fileID: 922552525} + - {fileID: 1728133458} + - {fileID: 253232878} + - {fileID: 1358559437} + - {fileID: 1790209494} + - {fileID: 474940250} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1590368737 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590368732} + m_Mesh: {fileID: 4300000, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1590368736 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590368732} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ff03c5911bd5dfa49a040cf45420a0e4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1590368735 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590368732} + m_Material: {fileID: 13400000, guid: 1d7384a79905e47399076985ef6317bb, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 3100, y: 100, z: 1500.0001} + m_Center: {x: 0, y: -50, z: 0} +--- !u!215 &1590368734 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590368732} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 0 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 512 + m_UpdateFrequency: 0 + m_BoxSize: {x: 34, y: 15, z: 18} + m_BoxOffset: {x: 0, y: 0, z: 0} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 0 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} +--- !u!1 &1641907510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1641907511} + - component: {fileID: 1641907513} + - component: {fileID: 1641907512} + m_Layer: 0 + m_Name: GoalNetBlueOuter + m_TagString: blueGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1641907511 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641907510} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1643.9795, y: 186.06555, z: 0.49998474} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1641907513 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641907510} + m_Mesh: {fileID: 4300008, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1641907512 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641907510} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: daad6e777b6e99a46bbcded7cf6816ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1681476314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1681476315} + - component: {fileID: 1681476316} + m_Layer: 0 + m_Name: Wall Angle (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1681476315 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681476314} + m_LocalRotation: {x: 0, y: -0.5, z: 0, w: 0.8660254} + m_LocalPosition: {x: -1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 1280034523} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -60, z: 0} +--- !u!65 &1681476316 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681476314} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1685058922 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1685058923} + - component: {fileID: 1685058926} + - component: {fileID: 1685058925} + - component: {fileID: 1685058924} + m_Layer: 0 + m_Name: GoalBlue + m_TagString: blueGoal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1685058923 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1685058922} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1650, y: -25, z: -0.000015258789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1685058926 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1685058922} + m_Mesh: {fileID: 4300018, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1685058925 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1685058922} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1685058924 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1685058922} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 200, y: 50, z: 850.0001} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1728133457 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1728133458} + - component: {fileID: 1728133460} + - component: {fileID: 1728133459} + m_Layer: 0 + m_Name: WallSideA + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1728133458 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728133457} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -774.99994, y: 175, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1728133460 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728133457} + m_Mesh: {fileID: 4300014, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1728133459 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728133457} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1790209493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1790209494} + - component: {fileID: 1790209497} + - component: {fileID: 1790209496} + - component: {fileID: 1790209495} + m_Layer: 0 + m_Name: GoalAreaBlue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1790209494 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790209493} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1400, y: 0, z: 0} + m_LocalScale: {x: 300, y: 10, z: 1200} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1790209497 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790209493} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1790209496 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790209493} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1790209495 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790209493} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1838648423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1838648424} + m_Layer: 0 + m_Name: WallColliders + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1838648424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838648423} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1280034523} + - {fileID: 473053728} + m_Father: {fileID: 1590368733} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1905370726 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1905370727} + - component: {fileID: 1905370729} + - component: {fileID: 1905370728} + m_Layer: 0 + m_Name: GlassSideA + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1905370727 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1905370726} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 272.05, z: 607.00037} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1905370729 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1905370726} + m_Mesh: {fileID: 4300002, guid: 02257fc10ef7ad149b5daa123a7df881, type: 3} +--- !u!23 &1905370728 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1905370726} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ec99cc74da6543b459e71a51834b037d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2049130508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2049130509} + - component: {fileID: 2049130510} + m_Layer: 0 + m_Name: Wall Angle (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2049130509 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049130508} + m_LocalRotation: {x: 0, y: -0.5, z: 0, w: 0.8660254} + m_LocalPosition: {x: -1446, y: 176, z: 641} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 473053728} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -60, z: 0} +--- !u!65 &2049130510 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049130508} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 4.8, y: 4.5311604, z: 0.4607078} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1032056389038868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4859417942674614} + - component: {fileID: 20622362340627540} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4859417942674614 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1032056389038868} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20622362340627540 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1032056389038868} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1083582452036196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4991109413118678} + - component: {fileID: 33298283473714412} + - component: {fileID: 23549972778301016} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4991109413118678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083582452036196} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4859417942674614} + - {fileID: 4039980604236862} + - {fileID: 4683691907469924} + - {fileID: 4222051823283070} + - {fileID: 4671048899227928} + m_Father: {fileID: 4444285537983296} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33298283473714412 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083582452036196} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23549972778301016 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083582452036196} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1095606497496374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4277721046484044} + - component: {fileID: 54348679551516588} + - component: {fileID: 135232974003521068} + - component: {fileID: 114734187185382186} + - component: {fileID: 114492261207303438} + - component: {fileID: 114320493772006642} + - component: {fileID: 9152743230243588598} + - component: {fileID: 9171805407464329310} + m_Layer: 0 + m_Name: PurpleGoalie + m_TagString: purpleAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4277721046484044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 4, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4540034559941056} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!54 &54348679551516588 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &135232974003521068 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114734187185382186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: e9c10c18f4eb745d19186a54dbe3ca2e, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Goalie + TeamId: 1 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114492261207303438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 0 + position: 1 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &114320493772006642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: PurpleGoalieRayPerceptionSensor + m_DetectableTags: + - ball + - purpleGoal + - wall + - blueAgent + m_RaysPerDirection: 20 + m_MaxRayDegrees: 180 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &9152743230243588598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &9171805407464329310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095606497496374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1101518129530804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4904293978873118} + - component: {fileID: 20243662707170704} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4904293978873118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101518129530804} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20243662707170704 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101518129530804} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1131626411948014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4444285537983296} + - component: {fileID: 54609996481602788} + - component: {fileID: 135208952479003512} + - component: {fileID: 114387866097048300} + - component: {fileID: 114850431417842684} + - component: {fileID: 114516244030127556} + - component: {fileID: 404683423509059512} + - component: {fileID: 5776656799174978208} + m_Layer: 0 + m_Name: BlueStriker + m_TagString: blueAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4444285537983296 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -3.19, y: 0.5, z: 1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4991109413118678} + - {fileID: 4942358209803819540} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!54 &54609996481602788 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &135208952479003512 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114387866097048300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75a830685bf8e43918adc4783a2abebf, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Striker + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114850431417842684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 1 + position: 0 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &114516244030127556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensor + m_DetectableTags: + - ball + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 5 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &404683423509059512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &5776656799174978208 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131626411948014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1141134673700168 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4558743310993102} + - component: {fileID: 5003424191498964318} + m_Layer: 0 + m_Name: StrikersVsGoalieField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4558743310993102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1141134673700168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4540201673231058} + - {fileID: 4867652605555692} + - {fileID: 4444285537983296} + - {fileID: 4277721046484044} + - {fileID: 7843730402782877929} + - {fileID: 1590368733} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5003424191498964318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1141134673700168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e397bc3ae78c466a8d44400f5b68e38, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxEnvironmentSteps: 5000 + ball: {fileID: 1682753582128710} + ballRb: {fileID: 0} + AgentsList: + - Agent: {fileID: 114850431417842684} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 5379409612883756837} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} + - Agent: {fileID: 114492261207303438} + StartingPos: {x: 0, y: 0, z: 0} + StartingRot: {x: 0, y: 0, z: 0, w: 0} + Rb: {fileID: 0} +--- !u!1 &1366507812774098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4266272446237730} + - component: {fileID: 33201643863918062} + - component: {fileID: 23624366765569318} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4266272446237730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366507812774098} + m_LocalRotation: {x: -0, y: -0, z: -0.036135223, w: 0.999347} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -4.142} +--- !u!33 &33201643863918062 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366507812774098} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23624366765569318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366507812774098} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1383518430785328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4867652605555692} + m_Layer: 0 + m_Name: Players + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4867652605555692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383518430785328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4558743310993102} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1557392375314408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4039980604236862} + - component: {fileID: 33462524524189736} + - component: {fileID: 23293559766629696} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4039980604236862 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1557392375314408} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33462524524189736 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1557392375314408} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23293559766629696 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1557392375314408} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1623838202568698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4222051823283070} + - component: {fileID: 33079734303900652} + - component: {fileID: 23044742990593156} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4222051823283070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623838202568698} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33079734303900652 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623838202568698} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23044742990593156 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623838202568698} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1682753582128710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4540201673231058} + - component: {fileID: 33063578823143084} + - component: {fileID: 23962084906832836} + - component: {fileID: 135993924486820224} + - component: {fileID: 114273807544954564} + - component: {fileID: 54100138833592438} + m_Layer: 0 + m_Name: Soccer Ball + m_TagString: ball + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4540201673231058 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_Children: [] + m_Father: {fileID: 4558743310993102} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33063578823143084 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Mesh: {fileID: 4300000, guid: 7cb7c129b7ec1fb4293dd40773bdce33, type: 3} +--- !u!23 &23962084906832836 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1644c0cb0c67e314194579be857f87da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &135993924486820224 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Material: {fileID: 13400000, guid: 54ed79b9254e1456587c8cf3849f6dc1, type: 2} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 41.61146 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114273807544954564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93558b952b37a4b0ebaca3ca6711bcc4, type: 3} + m_Name: + m_EditorClassIdentifier: + area: {fileID: 1141134673700168} + envController: {fileID: 0} + purpleGoalTag: purpleGoal + blueGoalTag: blueGoal +--- !u!54 &54100138833592438 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682753582128710} + serializedVersion: 2 + m_Mass: 3 + m_Drag: 1 + m_AngularDrag: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 4 + m_CollisionDetection: 1 +--- !u!1 &1817598442362300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4671048899227928} + - component: {fileID: 33400024424252764} + - component: {fileID: 23876007776278096} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4671048899227928 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817598442362300} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33400024424252764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817598442362300} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23876007776278096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817598442362300} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1836679221278734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4540034559941056} + - component: {fileID: 33174308205182346} + - component: {fileID: 23344424056921900} + m_Layer: 0 + m_Name: AgentCube_Purple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4540034559941056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836679221278734} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4904293978873118} + - {fileID: 4058002210749422} + - {fileID: 4857307866975302} + - {fileID: 4874120150569100} + - {fileID: 4266272446237730} + m_Father: {fileID: 4277721046484044} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33174308205182346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836679221278734} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23344424056921900 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836679221278734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1841872787705274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4058002210749422} + - component: {fileID: 33223661134341430} + - component: {fileID: 23837187974122722} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4058002210749422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841872787705274} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33223661134341430 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841872787705274} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23837187974122722 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841872787705274} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1931023723143276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4874120150569100} + - component: {fileID: 33486671041495046} + - component: {fileID: 23179297000275962} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4874120150569100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931023723143276} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33486671041495046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931023723143276} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23179297000275962 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931023723143276} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1933336248964008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4857307866975302} + - component: {fileID: 33689349573892708} + - component: {fileID: 23033472357858008} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4857307866975302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1933336248964008} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4540034559941056} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33689349573892708 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1933336248964008} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23033472357858008 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1933336248964008} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1988976889579366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4683691907469924} + - component: {fileID: 33422890814875164} + - component: {fileID: 23996567852471186} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4683691907469924 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988976889579366} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4991109413118678} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33422890814875164 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988976889579366} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23996567852471186 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988976889579366} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1897170901855235213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4942358209803819540} + - component: {fileID: 796105769966339250} + m_Layer: 0 + m_Name: BlueReverseRays + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4942358209803819540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897170901855235213} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4444285537983296} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &796105769966339250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897170901855235213} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensorReverse + m_DetectableTags: + - ball + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 1 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!1 &2016057044266316337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3343797950804926185} + - component: {fileID: 7679702203014927471} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3343797950804926185 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016057044266316337} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &7679702203014927471 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016057044266316337} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &2329918556726399591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3597096365793476057} + - component: {fileID: 3272648336714276914} + - component: {fileID: 6521557456685239880} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3597096365793476057 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329918556726399591} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &3272648336714276914 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329918556726399591} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6521557456685239880 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329918556726399591} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2909838886639257826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3567543467983998314} + - component: {fileID: 5705175531533507764} + - component: {fileID: 630866108016762318} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3567543467983998314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2909838886639257826} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &5705175531533507764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2909838886639257826} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &630866108016762318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2909838886639257826} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4407673136905670519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8224668928246715092} + - component: {fileID: 217286280874173272} + m_Layer: 0 + m_Name: BlueReverseRays (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8224668928246715092 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4407673136905670519} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7843730402782877929} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &217286280874173272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4407673136905670519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensorReverse + m_DetectableTags: + - ball + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 1 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!1 &4599713170205044794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6439063416007821090} + - component: {fileID: 4119411769362767890} + - component: {fileID: 304632679239919484} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6439063416007821090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4599713170205044794} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &4119411769362767890 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4599713170205044794} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &304632679239919484 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4599713170205044794} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6007240757639156798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3493354028456101517} + - component: {fileID: 6322537730689507644} + - component: {fileID: 4272497041746572966} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3493354028456101517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6007240757639156798} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3343797950804926185} + - {fileID: 8909689398596890234} + - {fileID: 3597096365793476057} + - {fileID: 6439063416007821090} + - {fileID: 3567543467983998314} + m_Father: {fileID: 7843730402782877929} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6322537730689507644 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6007240757639156798} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4272497041746572966 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6007240757639156798} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7925489420550093475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8909689398596890234} + - component: {fileID: 7272623948078999278} + - component: {fileID: 3843749850161548145} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8909689398596890234 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7925489420550093475} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 3493354028456101517} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &7272623948078999278 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7925489420550093475} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3843749850161548145 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7925489420550093475} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8360301818957399454 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7843730402782877929} + - component: {fileID: 648637983722350212} + - component: {fileID: 559349321895083135} + - component: {fileID: 3316085536305919483} + - component: {fileID: 5379409612883756837} + - component: {fileID: 2562571719799803906} + - component: {fileID: 1018414316889932458} + - component: {fileID: 493348456414434994} + m_Layer: 0 + m_Name: BlueStriker (1) + m_TagString: blueAgent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7843730402782877929 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -3.19, y: 0.5, z: -1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3493354028456101517} + - {fileID: 8224668928246715092} + m_Father: {fileID: 4558743310993102} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!54 &648637983722350212 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + serializedVersion: 2 + m_Mass: 50 + m_Drag: 3 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 1 +--- !u!135 &559349321895083135 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3316085536305919483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75a830685bf8e43918adc4783a2abebf, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Striker + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &5379409612883756837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2688ef4a36349f9aa010020c32d198, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 + team: 1 + position: 0 + agentRb: {fileID: 0} + initialPos: {x: 0, y: 0, z: 0} + rotSign: 0 +--- !u!114 &2562571719799803906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BlueRayPerceptionSensor + m_DetectableTags: + - ball + - purpleGoal + - wall + - blueAgent + - purpleAgent + m_RaysPerDirection: 5 + m_MaxRayDegrees: 60 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 3 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 0.5 +--- !u!114 &1018414316889932458 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &493348456414434994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360301818957399454} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &9012161277676694912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5380420931288637108} + - component: {fileID: 9218808494928946219} + - component: {fileID: 751017937587398034} + - component: {fileID: 5544574640864840267} + m_Layer: 0 + m_Name: BlueGoalBlocker + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5380420931288637108 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9012161277676694912} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1551, y: 155, z: 0} + m_LocalScale: {x: 100, y: 395.9755, z: 791.466} + m_Children: [] + m_Father: {fileID: 1590368733} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9218808494928946219 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9012161277676694912} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &751017937587398034 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9012161277676694912} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &5544574640864840267 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9012161277676694912} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/StrikersVsGoalieField.prefab.meta b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/StrikersVsGoalieField.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..a0fa9ef262b93a8f95ef0a5220451a1d5610f427 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/StrikersVsGoalieField.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af2d6f407dd7545c49a1a9d621b156b0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scenes.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..0ecc572085794f6e351ab9136b6f5b91a7ae1b2c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 66dd36427ee6845b2999b59bfc15d9d6 +folderAsset: yes +timeCreated: 1516151204 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity new file mode 100644 index 0000000000000000000000000000000000000000..121c15111a48c4b5a0371d5b9b0732ccffe86f79 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity @@ -0,0 +1,992 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 186120fb7839f584d9fdcd5794edbc78, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971454, g: 0.49977928, b: 0.5756385, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_LightingSettings: {fileID: 1909893171} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &296100289 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &478056696 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (4) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -51 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!1001 &774084574 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: PlayerCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: -0.25081208, y: 0.2871387, z: -0.07810445, w: -0.92116475} + m_LocalPosition: {x: 25.6, y: 24.6, z: -34.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 27.2 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1031665005 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (7) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -76 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!1001 &1177695920 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (1) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -76 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!1001 &1325062279 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (3) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -26 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!1001 &1348885204 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 40 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236051} + - component: {fileID: 1574236050} + m_Layer: 0 + m_Name: SoccerSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!114 &1574236051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4c32d32dfa994d14a009cc1f393c634, type: 3} + m_Name: + m_EditorClassIdentifier: + purpleMaterial: {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + blueMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + randomizePlayersTeamForTraining: 0 + agentRunSpeed: 2 +--- !u!1001 &1606160104 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (5) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -26 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!1001 &1748755984 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (6) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -101 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} +--- !u!850595691 &1909893171 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 6 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 0 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 + m_NumRaysToShootPerTexel: -1 + m_RespectSceneVisibilityWhenBakingGI: 0 +--- !u!1001 &2043067438 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_Name + value: SoccerFieldTwos (2) + objectReference: {fileID: 0} + - target: {fileID: 1141134673700168, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalPosition.z + value: -51 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..02e34269d26a27cc71bc0a749dce16ef6dc0d7f2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8055e5dfa04643559678426a82225c1 +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scenes/StrikersVsGoalie.unity b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/StrikersVsGoalie.unity new file mode 100644 index 0000000000000000000000000000000000000000..e971efa21483ecbc24c878873292798468f5d9b0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/StrikersVsGoalie.unity @@ -0,0 +1,920 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 186120fb7839f584d9fdcd5794edbc78, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &71023448 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (2) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -51 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1001 &107654378 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (1) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -76 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &280273653 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1001 &296100289 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: PlayerCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: -0.25081208, y: 0.2871387, z: -0.07810445, w: -0.92116475} + m_LocalPosition: {x: 25.6, y: 24.6, z: -34.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 27.2 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1015394457 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (7) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -76 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1001 &1107676072 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (6) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -101 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1001 &1210335852 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (5) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -26 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1001 &1324100043 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (3) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -26 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1001 &1348885204 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 40 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &1551399647 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1141134673700168, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_Name + value: StrikersVsGoalieField (4) + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalPosition.z + value: -51 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558743310993102, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: af2d6f407dd7545c49a1a9d621b156b0, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236051} + - component: {fileID: 1574236050} + m_Layer: 0 + m_Name: SoccerSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!114 &1574236051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4c32d32dfa994d14a009cc1f393c634, type: 3} + m_Name: + m_EditorClassIdentifier: + purpleMaterial: {fileID: 2100000, guid: b0da1813c36914e678ba57f2790424e1, type: 2} + blueMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + randomizePlayersTeamForTraining: 0 + agentRunSpeed: 2 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scenes/StrikersVsGoalie.unity.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/StrikersVsGoalie.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..f725eb59d64e3f050ff78eed03e834f15bf2ab15 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scenes/StrikersVsGoalie.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b4d2e53a4f424f99abdf2c214a50435 +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..b271204251877219858d7fd116c95d05baacfec3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0da19e1f5dcc74169af7da8e2c587099 +folderAsset: yes +timeCreated: 1511490662 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs new file mode 100644 index 0000000000000000000000000000000000000000..163826ae9fee32f5d44a10175cf98aab1f560fd9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs @@ -0,0 +1,217 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; + +public enum Team +{ + Blue = 0, + Purple = 1 +} + +public class AgentSoccer : Agent +{ + // Note that that the detectable tags are different for the blue and purple teams. The order is + // * ball + // * own goal + // * opposing goal + // * wall + // * own teammate + // * opposing player + + public enum Position + { + Striker, + Goalie, + Generic + } + + [HideInInspector] + public Team team; + float m_KickPower; + // The coefficient for the reward for colliding with a ball. Set using curriculum. + float m_BallTouch; + public Position position; + + const float k_Power = 2000f; + float m_Existential; + float m_LateralSpeed; + float m_ForwardSpeed; + + + [HideInInspector] + public Rigidbody agentRb; + SoccerSettings m_SoccerSettings; + BehaviorParameters m_BehaviorParameters; + public Vector3 initialPos; + public float rotSign; + + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + SoccerEnvController envController = GetComponentInParent(); + if (envController != null) + { + m_Existential = 1f / envController.MaxEnvironmentSteps; + } + else + { + m_Existential = 1f / MaxStep; + } + + m_BehaviorParameters = gameObject.GetComponent(); + if (m_BehaviorParameters.TeamId == (int)Team.Blue) + { + team = Team.Blue; + initialPos = new Vector3(transform.position.x - 5f, .5f, transform.position.z); + rotSign = 1f; + } + else + { + team = Team.Purple; + initialPos = new Vector3(transform.position.x + 5f, .5f, transform.position.z); + rotSign = -1f; + } + if (position == Position.Goalie) + { + m_LateralSpeed = 1.0f; + m_ForwardSpeed = 1.0f; + } + else if (position == Position.Striker) + { + m_LateralSpeed = 0.3f; + m_ForwardSpeed = 1.3f; + } + else + { + m_LateralSpeed = 0.3f; + m_ForwardSpeed = 1.0f; + } + m_SoccerSettings = FindObjectOfType(); + agentRb = GetComponent(); + agentRb.maxAngularVelocity = 500; + + m_ResetParams = Academy.Instance.EnvironmentParameters; + } + + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + m_KickPower = 0f; + + var forwardAxis = act[0]; + var rightAxis = act[1]; + var rotateAxis = act[2]; + + switch (forwardAxis) + { + case 1: + dirToGo = transform.forward * m_ForwardSpeed; + m_KickPower = 1f; + break; + case 2: + dirToGo = transform.forward * -m_ForwardSpeed; + break; + } + + switch (rightAxis) + { + case 1: + dirToGo = transform.right * m_LateralSpeed; + break; + case 2: + dirToGo = transform.right * -m_LateralSpeed; + break; + } + + switch (rotateAxis) + { + case 1: + rotateDir = transform.up * -1f; + break; + case 2: + rotateDir = transform.up * 1f; + break; + } + + transform.Rotate(rotateDir, Time.deltaTime * 100f); + agentRb.AddForce(dirToGo * m_SoccerSettings.agentRunSpeed, + ForceMode.VelocityChange); + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + + if (position == Position.Goalie) + { + // Existential bonus for Goalies. + AddReward(m_Existential); + } + else if (position == Position.Striker) + { + // Existential penalty for Strikers + AddReward(-m_Existential); + } + MoveAgent(actionBuffers.DiscreteActions); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + //forward + if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + //rotate + if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[2] = 1; + } + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[2] = 2; + } + //right + if (Input.GetKey(KeyCode.E)) + { + discreteActionsOut[1] = 1; + } + if (Input.GetKey(KeyCode.Q)) + { + discreteActionsOut[1] = 2; + } + } + /// + /// Used to provide a "kick" to the ball. + /// + void OnCollisionEnter(Collision c) + { + var force = k_Power * m_KickPower; + if (position == Position.Goalie) + { + force = k_Power; + } + if (c.gameObject.CompareTag("ball")) + { + AddReward(.2f * m_BallTouch); + var dir = c.contacts[0].point - transform.position; + dir = dir.normalized; + c.gameObject.GetComponent().AddForce(dir * force); + } + } + + public override void OnEpisodeBegin() + { + m_BallTouch = m_ResetParams.GetWithDefault("ball_touch", 0); + } + +} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d61849e8cf238c48fa682b0ba00f146fc4aaa418 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2a2688ef4a36349f9aa010020c32d198 +timeCreated: 1506829537 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerBallController.cs b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerBallController.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1847ba27f55291d29101c2dd3f8929d7e244c58 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerBallController.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +public class SoccerBallController : MonoBehaviour +{ + public GameObject area; + [HideInInspector] + public SoccerEnvController envController; + public string purpleGoalTag; //will be used to check if collided with purple goal + public string blueGoalTag; //will be used to check if collided with blue goal + + void Start() + { + envController = area.GetComponent(); + } + + void OnCollisionEnter(Collision col) + { + if (col.gameObject.CompareTag(purpleGoalTag)) //ball touched purple goal + { + envController.GoalTouched(Team.Blue); + } + if (col.gameObject.CompareTag(blueGoalTag)) //ball touched blue goal + { + envController.GoalTouched(Team.Purple); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerBallController.cs.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerBallController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..69d56951f693b720ec2a539cf4512fb83db2601f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerBallController.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 93558b952b37a4b0ebaca3ca6711bcc4 +timeCreated: 1513645763 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs new file mode 100644 index 0000000000000000000000000000000000000000..d76d43ef92bb8342a69472e0c182eea6473afc0f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs @@ -0,0 +1,138 @@ +using System.Collections.Generic; +using Unity.MLAgents; +using UnityEngine; + +public class SoccerEnvController : MonoBehaviour +{ + [System.Serializable] + public class PlayerInfo + { + public AgentSoccer Agent; + [HideInInspector] + public Vector3 StartingPos; + [HideInInspector] + public Quaternion StartingRot; + [HideInInspector] + public Rigidbody Rb; + } + + + /// + /// Max Academy steps before this platform resets + /// + /// + [Tooltip("Max Environment Steps")] public int MaxEnvironmentSteps = 25000; + + /// + /// The area bounds. + /// + + /// + /// We will be changing the ground material based on success/failue + /// + + public GameObject ball; + [HideInInspector] + public Rigidbody ballRb; + Vector3 m_BallStartingPos; + + //List of Agents On Platform + public List AgentsList = new List(); + + private SoccerSettings m_SoccerSettings; + + + private SimpleMultiAgentGroup m_BlueAgentGroup; + private SimpleMultiAgentGroup m_PurpleAgentGroup; + + private int m_ResetTimer; + + void Start() + { + + m_SoccerSettings = FindObjectOfType(); + // Initialize TeamManager + m_BlueAgentGroup = new SimpleMultiAgentGroup(); + m_PurpleAgentGroup = new SimpleMultiAgentGroup(); + ballRb = ball.GetComponent(); + m_BallStartingPos = new Vector3(ball.transform.position.x, ball.transform.position.y, ball.transform.position.z); + foreach (var item in AgentsList) + { + item.StartingPos = item.Agent.transform.position; + item.StartingRot = item.Agent.transform.rotation; + item.Rb = item.Agent.GetComponent(); + if (item.Agent.team == Team.Blue) + { + m_BlueAgentGroup.RegisterAgent(item.Agent); + } + else + { + m_PurpleAgentGroup.RegisterAgent(item.Agent); + } + } + ResetScene(); + } + + void FixedUpdate() + { + m_ResetTimer += 1; + if (m_ResetTimer >= MaxEnvironmentSteps && MaxEnvironmentSteps > 0) + { + m_BlueAgentGroup.GroupEpisodeInterrupted(); + m_PurpleAgentGroup.GroupEpisodeInterrupted(); + ResetScene(); + } + } + + + public void ResetBall() + { + var randomPosX = Random.Range(-2.5f, 2.5f); + var randomPosZ = Random.Range(-2.5f, 2.5f); + + ball.transform.position = m_BallStartingPos + new Vector3(randomPosX, 0f, randomPosZ); + ballRb.velocity = Vector3.zero; + ballRb.angularVelocity = Vector3.zero; + + } + + public void GoalTouched(Team scoredTeam) + { + if (scoredTeam == Team.Blue) + { + m_BlueAgentGroup.AddGroupReward(1 - (float)m_ResetTimer / MaxEnvironmentSteps); + m_PurpleAgentGroup.AddGroupReward(-1); + } + else + { + m_PurpleAgentGroup.AddGroupReward(1 - (float)m_ResetTimer / MaxEnvironmentSteps); + m_BlueAgentGroup.AddGroupReward(-1); + } + m_PurpleAgentGroup.EndGroupEpisode(); + m_BlueAgentGroup.EndGroupEpisode(); + ResetScene(); + + } + + + public void ResetScene() + { + m_ResetTimer = 0; + + //Reset Agents + foreach (var item in AgentsList) + { + var randomPosX = Random.Range(-5f, 5f); + var newStartPos = item.Agent.initialPos + new Vector3(randomPosX, 0f, 0f); + var rot = item.Agent.rotSign * Random.Range(80.0f, 100.0f); + var newRot = Quaternion.Euler(0, rot, 0); + item.Agent.transform.SetPositionAndRotation(newStartPos, newRot); + + item.Rb.velocity = Vector3.zero; + item.Rb.angularVelocity = Vector3.zero; + } + + //Reset Ball + ResetBall(); + } +} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4325c0405150eec55c4a95ca6e72e2a2550607b6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e397bc3ae78c466a8d44400f5b68e38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerSettings.cs b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..ab4ee0358d6f88511c71d73d7ddff820917502d8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerSettings.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +public class SoccerSettings : MonoBehaviour +{ + public Material purpleMaterial; + public Material blueMaterial; + public bool randomizePlayersTeamForTraining = true; + public float agentRunSpeed; +} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerSettings.cs.meta b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dc7d75acc0900d587522514201f583c6921f258d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/Scripts/SoccerSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4c32d32dfa994d14a009cc1f393c634 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels.meta b/Project/Assets/ML-Agents/Examples/Soccer/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..ba46200362df0d914d37b7d34d94f59bb084ef1b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1322978b914041748ae9def364eeef1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn new file mode 100644 index 0000000000000000000000000000000000000000..f5b77d6ec5fdf782ae6383f3682b5ec990546a41 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:754682d6c398bf4a68b55cef93e5c58cacd0d84eb7bd09a7e923aa4195d0a820 +size 2588695 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn.meta b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9e1034d40b6a2eb79565c3d35be8721353639d0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Goalie.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9c10c18f4eb745d19186a54dbe3ca2e +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx new file mode 100644 index 0000000000000000000000000000000000000000..04febc215da9f511ea7fc97f3841207766c9b4c7 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84e0850b7ca380256e48c347687fa0923d76b935444057b17e806603c22603ac +size 1763292 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx.meta b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..4fd0963b118fdf5fdfbc9fed01192268124184f6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/SoccerTwos.onnx.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 8cd4584c2f2cb4c5fb51675d364e10ec +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn new file mode 100644 index 0000000000000000000000000000000000000000..1c1d4e290a9baa7c7b0948326507763d8f688c2e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6a229b5d9e9952c73c47cb1ff6b77d0c9b923f2354be28da0f1ff83283f8e93 +size 1679383 diff --git a/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn.meta b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..d6d1589bdce21d19dc48169f28e820af95530b96 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Soccer/TFModels/Striker.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75a830685bf8e43918adc4783a2abebf +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Sorter.meta b/Project/Assets/ML-Agents/Examples/Sorter.meta new file mode 100644 index 0000000000000000000000000000000000000000..fbe3e92abdcc7e3f9977a52c1e1c58ca2ff1ac55 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5921b34611f764a849f03ecb648faaed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Meshes.meta b/Project/Assets/ML-Agents/Examples/Sorter/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..57c61037d26b60c2dc5e52540c5b7ecf0f30d399 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21f2df9a3b371479883c5f6a9c1f5314 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Meshes/ArenaWalls.fbx b/Project/Assets/ML-Agents/Examples/Sorter/Meshes/ArenaWalls.fbx new file mode 100644 index 0000000000000000000000000000000000000000..a85b5a6806ecda0c476c86f60ce0b2094a53c74d Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/Sorter/Meshes/ArenaWalls.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Meshes/ArenaWalls.fbx.meta b/Project/Assets/ML-Agents/Examples/Sorter/Meshes/ArenaWalls.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..97c1b3169ef5fae63e251992bb43251fa07cb827 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Meshes/ArenaWalls.fbx.meta @@ -0,0 +1,247 @@ +fileFormatVersion: 2 +guid: f6ecb5c7cab484e639c060714bfd6d51 +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 100002: BezierCurve + 100004: Camera + 100006: Circle + 100008: Circle Arena + 100010: Circle Arena.001 + 100012: Circle Arena.002 + 100014: Circle.001 + 100016: Circle.002 + 100018: Circle.003 + 100020: Circle.004 + 100022: Cone + 100024: Cone.002 + 100026: Cone.003 + 100028: Cone.004 + 100030: Cone.005 + 100032: Icosphere + 100034: Icosphere.001 + 100036: Icosphere.002 + 100038: Icosphere.003 + 100040: Icosphere.004 + 100042: Light + 100044: Mball + 100046: Roundcube.001 + 100048: Roundcube.002 + 100050: Roundcube.003 + 100052: SantaHat + 100054: Shield + 100056: Shield.001 + 100058: Text + 100060: Tree + 400000: //RootNode + 400002: BezierCurve + 400004: Camera + 400006: Circle + 400008: Circle Arena + 400010: Circle Arena.001 + 400012: Circle Arena.002 + 400014: Circle.001 + 400016: Circle.002 + 400018: Circle.003 + 400020: Circle.004 + 400022: Cone + 400024: Cone.002 + 400026: Cone.003 + 400028: Cone.004 + 400030: Cone.005 + 400032: Icosphere + 400034: Icosphere.001 + 400036: Icosphere.002 + 400038: Icosphere.003 + 400040: Icosphere.004 + 400042: Light + 400044: Mball + 400046: Roundcube.001 + 400048: Roundcube.002 + 400050: Roundcube.003 + 400052: SantaHat + 400054: Shield + 400056: Shield.001 + 400058: Text + 400060: Tree + 2000000: Camera + 2100000: No Name + 2100002: Red + 2100004: White + 2100006: green + 2100008: Brown + 2300000: //RootNode + 2300002: BezierCurve + 2300004: Circle + 2300006: Circle Arena + 2300008: Circle Arena.001 + 2300010: Circle Arena.002 + 2300012: Circle.001 + 2300014: Circle.002 + 2300016: Circle.003 + 2300018: Circle.004 + 2300020: Cone + 2300022: Cone.002 + 2300024: Cone.003 + 2300026: Cone.004 + 2300028: Cone.005 + 2300030: Icosphere + 2300032: Icosphere.001 + 2300034: Icosphere.002 + 2300036: Icosphere.003 + 2300038: Icosphere.004 + 2300040: Mball + 2300042: Roundcube.001 + 2300044: Roundcube.002 + 2300046: Roundcube.003 + 2300048: SantaHat + 2300050: Shield + 2300052: Shield.001 + 2300054: Text + 2300056: Tree + 3300000: //RootNode + 3300002: BezierCurve + 3300004: Circle + 3300006: Circle Arena + 3300008: Circle Arena.001 + 3300010: Circle Arena.002 + 3300012: Circle.001 + 3300014: Circle.002 + 3300016: Circle.003 + 3300018: Circle.004 + 3300020: Cone + 3300022: Cone.002 + 3300024: Cone.003 + 3300026: Cone.004 + 3300028: Cone.005 + 3300030: Icosphere + 3300032: Icosphere.001 + 3300034: Icosphere.002 + 3300036: Icosphere.003 + 3300038: Icosphere.004 + 3300040: Mball + 3300042: Roundcube.001 + 3300044: Roundcube.002 + 3300046: Roundcube.003 + 3300048: SantaHat + 3300050: Shield + 3300052: Shield.001 + 3300054: Text + 3300056: Tree + 4300000: Circle Arena.002 + 4300002: Shield + 4300004: Roundcube.001 + 4300006: Roundcube.002 + 4300008: Shield.001 + 4300010: Circle Arena + 4300012: Text + 4300014: Circle Arena.001 + 4300016: Cone + 4300018: SantaHat + 4300020: Cone.002 + 4300022: Cone.003 + 4300024: Cone.004 + 4300026: Cone.005 + 4300028: Roundcube.003 + 4300030: Icosphere + 4300032: Mball + 4300034: BezierCurve + 4300036: Circle + 4300038: Circle.001 + 4300040: Icosphere.001 + 4300042: Icosphere.002 + 4300044: Circle.002 + 4300046: Circle.003 + 4300048: Circle.004 + 4300050: Tree + 4300052: Icosphere.003 + 4300054: Icosphere.004 + 10800000: Light + 2186277476908879412: ImportLogs + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Sorter/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e894be1cc1a41c5f37697d921269a83a239f8106 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af7cee3bddc2e4ed595824b3c6d542b6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Prefabs/Area.prefab b/Project/Assets/ML-Agents/Examples/Sorter/Prefabs/Area.prefab new file mode 100644 index 0000000000000000000000000000000000000000..c98d9938524874aaab88302f8db97ade22bed442 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Prefabs/Area.prefab @@ -0,0 +1,9995 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &31687057836038398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2646892654146068209} + - component: {fileID: 6672751327738486847} + - component: {fileID: 7902296764559823448} + - component: {fileID: 514950792103181895} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2646892654146068209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31687057836038398} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 9075629665161169936} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6672751327738486847 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31687057836038398} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7902296764559823448 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31687057836038398} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &514950792103181895 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31687057836038398} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &34364932800014806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 112438459572729231} + - component: {fileID: 4175885605703806948} + - component: {fileID: 2080763188901369286} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &112438459572729231 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34364932800014806} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5878022895391349560} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4175885605703806948 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34364932800014806} + m_CullTransparentMesh: 0 +--- !u!114 &2080763188901369286 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34364932800014806} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 18 +--- !u!1 &47456479664368818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6848631691633721283} + - component: {fileID: 3272085346794204074} + - component: {fileID: 7219805671113501987} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6848631691633721283 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47456479664368818} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8473393943405425270} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3272085346794204074 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47456479664368818} + m_CullTransparentMesh: 0 +--- !u!114 &7219805671113501987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47456479664368818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 11 +--- !u!1 &200807955588513400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6459391779330909853} + - component: {fileID: 5860928154962630774} + - component: {fileID: 4722526882052633487} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6459391779330909853 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200807955588513400} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6271636768755642292} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5860928154962630774 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200807955588513400} + m_CullTransparentMesh: 0 +--- !u!114 &4722526882052633487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200807955588513400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 19 +--- !u!1 &224829777789491051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1077846829272367774} + - component: {fileID: 8101903621512419010} + m_Layer: 0 + m_Name: NumberBlock (17) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1077846829272367774 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224829777789491051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6102271382655686636} + - {fileID: 3307990522615347333} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8101903621512419010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224829777789491051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 17 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &239166776524241511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1498330929681295910} + - component: {fileID: 5618878632564560322} + - component: {fileID: 8047258521664630388} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1498330929681295910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239166776524241511} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 7308530889932738900} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &5618878632564560322 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239166776524241511} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8047258521664630388 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239166776524241511} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &242251351446176302 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5076912721610030684} + - component: {fileID: 6463353618804152181} + - component: {fileID: 6526696683289801181} + - component: {fileID: 9134375423331325855} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5076912721610030684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242251351446176302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 4430402274146093799} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6463353618804152181 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242251351446176302} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6526696683289801181 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242251351446176302} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &9134375423331325855 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242251351446176302} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &271113482633236042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9075629665161169936} + - component: {fileID: 1924898837573455433} + m_Layer: 0 + m_Name: NumberBlock (13) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &9075629665161169936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 271113482633236042} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8597169200861646320} + - {fileID: 2646892654146068209} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1924898837573455433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 271113482633236042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 13 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &384633462876665908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4121973695302927715} + - component: {fileID: 3177586974214188907} + m_Layer: 0 + m_Name: NumberBlock (6) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4121973695302927715 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 384633462876665908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6209876826950524171} + - {fileID: 2746416575761324955} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3177586974214188907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 384633462876665908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 6 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &620836697868445542 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8310157127482503465} + - component: {fileID: 4468438555562821376} + - component: {fileID: 7753035698763971463} + - component: {fileID: 2680640534194556093} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8310157127482503465 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620836697868445542} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.09, z: 0} + m_LocalScale: {x: 1.8176, y: 0.01346878, z: 1.8176} + m_Children: [] + m_Father: {fileID: 7651726882800121301} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4468438555562821376 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620836697868445542} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7753035698763971463 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620836697868445542} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d3855c73a8adc453f89d8df66068f21f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &2680640534194556093 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620836697868445542} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 1 + m_CookingOptions: 14 + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &649466952020786968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6781749369796368619} + - component: {fileID: 5591122987189664558} + - component: {fileID: 7508195486261744558} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6781749369796368619 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649466952020786968} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6450622012647895673} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5591122987189664558 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649466952020786968} + m_CullTransparentMesh: 0 +--- !u!114 &7508195486261744558 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649466952020786968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 3 +--- !u!1 &731517540085522925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1914599706528657598} + - component: {fileID: 4491685304645052754} + - component: {fileID: 1774151107074125413} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1914599706528657598 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731517540085522925} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7651003874799707047} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4491685304645052754 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731517540085522925} + m_CullTransparentMesh: 0 +--- !u!114 &1774151107074125413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731517540085522925} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 12 +--- !u!1 &835987035623007272 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8283489089476180615} + - component: {fileID: 4387279666068707660} + - component: {fileID: 6816912904614140541} + - component: {fileID: 8753328305536842861} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8283489089476180615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835987035623007272} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 623234406542496945} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4387279666068707660 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835987035623007272} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6816912904614140541 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835987035623007272} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8753328305536842861 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835987035623007272} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &852562219048216144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4705317218355787660} + - component: {fileID: 2854943867929597399} + - component: {fileID: 8782018680453708693} + - component: {fileID: 2478112234114653508} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4705317218355787660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852562219048216144} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 2774403936777591772} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2854943867929597399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852562219048216144} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8782018680453708693 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852562219048216144} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2478112234114653508 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 852562219048216144} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &949501488846461168 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1275934664471405978} + - component: {fileID: 6328231319068378249} + - component: {fileID: 873846097590088270} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1275934664471405978 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949501488846461168} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8391990716256576039} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6328231319068378249 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949501488846461168} + m_CullTransparentMesh: 0 +--- !u!114 &873846097590088270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949501488846461168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 9 +--- !u!1 &960518523084491425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6904544463179701055} + m_Layer: 0 + m_Name: Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6904544463179701055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960518523084491425} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7651726882800121301} + - {fileID: 1544099889421288287} + - {fileID: 6435615669307084425} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1050990531714411693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8404603736858500625} + - component: {fileID: 1556057159382464551} + - component: {fileID: 1606622326372820272} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8404603736858500625 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050990531714411693} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 3701046361991950640} + - {fileID: 6566386401749407746} + - {fileID: 6879454338546282227} + m_Father: {fileID: 8139711287129709405} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &1556057159382464551 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050990531714411693} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &1606622326372820272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050990531714411693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &1092239638185921323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3701046361991950640} + - component: {fileID: 7745486309897115029} + - component: {fileID: 2812627070816850187} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3701046361991950640 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092239638185921323} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8404603736858500625} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7745486309897115029 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092239638185921323} + m_CullTransparentMesh: 0 +--- !u!114 &2812627070816850187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092239638185921323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 20 +--- !u!1 &1110030289413236897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3407931137662189210} + - component: {fileID: 9005417038955145035} + - component: {fileID: 8768051463957704152} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3407931137662189210 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110030289413236897} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1801406462925028168} + - {fileID: 8527231418163084602} + - {fileID: 8161542154280979939} + m_Father: {fileID: 2774403936777591772} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &9005417038955145035 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110030289413236897} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &8768051463957704152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110030289413236897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &1480299771259556634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6457945554238810993} + - component: {fileID: 6905971714923246604} + - component: {fileID: 5764717815626084637} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6457945554238810993 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480299771259556634} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8724317947903674978} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6905971714923246604 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480299771259556634} + m_CullTransparentMesh: 0 +--- !u!114 &5764717815626084637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480299771259556634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 7 +--- !u!1 &1592049874009345902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4114357446069750597} + - component: {fileID: 3850895090535197265} + m_Layer: 0 + m_Name: NumberBlock (7) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4114357446069750597 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592049874009345902} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8724317947903674978} + - {fileID: 3905626036754331809} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3850895090535197265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592049874009345902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 7 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &1635165247554456397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8139711287129709405} + - component: {fileID: 4541406615183680399} + m_Layer: 0 + m_Name: NumberBlock (20) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8139711287129709405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635165247554456397} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8404603736858500625} + - {fileID: 1851292266998908739} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4541406615183680399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635165247554456397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 20 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &1639861677904924655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1944469725896995597} + - component: {fileID: 4711882742966269015} + - component: {fileID: 2768755459560085680} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1944469725896995597 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639861677904924655} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8589551121382223684} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4711882742966269015 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639861677904924655} + m_CullTransparentMesh: 0 +--- !u!114 &2768755459560085680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639861677904924655} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 15 +--- !u!1 &1655607098201208421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2023455210003841420} + - component: {fileID: 3044007825459704065} + - component: {fileID: 8081836091275764147} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2023455210003841420 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1655607098201208421} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8724317947903674978} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3044007825459704065 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1655607098201208421} + m_CullTransparentMesh: 0 +--- !u!114 &8081836091275764147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1655607098201208421} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 7 +--- !u!1 &1760405200013282035 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8492654193172995498} + - component: {fileID: 5291906855460943792} + - component: {fileID: 8861498913086992183} + - component: {fileID: 6933954425979566288} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8492654193172995498 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760405200013282035} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 4895934753275973170} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5291906855460943792 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760405200013282035} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8861498913086992183 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760405200013282035} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6933954425979566288 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760405200013282035} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1770748916324604549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8132831503675732380} + - component: {fileID: 3826226752933458785} + - component: {fileID: 4217924832284142805} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8132831503675732380 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1770748916324604549} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4223025323784914975} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3826226752933458785 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1770748916324604549} + m_CullTransparentMesh: 0 +--- !u!114 &4217924832284142805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1770748916324604549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 4 +--- !u!1 &1811895601447955568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2306915407515922261} + - component: {fileID: 2261397865925795984} + - component: {fileID: 1194152618796963898} + - component: {fileID: 6185820653641058519} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2306915407515922261 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811895601447955568} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 2931481940925051882} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2261397865925795984 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811895601447955568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1194152618796963898 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811895601447955568} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &6185820653641058519 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811895601447955568} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1824113897006727150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2261773915132031723} + - component: {fileID: 7499248043294897087} + - component: {fileID: 5998511511330351574} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2261773915132031723 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824113897006727150} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5598891170337492841} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7499248043294897087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824113897006727150} + m_CullTransparentMesh: 0 +--- !u!114 &5998511511330351574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824113897006727150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 1 +--- !u!1 &1881191515313858674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4613864930443689587} + - component: {fileID: 4380923537133847597} + - component: {fileID: 1050787788459580330} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4613864930443689587 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881191515313858674} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6209876826950524171} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4380923537133847597 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881191515313858674} + m_CullTransparentMesh: 0 +--- !u!114 &1050787788459580330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881191515313858674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 6 +--- !u!1 &1950618622064178275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4895934753275973170} + - component: {fileID: 8101549645559826616} + m_Layer: 0 + m_Name: NumberBlock (10) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4895934753275973170 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1950618622064178275} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3689027184894627003} + - {fileID: 8492654193172995498} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8101549645559826616 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1950618622064178275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 10 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &2016362132489756852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1866815984880553644} + - component: {fileID: 1196528262380790522} + - component: {fileID: 2433746050451454809} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1866815984880553644 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016362132489756852} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8473393943405425270} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1196528262380790522 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016362132489756852} + m_CullTransparentMesh: 0 +--- !u!114 &2433746050451454809 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016362132489756852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 11 +--- !u!1 &2017261421358494007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7296212347662998393} + - component: {fileID: 5319381429450250430} + - component: {fileID: 6938949386367584400} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7296212347662998393 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017261421358494007} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8589551121382223684} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5319381429450250430 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017261421358494007} + m_CullTransparentMesh: 0 +--- !u!114 &6938949386367584400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017261421358494007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 15 +--- !u!1 &2111898723924619051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6450622012647895673} + - component: {fileID: 5066721297782090298} + - component: {fileID: 753344243802661652} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6450622012647895673 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111898723924619051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1566194904495003031} + - {fileID: 2400589474757340803} + - {fileID: 6781749369796368619} + m_Father: {fileID: 7603132975076570815} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5066721297782090298 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111898723924619051} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &753344243802661652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111898723924619051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &2149212254509076867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8902742833074582551} + - component: {fileID: 2129046439975291983} + - component: {fileID: 7003750513155760582} + - component: {fileID: 4247196767250782736} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8902742833074582551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149212254509076867} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 6637700637752278564} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2129046439975291983 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149212254509076867} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7003750513155760582 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149212254509076867} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &4247196767250782736 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149212254509076867} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2232459023136164991 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1941197629856647380} + - component: {fileID: 6529477082093647255} + - component: {fileID: 2411424342404242555} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1941197629856647380 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2232459023136164991} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8391990716256576039} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6529477082093647255 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2232459023136164991} + m_CullTransparentMesh: 0 +--- !u!114 &2411424342404242555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2232459023136164991} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 9 +--- !u!1 &2271979493089396986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3930343828296979454} + - component: {fileID: 8135081068182789343} + - component: {fileID: 2700949521834070453} + - component: {fileID: 8754677326404946928} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3930343828296979454 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2271979493089396986} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 2999342195295083202} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8135081068182789343 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2271979493089396986} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2700949521834070453 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2271979493089396986} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8754677326404946928 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2271979493089396986} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2329742696162428668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5878022895391349560} + - component: {fileID: 2521170019001526531} + - component: {fileID: 1031914947758813188} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5878022895391349560 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329742696162428668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 8337993861992991519} + - {fileID: 112438459572729231} + - {fileID: 8002285881962118750} + m_Father: {fileID: 4430402274146093799} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &2521170019001526531 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329742696162428668} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &1031914947758813188 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329742696162428668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &2331882950750039767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6102271382655686636} + - component: {fileID: 195916585366329294} + - component: {fileID: 297837150838751248} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6102271382655686636 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2331882950750039767} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 259895945666227615} + - {fileID: 1904830116569622297} + - {fileID: 7408116466647818908} + m_Father: {fileID: 1077846829272367774} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &195916585366329294 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2331882950750039767} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &297837150838751248 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2331882950750039767} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &2340844810067769167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8933798646782069016} + - component: {fileID: 8520526422007001508} + - component: {fileID: 4108390336559883855} + - component: {fileID: 8115097439355240966} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8933798646782069016 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2340844810067769167} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 4024092909604387738} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8520526422007001508 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2340844810067769167} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4108390336559883855 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2340844810067769167} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8115097439355240966 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2340844810067769167} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2350221165175225226 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9027485746401623166} + - component: {fileID: 2645381892619482151} + - component: {fileID: 8769570034945052287} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9027485746401623166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2350221165175225226} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7651003874799707047} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2645381892619482151 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2350221165175225226} + m_CullTransparentMesh: 0 +--- !u!114 &8769570034945052287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2350221165175225226} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 12 +--- !u!1 &2362548506167010691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6435615669307084425} + m_Layer: 0 + m_Name: Tiles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6435615669307084425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2362548506167010691} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4024092909604387738} + - {fileID: 2931481940925051882} + - {fileID: 7603132975076570815} + - {fileID: 1438410883473384240} + - {fileID: 2774403936777591772} + - {fileID: 4121973695302927715} + - {fileID: 4114357446069750597} + - {fileID: 1637566148896021209} + - {fileID: 2999342195295083202} + - {fileID: 4895934753275973170} + - {fileID: 6637700637752278564} + - {fileID: 7855319785346649875} + - {fileID: 9075629665161169936} + - {fileID: 623234406542496945} + - {fileID: 7232323249043669279} + - {fileID: 6247737196500065983} + - {fileID: 1077846829272367774} + - {fileID: 4430402274146093799} + - {fileID: 1017108277742228709} + - {fileID: 8139711287129709405} + m_Father: {fileID: 6904544463179701055} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2529382577782922487 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6271636768755642292} + - component: {fileID: 6016041382977461503} + - component: {fileID: 8024399445785198167} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6271636768755642292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2529382577782922487} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 8998939338605200107} + - {fileID: 6459391779330909853} + - {fileID: 6579882896985659084} + m_Father: {fileID: 1017108277742228709} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &6016041382977461503 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2529382577782922487} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &8024399445785198167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2529382577782922487} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &2588823711244940637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1841814701822463986} + - component: {fileID: 5573117466264519204} + - component: {fileID: 3949677581134040098} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1841814701822463986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2588823711244940637} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8597169200861646320} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5573117466264519204 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2588823711244940637} + m_CullTransparentMesh: 0 +--- !u!114 &3949677581134040098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2588823711244940637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 13 +--- !u!1 &2630401041604101087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 563173820449182934} + - component: {fileID: 3927102847428058512} + - component: {fileID: 2905480587506662411} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &563173820449182934 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2630401041604101087} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3689027184894627003} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3927102847428058512 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2630401041604101087} + m_CullTransparentMesh: 0 +--- !u!114 &2905480587506662411 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2630401041604101087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 10 +--- !u!1 &2773282165286827661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3845674588875897538} + - component: {fileID: 929256164273521153} + - component: {fileID: 1866669956058476603} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3845674588875897538 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2773282165286827661} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5820190286365838606} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &929256164273521153 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2773282165286827661} + m_CullTransparentMesh: 0 +--- !u!114 &1866669956058476603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2773282165286827661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 16 +--- !u!1 &2822313727161022867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4430402274146093799} + - component: {fileID: 6030187960775138119} + m_Layer: 0 + m_Name: NumberBlock (18) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4430402274146093799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2822313727161022867} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5878022895391349560} + - {fileID: 5076912721610030684} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6030187960775138119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2822313727161022867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 18 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &2943635688147650317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3213143167121846079} + - component: {fileID: 2869667853706689581} + - component: {fileID: 7246002538952642514} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3213143167121846079 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2943635688147650317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 931207880316217093} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2869667853706689581 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2943635688147650317} + m_CullTransparentMesh: 0 +--- !u!114 &7246002538952642514 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2943635688147650317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 2 +--- !u!1 &3142019782428282610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6879454338546282227} + - component: {fileID: 6909719108858286395} + - component: {fileID: 1081482155002388719} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6879454338546282227 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3142019782428282610} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8404603736858500625} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6909719108858286395 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3142019782428282610} + m_CullTransparentMesh: 0 +--- !u!114 &1081482155002388719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3142019782428282610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 20 +--- !u!1 &3240352860277846146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3849629562030711105} + - component: {fileID: 3270814743282466211} + - component: {fileID: 2578138560994814604} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3849629562030711105 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3240352860277846146} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6209876826950524171} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3270814743282466211 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3240352860277846146} + m_CullTransparentMesh: 0 +--- !u!114 &2578138560994814604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3240352860277846146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 6 +--- !u!1 &3249004174636401855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2637774839063630852} + - component: {fileID: 870585105838972555} + - component: {fileID: 8265002056735243314} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2637774839063630852 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3249004174636401855} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8473393943405425270} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &870585105838972555 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3249004174636401855} + m_CullTransparentMesh: 0 +--- !u!114 &8265002056735243314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3249004174636401855} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 11 +--- !u!1 &3251671001023775291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4223025323784914975} + - component: {fileID: 7110845195530763699} + - component: {fileID: 3424448086108851643} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4223025323784914975 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3251671001023775291} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 8132831503675732380} + - {fileID: 3477614441962068977} + - {fileID: 3474681768955191233} + m_Father: {fileID: 1438410883473384240} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7110845195530763699 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3251671001023775291} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &3424448086108851643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3251671001023775291} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &3443720487774759248 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904830116569622297} + - component: {fileID: 7801438136283472983} + - component: {fileID: 5968459839484685878} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1904830116569622297 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3443720487774759248} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6102271382655686636} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7801438136283472983 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3443720487774759248} + m_CullTransparentMesh: 0 +--- !u!114 &5968459839484685878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3443720487774759248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 17 +--- !u!1 &3474812284240009485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3984295707303206887} + - component: {fileID: 8156052344683230015} + - component: {fileID: 8723326913961822141} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3984295707303206887 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474812284240009485} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8589551121382223684} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8156052344683230015 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474812284240009485} + m_CullTransparentMesh: 0 +--- !u!114 &8723326913961822141 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474812284240009485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 15 +--- !u!1 &3488164559652002587 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 860435287415068838} + - component: {fileID: 4149218031541603642} + - component: {fileID: 9068103484564378662} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &860435287415068838 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3488164559652002587} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 931207880316217093} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4149218031541603642 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3488164559652002587} + m_CullTransparentMesh: 0 +--- !u!114 &9068103484564378662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3488164559652002587} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 2 +--- !u!1 &3609923099988340372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7774049992652504376} + - component: {fileID: 7809923890313348080} + - component: {fileID: 4080862595928694585} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7774049992652504376 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3609923099988340372} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5598891170337492841} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7809923890313348080 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3609923099988340372} + m_CullTransparentMesh: 0 +--- !u!114 &4080862595928694585 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3609923099988340372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 1 +--- !u!1 &3798200277952854330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8002285881962118750} + - component: {fileID: 148499650289588343} + - component: {fileID: 2985676303521317114} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8002285881962118750 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3798200277952854330} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5878022895391349560} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &148499650289588343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3798200277952854330} + m_CullTransparentMesh: 0 +--- !u!114 &2985676303521317114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3798200277952854330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 18 +--- !u!1 &3906198569637144731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8473393943405425270} + - component: {fileID: 6690144420401416535} + - component: {fileID: 4836859757176882053} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8473393943405425270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3906198569637144731} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1866815984880553644} + - {fileID: 2637774839063630852} + - {fileID: 6848631691633721283} + m_Father: {fileID: 6637700637752278564} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &6690144420401416535 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3906198569637144731} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &4836859757176882053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3906198569637144731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &3932166254127757636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 931207880316217093} + - component: {fileID: 2162207996212245546} + - component: {fileID: 1601683739094154706} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &931207880316217093 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3932166254127757636} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 2587711078697196358} + - {fileID: 3213143167121846079} + - {fileID: 860435287415068838} + m_Father: {fileID: 2931481940925051882} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &2162207996212245546 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3932166254127757636} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &1601683739094154706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3932166254127757636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &3989629381558257023 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8597169200861646320} + - component: {fileID: 7261653160402859209} + - component: {fileID: 6781075873078577322} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8597169200861646320 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3989629381558257023} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 588753793355440771} + - {fileID: 5468098028856533396} + - {fileID: 1841814701822463986} + m_Father: {fileID: 9075629665161169936} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7261653160402859209 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3989629381558257023} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6781075873078577322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3989629381558257023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &4048706280150614909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2931481940925051882} + - component: {fileID: 7854509637219396240} + m_Layer: 0 + m_Name: NumberBlock (2) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2931481940925051882 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4048706280150614909} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 931207880316217093} + - {fileID: 2306915407515922261} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7854509637219396240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4048706280150614909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 2 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &4061841380297317719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6772019580251390255} + - component: {fileID: 8697805194553886169} + - component: {fileID: 6327372801943747941} + - component: {fileID: 4883256963319879097} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6772019580251390255 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4061841380297317719} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 1637566148896021209} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8697805194553886169 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4061841380297317719} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6327372801943747941 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4061841380297317719} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &4883256963319879097 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4061841380297317719} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &4134960393632346717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6637700637752278564} + - component: {fileID: 8464163355355441747} + m_Layer: 0 + m_Name: NumberBlock (11) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &6637700637752278564 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4134960393632346717} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8473393943405425270} + - {fileID: 8902742833074582551} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8464163355355441747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4134960393632346717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 11 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &4172493550392016336 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8527231418163084602} + - component: {fileID: 3002834174337518301} + - component: {fileID: 6386709656857088091} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8527231418163084602 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4172493550392016336} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3407931137662189210} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3002834174337518301 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4172493550392016336} + m_CullTransparentMesh: 0 +--- !u!114 &6386709656857088091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4172493550392016336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 5 +--- !u!1 &4175553817552833638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7871456435792406721} + - component: {fileID: 6764944046829354850} + - component: {fileID: 3544135530221679352} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7871456435792406721 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4175553817552833638} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4434611219706211575} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6764944046829354850 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4175553817552833638} + m_CullTransparentMesh: 0 +--- !u!114 &3544135530221679352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4175553817552833638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 14 +--- !u!1 &4189222466126583931 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3766386548198216830} + - component: {fileID: 7383336422905016750} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3766386548198216830 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4189222466126583931} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7308530889932738900} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &7383336422905016750 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4189222466126583931} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &4226638897328159792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2419565891543265574} + - component: {fileID: 2164526573572946174} + - component: {fileID: 6166002855034146360} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2419565891543265574 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4226638897328159792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 7603333330443657063} + - {fileID: 6885620427090472650} + - {fileID: 4417379666543528369} + m_Father: {fileID: 1637566148896021209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &2164526573572946174 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4226638897328159792} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6166002855034146360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4226638897328159792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &4253509354027416258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9130954047023599018} + - component: {fileID: 8557004193229192458} + - component: {fileID: 5571774854627152680} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9130954047023599018 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253509354027416258} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 7308530889932738900} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &8557004193229192458 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253509354027416258} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5571774854627152680 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253509354027416258} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4268990461826219605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9092656771632745952} + - component: {fileID: 7406248491818357081} + - component: {fileID: 7741460751114810953} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9092656771632745952 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4268990461826219605} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3689027184894627003} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7406248491818357081 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4268990461826219605} + m_CullTransparentMesh: 0 +--- !u!114 &7741460751114810953 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4268990461826219605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 10 +--- !u!1 &4311025307737189587 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3905626036754331809} + - component: {fileID: 2846803806867522221} + - component: {fileID: 2240862136363221071} + - component: {fileID: 2639996773910597063} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3905626036754331809 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4311025307737189587} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 4114357446069750597} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2846803806867522221 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4311025307737189587} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2240862136363221071 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4311025307737189587} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2639996773910597063 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4311025307737189587} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &4402081671218970544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8589551121382223684} + - component: {fileID: 5599358642328068925} + - component: {fileID: 7755531063908621782} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8589551121382223684 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4402081671218970544} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1944469725896995597} + - {fileID: 7296212347662998393} + - {fileID: 3984295707303206887} + m_Father: {fileID: 7232323249043669279} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5599358642328068925 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4402081671218970544} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &7755531063908621782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4402081671218970544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &4529420004079400663 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8337993861992991519} + - component: {fileID: 5231376566808368975} + - component: {fileID: 8760212412378745048} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8337993861992991519 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4529420004079400663} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5878022895391349560} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5231376566808368975 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4529420004079400663} + m_CullTransparentMesh: 0 +--- !u!114 &8760212412378745048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4529420004079400663} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 18 +--- !u!1 &4542287266047839190 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1438410883473384240} + - component: {fileID: 2490713958222099929} + m_Layer: 0 + m_Name: NumberBlock (4) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1438410883473384240 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4542287266047839190} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4223025323784914975} + - {fileID: 8692294306725074312} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2490713958222099929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4542287266047839190} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 4 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &4590906460413784674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6885620427090472650} + - component: {fileID: 8085811748022943735} + - component: {fileID: 7721430860275350308} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6885620427090472650 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4590906460413784674} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2419565891543265574} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8085811748022943735 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4590906460413784674} + m_CullTransparentMesh: 0 +--- !u!114 &7721430860275350308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4590906460413784674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 8 +--- !u!1 &4639254979826102973 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8692294306725074312} + - component: {fileID: 927490138589276833} + - component: {fileID: 199850109979722904} + - component: {fileID: 5286070942477472171} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8692294306725074312 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4639254979826102973} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 1438410883473384240} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &927490138589276833 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4639254979826102973} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &199850109979722904 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4639254979826102973} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &5286070942477472171 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4639254979826102973} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &4655123322954708760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1801406462925028168} + - component: {fileID: 3187001291146937185} + - component: {fileID: 1590718457176084723} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1801406462925028168 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4655123322954708760} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3407931137662189210} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3187001291146937185 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4655123322954708760} + m_CullTransparentMesh: 0 +--- !u!114 &1590718457176084723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4655123322954708760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 5 +--- !u!1 &4655719017148778163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3889499980932209188} + - component: {fileID: 3358539765012393953} + - component: {fileID: 6788868800514233004} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3889499980932209188 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4655719017148778163} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 7308530889932738900} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &3358539765012393953 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4655719017148778163} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6788868800514233004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4655719017148778163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4730042478364189710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6566386401749407746} + - component: {fileID: 331076948495170482} + - component: {fileID: 6686275073164317395} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6566386401749407746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4730042478364189710} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8404603736858500625} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &331076948495170482 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4730042478364189710} + m_CullTransparentMesh: 0 +--- !u!114 &6686275073164317395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4730042478364189710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 20 +--- !u!1 &4797574346551657066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7408116466647818908} + - component: {fileID: 5797754737057473793} + - component: {fileID: 4371932603454155649} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7408116466647818908 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797574346551657066} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6102271382655686636} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5797754737057473793 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797574346551657066} + m_CullTransparentMesh: 0 +--- !u!114 &4371932603454155649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797574346551657066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 17 +--- !u!1 &4812550190747614797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1851292266998908739} + - component: {fileID: 1388593807275069190} + - component: {fileID: 8841775491747173436} + - component: {fileID: 8111496727702432359} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1851292266998908739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4812550190747614797} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 8139711287129709405} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1388593807275069190 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4812550190747614797} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8841775491747173436 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4812550190747614797} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8111496727702432359 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4812550190747614797} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &5013850926273023128 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3474681768955191233} + - component: {fileID: 2402726812812811121} + - component: {fileID: 3362501539058115798} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3474681768955191233 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013850926273023128} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4223025323784914975} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2402726812812811121 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013850926273023128} + m_CullTransparentMesh: 0 +--- !u!114 &3362501539058115798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013850926273023128} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 4 +--- !u!1 &5078340970958483742 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1163626350604748966} + - component: {fileID: 2793798796505925363} + - component: {fileID: 2837311810883474941} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1163626350604748966 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5078340970958483742} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5820190286365838606} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2793798796505925363 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5078340970958483742} + m_CullTransparentMesh: 0 +--- !u!114 &2837311810883474941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5078340970958483742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 16 +--- !u!1 &5166574337827167018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3742910610903038822} + - component: {fileID: 8204355366728344486} + - component: {fileID: 8379559433960970316} + - component: {fileID: 2863733942782752027} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3742910610903038822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5166574337827167018} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 7855319785346649875} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8204355366728344486 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5166574337827167018} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8379559433960970316 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5166574337827167018} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2863733942782752027 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5166574337827167018} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &5224261395368704623 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2999342195295083202} + - component: {fileID: 1467477727100102737} + m_Layer: 0 + m_Name: NumberBlock (9) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2999342195295083202 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5224261395368704623} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8391990716256576039} + - {fileID: 3930343828296979454} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1467477727100102737 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5224261395368704623} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 9 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &5262775553591801255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8892206436914986526} + - component: {fileID: 3843989578161364198} + - component: {fileID: 7930291145552866454} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8892206436914986526 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5262775553591801255} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4434611219706211575} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3843989578161364198 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5262775553591801255} + m_CullTransparentMesh: 0 +--- !u!114 &7930291145552866454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5262775553591801255} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 14 +--- !u!1 &5375794734078240302 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 259895945666227615} + - component: {fileID: 5817578406820998099} + - component: {fileID: 3378249936419317565} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &259895945666227615 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5375794734078240302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6102271382655686636} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5817578406820998099 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5375794734078240302} + m_CullTransparentMesh: 0 +--- !u!114 &3378249936419317565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5375794734078240302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 17 +--- !u!1 &5436049902220067916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1637566148896021209} + - component: {fileID: 3984669149747276923} + m_Layer: 0 + m_Name: NumberBlock (8) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1637566148896021209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5436049902220067916} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2419565891543265574} + - {fileID: 6772019580251390255} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3984669149747276923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5436049902220067916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 8 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &5583692845026266346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6247737196500065983} + - component: {fileID: 8080542294774256021} + m_Layer: 0 + m_Name: NumberBlock (16) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &6247737196500065983 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5583692845026266346} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5820190286365838606} + - {fileID: 7801659941043758714} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8080542294774256021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5583692845026266346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 16 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &5602903747736315792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4434611219706211575} + - component: {fileID: 7104015445467764749} + - component: {fileID: 6567823844504648762} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4434611219706211575 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5602903747736315792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 8892206436914986526} + - {fileID: 7871456435792406721} + - {fileID: 6836685834491532125} + m_Father: {fileID: 623234406542496945} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7104015445467764749 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5602903747736315792} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6567823844504648762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5602903747736315792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &5652060137270646996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4656754806420253067} + - component: {fileID: 2724448742523006183} + - component: {fileID: 1322129619630378963} + - component: {fileID: 682656517616581984} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4656754806420253067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5652060137270646996} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 7603132975076570815} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2724448742523006183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5652060137270646996} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1322129619630378963 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5652060137270646996} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &682656517616581984 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5652060137270646996} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &5795057363121688066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7954005716147751816} + - component: {fileID: 3880780612488758400} + - component: {fileID: 2194296334076086574} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7954005716147751816 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5795057363121688066} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8724317947903674978} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3880780612488758400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5795057363121688066} + m_CullTransparentMesh: 0 +--- !u!114 &2194296334076086574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5795057363121688066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 7 +--- !u!1 &5898007086536868330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7651726882800121301} + - component: {fileID: 3543601087950863028} + - component: {fileID: 4723918365897890368} + - component: {fileID: 7569887372120328698} + m_Layer: 0 + m_Name: ArenaWalls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7651726882800121301 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5898007086536868330} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: 0} + m_LocalScale: {x: -22.324945, y: -22.324945, z: -22.324945} + m_Children: + - {fileID: 8310157127482503465} + m_Father: {fileID: 6904544463179701055} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3543601087950863028 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5898007086536868330} + m_Mesh: {fileID: 4300000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} +--- !u!23 &4723918365897890368 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5898007086536868330} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &7569887372120328698 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5898007086536868330} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_Mesh: {fileID: 4300000, guid: f6ecb5c7cab484e639c060714bfd6d51, type: 3} +--- !u!1 &5915614777157453323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1544099889421288287} + - component: {fileID: 1100820983183543527} + - component: {fileID: 8616498056362369282} + - component: {fileID: 4114873631448613044} + - component: {fileID: 4790879958202481676} + - component: {fileID: 4105037494144498194} + - component: {fileID: 6485739239145618473} + - component: {fileID: 7437752920072988352} + - component: {fileID: 1325755623762278263} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1544099889421288287 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7308530889932738900} + m_Father: {fileID: 6904544463179701055} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &1100820983183543527 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 4 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &8616498056362369282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 4 + NumStackedVectorObservations: 2 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 030000000300000003000000 + VectorActionSize: 030000000300000003000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: a2b17bcb0df4d448893e800c34d87c4c, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Sorter + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &4114873631448613044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 107ccb3d53379468eb5ba1b7ac443919, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + DefaultMaxNumTiles: 20 + NumberTilesList: + - {fileID: 1917831257363183701} + - {fileID: 7854509637219396240} + - {fileID: 4457336438323932748} + - {fileID: 2490713958222099929} + - {fileID: 1548965501328793436} + - {fileID: 3177586974214188907} + - {fileID: 3850895090535197265} + - {fileID: 3984669149747276923} + - {fileID: 1467477727100102737} + - {fileID: 8101549645559826616} + - {fileID: 8464163355355441747} + - {fileID: 8027616677576621234} + - {fileID: 1924898837573455433} + - {fileID: 7793338071742497978} + - {fileID: 7363271437402162186} + - {fileID: 8080542294774256021} + - {fileID: 8101903621512419010} + - {fileID: 6030187960775138119} + - {fileID: 6698342861141054359} + - {fileID: 4541406615183680399} +--- !u!65 &4790879958202481676 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4105037494144498194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &6485739239145618473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!114 &7437752920072988352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df0f8be9a37d6486498061e2cbc4cd94, type: 3} + m_Name: + m_EditorClassIdentifier: + RootBody: {fileID: 1100820983183543527} + VirtualRoot: {fileID: 5915614777157453323} + Settings: + UseModelSpaceTranslations: 0 + UseModelSpaceRotations: 0 + UseLocalSpaceTranslations: 1 + UseLocalSpaceRotations: 1 + UseModelSpaceLinearVelocity: 0 + UseLocalSpaceLinearVelocity: 1 + UseJointPositionsAndAngles: 0 + UseJointForces: 0 + sensorName: RBSensor +--- !u!114 &1325755623762278263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915614777157453323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dd8012d5925524537b27131fef517017, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: BufferSensor + m_ObservableSize: 23 + m_MaxNumObservables: 20 +--- !u!1 &6000518840957865293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7603132975076570815} + - component: {fileID: 4457336438323932748} + m_Layer: 0 + m_Name: NumberBlock (3) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7603132975076570815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6000518840957865293} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6450622012647895673} + - {fileID: 4656754806420253067} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4457336438323932748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6000518840957865293} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 3 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &6019401102783731054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7603333330443657063} + - component: {fileID: 2829113566591064559} + - component: {fileID: 7463392901086853055} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7603333330443657063 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6019401102783731054} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2419565891543265574} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2829113566591064559 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6019401102783731054} + m_CullTransparentMesh: 0 +--- !u!114 &7463392901086853055 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6019401102783731054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 8 +--- !u!1 &6409400146753174675 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4496453681798804367} + - component: {fileID: 3078928802222589710} + - component: {fileID: 4843658886990143739} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4496453681798804367 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6409400146753174675} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5598891170337492841} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3078928802222589710 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6409400146753174675} + m_CullTransparentMesh: 0 +--- !u!114 &4843658886990143739 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6409400146753174675} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 1 +--- !u!1 &6468885985133825205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 623234406542496945} + - component: {fileID: 7793338071742497978} + m_Layer: 0 + m_Name: NumberBlock (14) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &623234406542496945 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6468885985133825205} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4434611219706211575} + - {fileID: 8283489089476180615} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7793338071742497978 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6468885985133825205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 14 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &6568904533759790096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6146040411291918160} + - component: {fileID: 8252788426982923541} + - component: {fileID: 7600594177690342594} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6146040411291918160 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6568904533759790096} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7651003874799707047} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8252788426982923541 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6568904533759790096} + m_CullTransparentMesh: 0 +--- !u!114 &7600594177690342594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6568904533759790096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 12 +--- !u!1 &6610741170616433714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2746416575761324955} + - component: {fileID: 4069615240320680878} + - component: {fileID: 2079815463085284967} + - component: {fileID: 1902987169024638383} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2746416575761324955 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6610741170616433714} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 4121973695302927715} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4069615240320680878 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6610741170616433714} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2079815463085284967 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6610741170616433714} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1902987169024638383 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6610741170616433714} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6638407369547856252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3689027184894627003} + - component: {fileID: 3817767566787303269} + - component: {fileID: 5096221025577465085} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3689027184894627003 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6638407369547856252} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 8865550652190563544} + - {fileID: 9092656771632745952} + - {fileID: 563173820449182934} + m_Father: {fileID: 4895934753275973170} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &3817767566787303269 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6638407369547856252} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &5096221025577465085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6638407369547856252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &6643984220305002287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8998939338605200107} + - component: {fileID: 1544985628222549064} + - component: {fileID: 2954269342600675070} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8998939338605200107 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6643984220305002287} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6271636768755642292} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1544985628222549064 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6643984220305002287} + m_CullTransparentMesh: 0 +--- !u!114 &2954269342600675070 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6643984220305002287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 19 +--- !u!1 &6702046877080167900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2774403936777591772} + - component: {fileID: 1548965501328793436} + m_Layer: 0 + m_Name: NumberBlock (5) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2774403936777591772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6702046877080167900} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3407931137662189210} + - {fileID: 4705317218355787660} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1548965501328793436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6702046877080167900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 5 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &6917097090943007724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7231355187009547619} + - component: {fileID: 183223475461521313} + - component: {fileID: 753636640854809168} + - component: {fileID: 9117356184780520226} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7231355187009547619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6917097090943007724} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 7232323249043669279} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &183223475461521313 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6917097090943007724} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &753636640854809168 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6917097090943007724} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &9117356184780520226 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6917097090943007724} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6935908060651531239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6836685834491532125} + - component: {fileID: 2821044602368352782} + - component: {fileID: 6000710474335872428} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6836685834491532125 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6935908060651531239} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4434611219706211575} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2821044602368352782 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6935908060651531239} + m_CullTransparentMesh: 0 +--- !u!114 &6000710474335872428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6935908060651531239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 14 +--- !u!1 &6941327513144836076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6209876826950524171} + - component: {fileID: 7324178961949801842} + - component: {fileID: 5416744411871772860} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6209876826950524171 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6941327513144836076} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 3849629562030711105} + - {fileID: 4613864930443689587} + - {fileID: 4498172959873030869} + m_Father: {fileID: 4121973695302927715} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7324178961949801842 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6941327513144836076} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &5416744411871772860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6941327513144836076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &7051611756496677510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 588753793355440771} + - component: {fileID: 3071010965344031804} + - component: {fileID: 8049136575277115678} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &588753793355440771 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7051611756496677510} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8597169200861646320} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3071010965344031804 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7051611756496677510} + m_CullTransparentMesh: 0 +--- !u!114 &8049136575277115678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7051611756496677510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 13 +--- !u!1 &7124185585033096374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8724317947903674978} + - component: {fileID: 5987602825519699266} + - component: {fileID: 3337027471272411519} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8724317947903674978 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7124185585033096374} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 6457945554238810993} + - {fileID: 2023455210003841420} + - {fileID: 7954005716147751816} + m_Father: {fileID: 4114357446069750597} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5987602825519699266 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7124185585033096374} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &3337027471272411519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7124185585033096374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &7248196983885489763 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4417379666543528369} + - component: {fileID: 6070348135811379181} + - component: {fileID: 8726668907197138033} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4417379666543528369 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7248196983885489763} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2419565891543265574} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6070348135811379181 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7248196983885489763} + m_CullTransparentMesh: 0 +--- !u!114 &8726668907197138033 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7248196983885489763} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 8 +--- !u!1 &7319619398033702244 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5820190286365838606} + - component: {fileID: 5858805957825122282} + - component: {fileID: 5720809558625073828} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5820190286365838606 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7319619398033702244} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 7135324090568343850} + - {fileID: 1163626350604748966} + - {fileID: 3845674588875897538} + m_Father: {fileID: 6247737196500065983} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5858805957825122282 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7319619398033702244} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &5720809558625073828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7319619398033702244} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &7326462785521595606 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7135324090568343850} + - component: {fileID: 3182430493554525819} + - component: {fileID: 9215276582790297533} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7135324090568343850 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7326462785521595606} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5820190286365838606} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3182430493554525819 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7326462785521595606} + m_CullTransparentMesh: 0 +--- !u!114 &9215276582790297533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7326462785521595606} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 16 +--- !u!1 &7417631105719906463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5598891170337492841} + - component: {fileID: 1394876050867164380} + - component: {fileID: 7658704470142322628} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5598891170337492841 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417631105719906463} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 2261773915132031723} + - {fileID: 4496453681798804367} + - {fileID: 7774049992652504376} + m_Father: {fileID: 4024092909604387738} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &1394876050867164380 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417631105719906463} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &7658704470142322628 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417631105719906463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &7548009965402332557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8391990716256576039} + - component: {fileID: 1705173576227987288} + - component: {fileID: 971598539286662251} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8391990716256576039 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7548009965402332557} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1941197629856647380} + - {fileID: 2454011950656583968} + - {fileID: 1275934664471405978} + m_Father: {fileID: 2999342195295083202} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &1705173576227987288 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7548009965402332557} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &971598539286662251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7548009965402332557} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &7753039423555209390 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3477614441962068977} + - component: {fileID: 5726767863939317438} + - component: {fileID: 8530924656677783208} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3477614441962068977 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7753039423555209390} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4223025323784914975} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5726767863939317438 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7753039423555209390} + m_CullTransparentMesh: 0 +--- !u!114 &8530924656677783208 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7753039423555209390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 4 +--- !u!1 &7769473900686509156 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2400589474757340803} + - component: {fileID: 8099135052811757479} + - component: {fileID: 5182582472406913732} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2400589474757340803 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769473900686509156} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6450622012647895673} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8099135052811757479 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769473900686509156} + m_CullTransparentMesh: 0 +--- !u!114 &5182582472406913732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769473900686509156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 3 +--- !u!1 &7838372865359826979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3307990522615347333} + - component: {fileID: 4880880889492560723} + - component: {fileID: 8506043126769912828} + - component: {fileID: 441755719683949864} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3307990522615347333 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7838372865359826979} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 1077846829272367774} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4880880889492560723 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7838372865359826979} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8506043126769912828 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7838372865359826979} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &441755719683949864 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7838372865359826979} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7893906944205083750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7308530889932738900} + - component: {fileID: 5708976399287963692} + - component: {fileID: 3113604731228584066} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7308530889932738900 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7893906944205083750} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3766386548198216830} + - {fileID: 9130954047023599018} + - {fileID: 3889499980932209188} + - {fileID: 1406635185006696593} + - {fileID: 1498330929681295910} + m_Father: {fileID: 1544099889421288287} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5708976399287963692 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7893906944205083750} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3113604731228584066 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7893906944205083750} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8016003470436728042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6543185142840202851} + - component: {fileID: 4700296174355226646} + - component: {fileID: 718231283495345503} + - component: {fileID: 1192929110510154275} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6543185142840202851 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8016003470436728042} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 1017108277742228709} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4700296174355226646 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8016003470436728042} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &718231283495345503 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8016003470436728042} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &1192929110510154275 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8016003470436728042} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8035032420467456090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1566194904495003031} + - component: {fileID: 5608144717846030176} + - component: {fileID: 2924519048880659772} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1566194904495003031 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8035032420467456090} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6450622012647895673} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5608144717846030176 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8035032420467456090} + m_CullTransparentMesh: 0 +--- !u!114 &2924519048880659772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8035032420467456090} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 3 +--- !u!1 &8104508497524915968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1406635185006696593} + - component: {fileID: 3877876300598370614} + - component: {fileID: 3267282556783741511} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1406635185006696593 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8104508497524915968} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 7308530889932738900} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &3877876300598370614 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8104508497524915968} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3267282556783741511 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8104508497524915968} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8181552408806988516 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1017108277742228709} + - component: {fileID: 6698342861141054359} + m_Layer: 0 + m_Name: NumberBlock (19) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1017108277742228709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8181552408806988516} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6271636768755642292} + - {fileID: 6543185142840202851} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6698342861141054359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8181552408806988516} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 19 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &8356248684445145667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2454011950656583968} + - component: {fileID: 5193691103735039561} + - component: {fileID: 5643709512306073845} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2454011950656583968 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8356248684445145667} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8391990716256576039} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5193691103735039561 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8356248684445145667} + m_CullTransparentMesh: 0 +--- !u!114 &5643709512306073845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8356248684445145667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 9 +--- !u!1 &8380081885268469797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8161542154280979939} + - component: {fileID: 7625665959810915862} + - component: {fileID: 6558840692192760845} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8161542154280979939 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380081885268469797} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3407931137662189210} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7625665959810915862 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380081885268469797} + m_CullTransparentMesh: 0 +--- !u!114 &6558840692192760845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380081885268469797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 5 +--- !u!1 &8398731231054884625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2587711078697196358} + - component: {fileID: 959866589606817487} + - component: {fileID: 714438630564365494} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2587711078697196358 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8398731231054884625} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 931207880316217093} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &959866589606817487 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8398731231054884625} + m_CullTransparentMesh: 0 +--- !u!114 &714438630564365494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8398731231054884625} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 2 +--- !u!1 &8419821891822535989 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5468098028856533396} + - component: {fileID: 2512611761695028246} + - component: {fileID: 7331964230173531891} + m_Layer: 0 + m_Name: Outside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5468098028856533396 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8419821891822535989} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 174.1} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8597169200861646320} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2512611761695028246 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8419821891822535989} + m_CullTransparentMesh: 0 +--- !u!114 &7331964230173531891 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8419821891822535989} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 13 +--- !u!1 &8621061941420365843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7232323249043669279} + - component: {fileID: 7363271437402162186} + m_Layer: 0 + m_Name: NumberBlock (15) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7232323249043669279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8621061941420365843} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8589551121382223684} + - {fileID: 7231355187009547619} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7363271437402162186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8621061941420365843} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 15 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &8675532705545810972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7855319785346649875} + - component: {fileID: 8027616677576621234} + m_Layer: 0 + m_Name: NumberBlock (12) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7855319785346649875 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8675532705545810972} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7651003874799707047} + - {fileID: 3742910610903038822} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8027616677576621234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8675532705545810972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 12 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &8756670002568656594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8865550652190563544} + - component: {fileID: 7266901398335654142} + - component: {fileID: 5528458363073472772} + m_Layer: 0 + m_Name: Inside + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8865550652190563544 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8756670002568656594} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3689027184894627003} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 144.31} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7266901398335654142 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8756670002568656594} + m_CullTransparentMesh: 0 +--- !u!114 &5528458363073472772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8756670002568656594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 10 +--- !u!1 &8906528031230478265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7651003874799707047} + - component: {fileID: 7917760337745587097} + - component: {fileID: 4085390857458317884} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7651003874799707047 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8906528031230478265} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 19.52} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1914599706528657598} + - {fileID: 9027485746401623166} + - {fileID: 6146040411291918160} + m_Father: {fileID: 7855319785346649875} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -1.4103451} + m_SizeDelta: {x: 2.5, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7917760337745587097 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8906528031230478265} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &4085390857458317884 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8906528031230478265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &8950865639488179431 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4498172959873030869} + - component: {fileID: 4750671462164610088} + - component: {fileID: 656656366433743864} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4498172959873030869 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8950865639488179431} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6209876826950524171} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4750671462164610088 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8950865639488179431} + m_CullTransparentMesh: 0 +--- !u!114 &656656366433743864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8950865639488179431} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 6 +--- !u!1 &8967865955267062370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4024092909604387738} + - component: {fileID: 1917831257363183701} + m_Layer: 0 + m_Name: NumberBlock (1) + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4024092909604387738 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8967865955267062370} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5598891170337492841} + - {fileID: 8933798646782069016} + m_Father: {fileID: 6435615669307084425} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1917831257363183701 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8967865955267062370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b2e6d9493cc4a92acf7f3b8b438aa4, type: 3} + m_Name: + m_EditorClassIdentifier: + NumberValue: 1 + DefaultMaterial: {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + SuccessMaterial: {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} +--- !u!1 &8974693141721766854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7801659941043758714} + - component: {fileID: 4342599567163344105} + - component: {fileID: 2201013102309656924} + - component: {fileID: 5865936140637918494} + m_Layer: 0 + m_Name: Cube + m_TagString: tile + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7801659941043758714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8974693141721766854} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 20.5} + m_LocalScale: {x: 3.5, y: 4.2825084, z: 1.5204146} + m_Children: [] + m_Father: {fileID: 6247737196500065983} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4342599567163344105 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8974693141721766854} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2201013102309656924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8974693141721766854} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &5865936140637918494 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8974693141721766854} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &9139155673133550509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6579882896985659084} + - component: {fileID: 5340891681546866722} + - component: {fileID: 4502818075667202523} + m_Layer: 0 + m_Name: Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6579882896985659084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9139155673133550509} + m_LocalRotation: {x: 0.0000006521721, y: -0.70710677, z: -0.7071069, w: -0.0000006556511} + m_LocalPosition: {x: 0, y: 0, z: 98} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6271636768755642292} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -89.99999, y: -180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.6, y: 355.9} + m_SizeDelta: {x: 150, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5340891681546866722 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9139155673133550509} + m_CullTransparentMesh: 0 +--- !u!114 &4502818075667202523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9139155673133550509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 150 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 19 diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Prefabs/Area.prefab.meta b/Project/Assets/ML-Agents/Examples/Sorter/Prefabs/Area.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..d9a5cf11e04d244cfb047c4789cca8f4e03eb738 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Prefabs/Area.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1cf3ef0a332884c299335f3fbe8a21fc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scenes.meta b/Project/Assets/ML-Agents/Examples/Sorter/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..a887c02a9d8da2c9cdf5a73301827b6e53676d5a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c130af3da8f146a795356f021688b89 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scenes/Sorter.unity b/Project/Assets/ML-Agents/Examples/Sorter/Scenes/Sorter.unity new file mode 100644 index 0000000000000000000000000000000000000000..b00ba17053c5ceaf7a64bfcd265c4f8be095a6ab --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scenes/Sorter.unity @@ -0,0 +1,1136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &255077123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255077126} + - component: {fileID: 255077125} + - component: {fileID: 255077124} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &255077124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &255077125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &255077126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255077123} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &502449554 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 106.38621 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 38.840767 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 34.72934 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &537565437 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (7) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1001 &615577753 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (5) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1001 &654779847 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (1) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: SingleCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 30, z: -22} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 6.98 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1051801401 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (6) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1001 &1052330271 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (2) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1337238982 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (4) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236050} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: PushBlockSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 2.5 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 + reuseCollisionCallbacks: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 3 + agentRotationSpeed: 15 + spawnAreaMarginMultiplier: 0.5 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} +--- !u!1001 &1900462655 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &1980265552 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area (3) + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} +--- !u!1001 &8757788144016958866 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 960518523084491425, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_Name + value: Area + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6904544463179701055, guid: 1cf3ef0a332884c299335f3fbe8a21fc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cf3ef0a332884c299335f3fbe8a21fc, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scenes/Sorter.unity.meta b/Project/Assets/ML-Agents/Examples/Sorter/Scenes/Sorter.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..27a84ffe806742b4712f3cf29419f53289f23e9d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scenes/Sorter.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f23c5f09c95ad48768a41974a2f1523c +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scripts.meta b/Project/Assets/ML-Agents/Examples/Sorter/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..97d759dc65b5c5fb2bdacc6b3a6cfa5438c09c37 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e13230b4597f444eb241e0309a786b4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scripts/NumberTile.cs b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/NumberTile.cs new file mode 100644 index 0000000000000000000000000000000000000000..f1f80a8f4a588ac00d9a964fc216533dab34499e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/NumberTile.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +public class NumberTile : MonoBehaviour +{ + public int NumberValue; + public Material DefaultMaterial; + public Material SuccessMaterial; + + private bool m_Visited; + private MeshRenderer m_Renderer; + + public bool IsVisited + { + get { return m_Visited; } + } + + public void VisitTile() + { + m_Renderer.sharedMaterial = SuccessMaterial; + m_Visited = true; + } + + public void ResetTile() + { + if (m_Renderer is null) + { + m_Renderer = GetComponentInChildren(); + } + m_Renderer.sharedMaterial = DefaultMaterial; + m_Visited = false; + } +} diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scripts/NumberTile.cs.meta b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/NumberTile.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..99fe6f91620a96dfa7fea9b8423f31b741e77134 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/NumberTile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03b2e6d9493cc4a92acf7f3b8b438aa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scripts/SorterAgent.cs b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/SorterAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..a2cdb51612d1b55f80ae1a5da35ae0c9692b8bb8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/SorterAgent.cs @@ -0,0 +1,269 @@ +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Random = UnityEngine.Random; + + +public class SorterAgent : Agent +{ + [Range(1, 20)] + public int DefaultMaxNumTiles; + private const int k_HighestTileValue = 20; + + int m_NumberOfTilesToSpawn; + int m_MaxNumberOfTiles; + Rigidbody m_AgentRb; + + // The BufferSensorComponent is the Sensor that allows the Agent to observe + // a variable number of items (here, numbered tiles) + BufferSensorComponent m_BufferSensor; + + public List NumberTilesList = new List(); + + private List CurrentlyVisibleTilesList = new List(); + private List AlreadyTouchedList = new List(); + + private List m_UsedPositionsList = new List(); + private Vector3 m_StartingPos; + + GameObject m_Area; + EnvironmentParameters m_ResetParams; + + private int m_NextExpectedTileIndex; + + + public override void Initialize() + { + m_Area = transform.parent.gameObject; + m_MaxNumberOfTiles = k_HighestTileValue; + m_ResetParams = Academy.Instance.EnvironmentParameters; + m_BufferSensor = GetComponent(); + m_AgentRb = GetComponent(); + m_StartingPos = transform.position; + } + + public override void OnEpisodeBegin() + { + m_MaxNumberOfTiles = (int)m_ResetParams.GetWithDefault("num_tiles", DefaultMaxNumTiles); + + m_NumberOfTilesToSpawn = Random.Range(1, m_MaxNumberOfTiles + 1); + SelectTilesToShow(); + SetTilePositions(); + + transform.position = m_StartingPos; + m_AgentRb.velocity = Vector3.zero; + m_AgentRb.angularVelocity = Vector3.zero; + } + + + public override void CollectObservations(VectorSensor sensor) + { + sensor.AddObservation((transform.position.x - m_Area.transform.position.x) / 20f); + sensor.AddObservation((transform.position.z - m_Area.transform.position.z) / 20f); + + sensor.AddObservation(transform.forward.x); + sensor.AddObservation(transform.forward.z); + + foreach (var item in CurrentlyVisibleTilesList) + { + // Each observation / tile in the BufferSensor will have 22 values + // The first 20 are one hot encoding of the value of the tile + // The 21st and 22nd are the position of the tile relative to the agent + // The 23rd is a boolean : 1 if the tile was visited already and 0 otherwise + float[] listObservation = new float[k_HighestTileValue + 3]; + listObservation[item.NumberValue] = 1.0f; + var tileTransform = item.transform.GetChild(1); + listObservation[k_HighestTileValue] = (tileTransform.position.x - transform.position.x) / 20f; + listObservation[k_HighestTileValue + 1] = (tileTransform.position.z - transform.position.z) / 20f; + listObservation[k_HighestTileValue + 2] = item.IsVisited ? 1.0f : 0.0f; + // Here, the observation for the tile is added to the BufferSensor + m_BufferSensor.AppendObservation(listObservation); + + } + + } + + private void OnCollisionEnter(Collision col) + { + if (!col.gameObject.CompareTag("tile")) + { + return; + } + if (AlreadyTouchedList.Contains(col.transform)) + { + return; + } + if (col.transform.parent != CurrentlyVisibleTilesList[m_NextExpectedTileIndex].transform) + { + // The Agent Failed + AddReward(-1); + EndEpisode(); + } + else + { + // The Agent Succeeded + AddReward(1); + var tile = col.gameObject.GetComponentInParent(); + tile.VisitTile(); + m_NextExpectedTileIndex++; + + AlreadyTouchedList.Add(col.transform); + + //We got all of them. Can reset now. + if (m_NextExpectedTileIndex == m_NumberOfTilesToSpawn) + { + EndEpisode(); + } + } + } + + void SetTilePositions() + { + + m_UsedPositionsList.Clear(); + + //Disable all. We will enable the ones selected + foreach (var item in NumberTilesList) + { + item.ResetTile(); + item.gameObject.SetActive(false); + } + + + foreach (var item in CurrentlyVisibleTilesList) + { + //Select a rnd spawnAngle + bool posChosen = false; + int rndPosIndx = 0; + while (!posChosen) + { + rndPosIndx = Random.Range(0, k_HighestTileValue); + if (!m_UsedPositionsList.Contains(rndPosIndx)) + { + m_UsedPositionsList.Add(rndPosIndx); + posChosen = true; + } + } + item.transform.localRotation = Quaternion.Euler(0, rndPosIndx * (360f / k_HighestTileValue), 0); + item.gameObject.SetActive(true); + } + } + + void SelectTilesToShow() + { + + CurrentlyVisibleTilesList.Clear(); + AlreadyTouchedList.Clear(); + + int numLeft = m_NumberOfTilesToSpawn; + while (numLeft > 0) + { + int rndInt = Random.Range(0, k_HighestTileValue); + var tmp = NumberTilesList[rndInt]; + if (!CurrentlyVisibleTilesList.Contains(tmp)) + { + CurrentlyVisibleTilesList.Add(tmp); + numLeft--; + } + } + + //Sort Ascending + CurrentlyVisibleTilesList.Sort((x, y) => x.NumberValue.CompareTo(y.NumberValue)); + m_NextExpectedTileIndex = 0; + } + + + /// + /// Moves the agent according to the selected action. + /// + public void MoveAgent(ActionSegment act) + { + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + + var forwardAxis = act[0]; + var rightAxis = act[1]; + var rotateAxis = act[2]; + + switch (forwardAxis) + { + case 1: + dirToGo = transform.forward * 1f; + break; + case 2: + dirToGo = transform.forward * -1f; + break; + } + + switch (rightAxis) + { + case 1: + dirToGo = transform.right * 1f; + break; + case 2: + dirToGo = transform.right * -1f; + break; + } + + switch (rotateAxis) + { + case 1: + rotateDir = transform.up * -1f; + break; + case 2: + rotateDir = transform.up * 1f; + break; + } + + transform.Rotate(rotateDir, Time.deltaTime * 200f); + m_AgentRb.AddForce(dirToGo * 2, ForceMode.VelocityChange); + + } + + /// + /// Called every step of the engine. Here the agent takes an action. + /// + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + // Move the agent using the action. + MoveAgent(actionBuffers.DiscreteActions); + + // Penalty given each step to encourage agent to finish task quickly. + AddReward(-1f / MaxStep); + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + //forward + if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + //rotate + if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[2] = 1; + } + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[2] = 2; + } + //right + if (Input.GetKey(KeyCode.E)) + { + discreteActionsOut[1] = 1; + } + if (Input.GetKey(KeyCode.Q)) + { + discreteActionsOut[1] = 2; + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Sorter/Scripts/SorterAgent.cs.meta b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/SorterAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fbee5bb066da2a0ec0aeff38ab01a86a038b300b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/Scripts/SorterAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 107ccb3d53379468eb5ba1b7ac443919 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/TFModels.meta b/Project/Assets/ML-Agents/Examples/Sorter/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..9f659741c4f28dab56ed2ab424739d1c1fb395a8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 03d978c974e06423baa61d796282ad7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx b/Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx new file mode 100644 index 0000000000000000000000000000000000000000..c307a8fdc699377962b00e530144fc3092bab656 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c58af175941906f9050c07d69d36c31fb844e1d448931a82895beba82ccfa96 +size 506926 diff --git a/Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx.meta b/Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..71ed40ed22685ea532a134ddf64b6433ad9f8e6b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Sorter/TFModels/Sorter.onnx.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: a2b17bcb0df4d448893e800c34d87c4c +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/Project/Assets/ML-Agents/Examples/Startup.meta b/Project/Assets/ML-Agents/Examples/Startup.meta new file mode 100644 index 0000000000000000000000000000000000000000..7393e7ee5182ed3982338338794bb08c075fd101 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Startup.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5f5656214b6a4a46b061a58aa89b46c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Startup/Scripts.meta b/Project/Assets/ML-Agents/Examples/Startup/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..5b5d76f2363ca38000150b7f5023e677851b498d --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Startup/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1aa94772372e5473fb4605d445cf2a88 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Startup/Scripts/Startup.cs b/Project/Assets/ML-Agents/Examples/Startup/Scripts/Startup.cs new file mode 100644 index 0000000000000000000000000000000000000000..3eb7324f093a4903406bc77eff8d8056d66b6508 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Startup/Scripts/Startup.cs @@ -0,0 +1,58 @@ +using System; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Unity.MLAgentsExamples +{ + internal class Startup : MonoBehaviour + { + const string k_SceneVariableName = "SCENE_NAME"; + const string k_SceneCommandLineFlag = "--mlagents-scene-name"; + + void Awake() + { + var sceneName = ""; + + // Check for the CLI '--scene-name' flag. This will be used if + // no scene environment variable is found. + var args = Environment.GetCommandLineArgs(); + Console.WriteLine("Command line arguments passed: " + String.Join(" ", args)); + for (int i = 0; i < args.Length; i++) + { + if (args[i] == k_SceneCommandLineFlag && i < args.Length - 1) + { + sceneName = args[i + 1]; + } + } + + var sceneEnvironmentVariable = Environment.GetEnvironmentVariable(k_SceneVariableName); + if (!string.IsNullOrEmpty(sceneEnvironmentVariable)) + { + sceneName = sceneEnvironmentVariable; + } + + SwitchScene(sceneName); + } + + static void SwitchScene(string sceneName) + { + if (sceneName == null) + { + Console.WriteLine( + $"You didn't specify the {k_SceneVariableName} environment variable or the {k_SceneCommandLineFlag} command line argument." + ); + Application.Quit(22); + return; + } + if (SceneUtility.GetBuildIndexByScenePath(sceneName) < 0) + { + Console.WriteLine( + $"The scene {sceneName} doesn't exist within your build." + ); + Application.Quit(22); + return; + } + SceneManager.LoadSceneAsync(sceneName); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Startup/Scripts/Startup.cs.meta b/Project/Assets/ML-Agents/Examples/Startup/Scripts/Startup.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4802e90f47b68dd614177199535dc9f544354b46 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Startup/Scripts/Startup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23f416cde2a4347bebfbe2efe69d19b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Startup/Startup.unity b/Project/Assets/ML-Agents/Examples/Startup/Startup.unity new file mode 100644 index 0000000000000000000000000000000000000000..94d2b706b9583a73d1623a732619008a0372c2a6 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Startup/Startup.unity @@ -0,0 +1,155 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 8 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.3731316, g: 0.38074902, b: 0.3587254, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &520360983 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 520360985} + - component: {fileID: 520360984} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &520360984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 520360983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23f416cde2a4347bebfbe2efe69d19b8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &520360985 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 520360983} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/Startup/Startup.unity.meta b/Project/Assets/ML-Agents/Examples/Startup/Startup.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..96a7c443c7a9abac295d27288b76c203f8e98050 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Startup/Startup.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4e253b26ff06f4e22aba1d43ed181ada +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker.meta b/Project/Assets/ML-Agents/Examples/Walker.meta new file mode 100644 index 0000000000000000000000000000000000000000..5641956dc5f5a083e995f193632ee1e0e4407a30 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 61853d28911c649e5ad8710a81a99e50 +folderAsset: yes +timeCreated: 1522735580 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Demos.meta b/Project/Assets/ML-Agents/Examples/Walker/Demos.meta new file mode 100644 index 0000000000000000000000000000000000000000..8d9838403a3fdcbc15139901ec3fa329bbfd96c2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 618b2484c0fea4a9691069008604eea3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo b/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo new file mode 100644 index 0000000000000000000000000000000000000000..d9217eacd8aae3cde215f6ca24df94a30b381a79 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18be3f65b611dc588d671b099859adc5294e0d0090a64b93853d7c09526365ab +size 5918445 diff --git a/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta b/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta new file mode 100644 index 0000000000000000000000000000000000000000..571234b3583dc7404efc2a05696e83d260ca1a22 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 268593be8b3ba416d899dc4114ddb326 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: ' (Unity.MLAgents.Demonstrations.DemonstrationSummary)' + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Materials.meta b/Project/Assets/ML-Agents/Examples/Walker/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..17608f89b172fe6925c20abe64a344b8b6729c03 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92c2f286041694279ba415db1e246842 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Materials/WalkerCourt.mat b/Project/Assets/ML-Agents/Examples/Walker/Materials/WalkerCourt.mat new file mode 100644 index 0000000000000000000000000000000000000000..349f76eeb8801734df14e05dc11d602cfc0a8169 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Materials/WalkerCourt.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: WalkerCourt + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: f6f87309bf88e67439a94914e63bca6d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.65 + - _GlossyReflections: 1 + - _Metallic: 0.2 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Materials/WalkerCourt.mat.meta b/Project/Assets/ML-Agents/Examples/Walker/Materials/WalkerCourt.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..d6579f06b6d603bc2bfab087149064e3f2420b99 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Materials/WalkerCourt.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d66bdae8d2fdef84aba27de49d41be4f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Walker/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..25c96a9e311494e88e162507d160ca0bfc77dec2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 391e2ddc448a04215a64d3df35250dd1 +folderAsset: yes +timeCreated: 1522735597 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms.meta b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms.meta new file mode 100644 index 0000000000000000000000000000000000000000..ccb5ef94590eb1ce6959d318967748e655340f60 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd296ba30964e4cf086044f1a7618c0b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms/Platform.prefab b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms/Platform.prefab new file mode 100644 index 0000000000000000000000000000000000000000..f73bf89a52f64d5181e7ead6a3e631aa00d82eae --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms/Platform.prefab @@ -0,0 +1,322 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &213013859575191415 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6902102727328990095, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalScale.x + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 6902102727328990095, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalScale.y + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 6902102727328990095, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalScale.z + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 6902102727328990095, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6902265967514060089, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalScale.x + value: 25.000002 + objectReference: {fileID: 0} + - target: {fileID: 6902265967514060089, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalScale.y + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 6902265967514060089, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_LocalScale.z + value: 25.000002 + objectReference: {fileID: 0} + - target: {fileID: 6902265967514060089, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6907401236047902865, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_Layer + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6907740118844148851, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f0d7741d9e06247f6843b921a206b978, type: 3} +--- !u!4 &6718791046026642300 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6902107422946006027, guid: f0d7741d9e06247f6843b921a206b978, + type: 3} + m_PrefabInstance: {fileID: 213013859575191415} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &3599283675128273467 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 6718791046026642300} + m_Modifications: + - target: {fileID: 1380725395958068205, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3599283675615088294, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_Model + value: + objectReference: {fileID: 5022602860645237092, guid: b000e8fcd1edc454d9e6deb84abefbf9, + type: 3} + - target: {fileID: 3599283675615088294, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_DeterministicInference + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3599283675615088295, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: target + value: + objectReference: {fileID: 140846861312608762} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.953 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3925309372585159072, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4409675767907316506, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_Name + value: WalkerRagdoll + objectReference: {fileID: 0} + - target: {fileID: 5498727688956813661, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: targetToLookAt + value: + objectReference: {fileID: 140846861312608762} + - target: {fileID: 8680753921346785158, guid: dd62a2a5a838943fba3d2cbb377a75b3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: dd62a2a5a838943fba3d2cbb377a75b3, type: 3} +--- !u!1001 &3797443287568727108 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 6718791046026642300} + m_Modifications: + - target: {fileID: 3631016866778687563, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: spawnRadius + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalScale.x + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalScale.y + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalScale.z + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalPosition.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalPosition.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3840539935788495952, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + propertyPath: m_Name + value: DynamicTarget + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 46734abd0de454192b407379c6a4ab8d, type: 3} +--- !u!4 &140846861312608762 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + m_PrefabInstance: {fileID: 3797443287568727108} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms/Platform.prefab.meta b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms/Platform.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..26df59a24db84d8442336bebfb2f8fedc9aa43f5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Platforms/Platform.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 84359146bf7af47e58c229d877e801d7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll.meta b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll.meta new file mode 100644 index 0000000000000000000000000000000000000000..d7c9c73cae2c054c6296e3bb886272db00374283 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d64d77dc566364a31896e5da2ac8534b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdoll.prefab b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdoll.prefab new file mode 100644 index 0000000000000000000000000000000000000000..9067421e8a882d3c42bf3a2e7fd0e367670b16fa --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdoll.prefab @@ -0,0 +1,5613 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &26352081983623560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4534921587898838099} + - component: {fileID: 3141316799476044774} + - component: {fileID: 2078723005073870652} + m_Layer: 0 + m_Name: lower_arm_RMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4534921587898838099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 26352081983623560} + m_LocalRotation: {x: 0.00000068545336, y: 0.00000059604633, z: 0.70710665, w: 0.70710695} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.4628379, y: 0.5551653, z: 0.34892684} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3030305163938599519} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3141316799476044774 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 26352081983623560} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &2078723005073870652 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 26352081983623560} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &193478643288702202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8206384590257021136} + - component: {fileID: 3599283674701520978} + - component: {fileID: 3599283674701520977} + - component: {fileID: 3599283674701520983} + - component: {fileID: 3599283674701520976} + m_Layer: 0 + m_Name: spine + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8206384590257021136 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193478643288702202} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.22538999, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4837962911197512155} + - {fileID: 6676222471354665257} + m_Father: {fileID: 3047582133579042238} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674701520978 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193478643288702202} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283674701520977 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193478643288702202} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.36 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283674701520983 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193478643288702202} + m_ConnectedBody: {fileID: 3599283674258174704} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: -0.1, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.12538993, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 15 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674701520976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193478643288702202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &817210725458528490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3047582133579042238} + - component: {fileID: 3599283674258174704} + - component: {fileID: 3599283674258174710} + - component: {fileID: 3599283674258174711} + m_Layer: 0 + m_Name: hips + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3047582133579042238 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817210725458528490} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3014497591685903713} + - {fileID: 8206384590257021136} + - {fileID: 3323966438235503227} + - {fileID: 1471451120586602917} + m_Father: {fileID: 3925309372585159072} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674258174704 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817210725458528490} + serializedVersion: 2 + m_Mass: 15 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283674258174710 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817210725458528490} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.1 + m_Height: 0.42 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3599283674258174711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817210725458528490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &1305995760539956326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7717884938372330209} + - component: {fileID: 3599283676061639783} + - component: {fileID: 3599283676061639778} + - component: {fileID: 3599283676061639776} + - component: {fileID: 3599283676061639777} + m_Layer: 0 + m_Name: footR + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7717884938372330209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305995760539956326} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.19800001, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1201767488417953821} + m_Father: {fileID: 1141629522868234935} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283676061639783 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305995760539956326} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!65 &3599283676061639778 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305995760539956326} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.12784767, y: 0.043051004, z: 0.23002517} + m_Center: {x: 0, y: -0.00021791458, z: 0.03283316} +--- !u!153 &3599283676061639776 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305995760539956326} + m_ConnectedBody: {fileID: 3599283674109553356} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.03, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.000000044703484, y: -0.19800001, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283676061639777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305995760539956326} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!1 &1380725395958068205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8337168839679293720} + - component: {fileID: 1545403367860096924} + - component: {fileID: 8060160549474081658} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8337168839679293720 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380725395958068205} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4286477621367985349} + m_Father: {fileID: 3048361687798854720} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1545403367860096924 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380725395958068205} + m_Mesh: {fileID: 4951167959090791897, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &8060160549474081658 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380725395958068205} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1389381020185632163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7391907016122911633} + - component: {fileID: 2595806604729466167} + - component: {fileID: 1851968922290330877} + m_Layer: 0 + m_Name: symbol_tri_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7391907016122911633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389381020185632163} + m_LocalRotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + m_LocalPosition: {x: 0.07457428, y: 0.16499999, z: 0} + m_LocalScale: {x: 0.39859864, y: 0.4054339, z: 0.25} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4286477621367985349} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2595806604729466167 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389381020185632163} + m_Mesh: {fileID: -3848270202394893044, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &1851968922290330877 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389381020185632163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1955286015932948339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2402313879696252517} + - component: {fileID: 1471685206793102349} + - component: {fileID: 5498727688956813662} + - component: {fileID: 5498727688956813661} + m_Layer: 0 + m_Name: DirectionIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2402313879696252517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955286015932948339} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.829, z: 0} + m_LocalScale: {x: 2.0320811, y: 0.033901207, z: 2.0320811} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 100247765744059013} + - {fileID: 4079037785481223685} + m_Father: {fileID: 3925309372585159072} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1471685206793102349 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955286015932948339} + m_Mesh: {fileID: -4411559378608934604, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &5498727688956813662 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955286015932948339} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -2401200446781160259, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &5498727688956813661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955286015932948339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1513f8a85fedd47efba089213b7c5bde, type: 3} + m_Name: + m_EditorClassIdentifier: + updatedByAgent: 0 + transformToFollow: {fileID: 3048361687798854720} + targetToLookAt: {fileID: 0} + heightOffset: 0 +--- !u!1 &1987035959670704198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6482880911767203399} + - component: {fileID: 1506336902684422163} + - component: {fileID: 4221773571162882556} + m_Layer: 0 + m_Name: headband + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6482880911767203399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1987035959670704198} + m_LocalRotation: {x: 7.536444e-15, y: -7.5364435e-15, z: -9.361668e-37, w: 1} + m_LocalPosition: {x: -0, y: 0.06465833, z: 0} + m_LocalScale: {x: 1.0004742, y: 0.11760707, z: 1.0004745} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5916261805430962444} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1506336902684422163 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1987035959670704198} + m_Mesh: {fileID: -4411559378608934604, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &4221773571162882556 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1987035959670704198} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2105780057158348571 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1201767488417953821} + - component: {fileID: 2161965634577411017} + - component: {fileID: 1426594492933745078} + m_Layer: 0 + m_Name: footRMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1201767488417953821 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105780057158348571} + m_LocalRotation: {x: 0.5000006, y: 0.49999994, z: 0.49999955, w: 0.4999999} + m_LocalPosition: {x: -0, y: 0, z: 0.03} + m_LocalScale: {x: 0.13621072, y: 0.7, z: 0.39850593} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7717884938372330209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2161965634577411017 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105780057158348571} + m_Mesh: {fileID: 4951167959090791897, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &1426594492933745078 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105780057158348571} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2266075852806916598 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5945491972977687943} + - component: {fileID: 3761903408832644668} + - component: {fileID: 3614785406576878494} + m_Layer: 0 + m_Name: hand_LMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5945491972977687943 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2266075852806916598} + m_LocalRotation: {x: 0.000000047917233, y: 0.0000004768371, z: -0.00000041723254, + w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.50000024, y: 0.5, z: 0.50000024} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1015567049146122347} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3761903408832644668 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2266075852806916598} + m_Mesh: {fileID: -3142223689378028007, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &3614785406576878494 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2266075852806916598} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2423135808006598899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3014497591685903713} + - component: {fileID: 3537066159022138101} + - component: {fileID: 5454356883677794616} + m_Layer: 0 + m_Name: hipsMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3014497591685903713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2423135808006598899} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.0042899745, z: 0} + m_LocalScale: {x: 1.2840918, y: 0.39110318, z: 0.7331325} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3047582133579042238} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3537066159022138101 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2423135808006598899} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &5454356883677794616 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2423135808006598899} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2426506887969985661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1353751074773911094} + - component: {fileID: 7326275465166368779} + - component: {fileID: 3718370215710339734} + m_Layer: 0 + m_Name: symbol_tri + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1353751074773911094 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2426506887969985661} + m_LocalRotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + m_LocalPosition: {x: 0.07887, y: 0.00033, z: 0} + m_LocalScale: {x: 0.27411628, y: 0.27881688, z: 0.07305265} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 100247765744059013} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7326275465166368779 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2426506887969985661} + m_Mesh: {fileID: -3848270202394893044, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &3718370215710339734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2426506887969985661} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2473898423839764007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3030305163938599519} + - component: {fileID: 3599283676062257938} + - component: {fileID: 3599283676062257937} + - component: {fileID: 3599283676062257943} + - component: {fileID: 3599283676062257936} + m_Layer: 0 + m_Name: lower_arm_R + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3030305163938599519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2473898423839764007} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.32999998, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5846586345213991904} + - {fileID: 4534921587898838099} + m_Father: {fileID: 7720510888842421855} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283676062257938 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2473898423839764007} + serializedVersion: 2 + m_Mass: 3 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283676062257937 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2473898423839764007} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.3 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283676062257943 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2473898423839764007} + m_ConnectedBody: {fileID: 3599283674929991245} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: -0.16, y: 0, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.16999993, y: 0.000000029802322, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 160 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283676062257936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2473898423839764007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &2503082026446516309 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1015567049146122347} + - component: {fileID: 3599283675894408085} + - component: {fileID: 3599283675894408080} + - component: {fileID: 3599283675894408086} + - component: {fileID: 3599283675894408087} + m_Layer: 0 + m_Name: hand_L + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1015567049146122347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2503082026446516309} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.231, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5945491972977687943} + m_Father: {fileID: 3562787507205802897} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283675894408085 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2503082026446516309} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!135 &3599283675894408080 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2503082026446516309} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.08 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283675894408086 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2503082026446516309} + m_ConnectedBody: {fileID: 3599283675242808021} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.23100024, y: 0.000000029802322, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 0 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283675894408087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2503082026446516309} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &2547913224165027939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3787596097469001715} + - component: {fileID: 3599283674250582713} + - component: {fileID: 3599283674250582596} + - component: {fileID: 3599283674250582714} + - component: {fileID: 3599283674250582715} + m_Layer: 0 + m_Name: footL + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3787596097469001715 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2547913224165027939} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.19800001, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2861741835385376879} + m_Father: {fileID: 2836434478391773977} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674250582713 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2547913224165027939} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!65 &3599283674250582596 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2547913224165027939} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.12784767, y: 0.043051004, z: 0.23002517} + m_Center: {x: 0, y: -0.00021791458, z: 0.03283316} +--- !u!153 &3599283674250582714 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2547913224165027939} + m_ConnectedBody: {fileID: 3599283675641068691} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.03, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.000000044703484, y: -0.16800001, z: 0.029999971} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674250582715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2547913224165027939} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!1 &2868480922854287765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9137687307263304956} + - component: {fileID: 1046179176672311788} + - component: {fileID: 8029894510806649832} + m_Layer: 0 + m_Name: pupil_1 + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9137687307263304956 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2868480922854287765} + m_LocalRotation: {x: -0.23560317, y: 0.68208134, z: 0.34689382, w: 0.5991} + m_LocalPosition: {x: -0.09365376, y: -0.015342701, z: 0.14451645} + m_LocalScale: {x: 0.13075624, y: 0.13529499, z: 0.13529831} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5916261805430962444} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1046179176672311788 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2868480922854287765} + m_Mesh: {fileID: -3142223689378028007, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &8029894510806649832 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2868480922854287765} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &2890506791944182901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2836434478391773977} + - component: {fileID: 3599283675641068691} + - component: {fileID: 3599283675641068690} + - component: {fileID: 3599283675641068688} + - component: {fileID: 3599283675641068689} + m_Layer: 0 + m_Name: shinL + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2836434478391773977 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2890506791944182901} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.32999998, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3787596097469001715} + - {fileID: 2897208871385818095} + - {fileID: 3599283675593958222} + m_Father: {fileID: 3323966438235503227} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283675641068691 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2890506791944182901} + serializedVersion: 2 + m_Mass: 7 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283675641068690 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2890506791944182901} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.32 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283675641068688 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2890506791944182901} + m_ConnectedBody: {fileID: 3599283675835168092} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.17, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.000000044703484, y: -0.16, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283675641068689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2890506791944182901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &3271769731547794007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1471451120586602917} + - component: {fileID: 3599283675061353172} + - component: {fileID: 3599283675061353163} + - component: {fileID: 3599283675061353161} + - component: {fileID: 3599283675061353162} + m_Layer: 0 + m_Name: thighR + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1471451120586602917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3271769731547794007} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.13199802, y: -0.26399997, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1141629522868234935} + - {fileID: 1150473991794929220} + m_Father: {fileID: 3047582133579042238} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283675061353172 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3271769731547794007} + serializedVersion: 2 + m_Mass: 14 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283675061353163 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3271769731547794007} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.09 + m_Height: 0.3 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283675061353161 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3271769731547794007} + m_ConnectedBody: {fileID: 3599283674258174704} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.16, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.13199806, y: 0.23600006, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -90 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283675061353162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3271769731547794007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &3599283674123386708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283674123386699} + - component: {fileID: 3599283674123386698} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3599283674123386699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674123386708} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3599283675341015701} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &3599283674123386698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674123386708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensorR0 + m_DetectableTags: + - ground + m_RaysPerDirection: 0 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0 + m_RayLength: 1 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 577 + m_ObservationStacks: 1 + m_AlternatingRayOrder: 0 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!1 &3599283674421385446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283674421385445} + - component: {fileID: 3599283674421385435} + - component: {fileID: 3599283674421385444} + m_Layer: 0 + m_Name: Logo + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3599283674421385445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674421385446} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0.1688036} + m_LocalScale: {x: 0.031265847, y: 0.061432745, z: 0.0949885} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5197983613251831156} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &3599283674421385435 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674421385446} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3599283674421385444 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674421385446} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3825ef6e3f8624bc5934d59be09c0c92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3599283674695887336 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283674695887343} + - component: {fileID: 3599283674695887342} + m_Layer: 0 + m_Name: GameObject (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3599283674695887343 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674695887336} + m_LocalRotation: {x: 0.5, y: 0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3599283675593958222} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 90, z: 0} +--- !u!114 &3599283674695887342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283674695887336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensorL1 + m_DetectableTags: + - ground + m_RaysPerDirection: 0 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0 + m_RayLength: 1 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 577 + m_ObservationStacks: 1 + m_AlternatingRayOrder: 0 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!1 &3599283675138421011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283675138421010} + - component: {fileID: 3599283675138421009} + m_Layer: 0 + m_Name: GameObject (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3599283675138421010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283675138421011} + m_LocalRotation: {x: 0.5, y: 0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3599283675341015701} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 90, z: 0} +--- !u!114 &3599283675138421009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283675138421011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensorR1 + m_DetectableTags: + - ground + m_RaysPerDirection: 0 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0 + m_RayLength: 1 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 577 + m_ObservationStacks: 1 + m_AlternatingRayOrder: 0 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!1 &3599283675341015702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283675341015701} + m_Layer: 0 + m_Name: FootRays + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3599283675341015701 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283675341015702} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3599283674123386699} + - {fileID: 3599283675138421010} + m_Father: {fileID: 1141629522868234935} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3599283675443693652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283675443693643} + - component: {fileID: 3599283675443693642} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3599283675443693643 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283675443693652} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3599283675593958222} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &3599283675443693642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283675443693652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensorL0 + m_DetectableTags: + - ground + m_RaysPerDirection: 0 + m_MaxRayDegrees: 45 + m_SphereCastRadius: 0 + m_RayLength: 1 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 577 + m_ObservationStacks: 1 + m_AlternatingRayOrder: 0 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!1 &3599283675593958223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3599283675593958222} + m_Layer: 0 + m_Name: FootRays + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3599283675593958222 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3599283675593958223} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3599283675443693643} + - {fileID: 3599283674695887343} + m_Father: {fileID: 2836434478391773977} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3649524790373613545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2990620456796169743} + - component: {fileID: 1035057663461267414} + - component: {fileID: 8987315026087898181} + m_Layer: 0 + m_Name: upper_arm_LMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2990620456796169743 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3649524790373613545} + m_LocalRotation: {x: -0.00000035762787, y: 0.0000004172324, z: -0.7071072, w: 0.7071064} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.53514403, y: 0.63545513, z: 0.4034373} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4704212028536902927} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1035057663461267414 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3649524790373613545} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &8987315026087898181 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3649524790373613545} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3655114709527013150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5916261805430962444} + - component: {fileID: 7136529593864331847} + - component: {fileID: 8303982241394822187} + m_Layer: 0 + m_Name: headMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5916261805430962444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3655114709527013150} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1.301463, y: 1.3014631, z: 1.3014635} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6482880911767203399} + - {fileID: 1570631865252867570} + - {fileID: 9137687307263304956} + m_Father: {fileID: 8373682713359320793} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7136529593864331847 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3655114709527013150} + m_Mesh: {fileID: -3142223689378028007, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &8303982241394822187 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3655114709527013150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3753889085426028997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5163086535797586887} + - component: {fileID: 2990438179135681260} + - component: {fileID: 2167236663328824214} + m_Layer: 0 + m_Name: shinRMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5163086535797586887 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3753889085426028997} + m_LocalRotation: {x: 0.0000004768371, y: -0.000000047917197, z: 1, w: 0.00000039947417} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.39091522, y: 0.6096474, z: 0.39091474} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1141629522868234935} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2990438179135681260 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3753889085426028997} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &2167236663328824214 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3753889085426028997} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3815844587254289591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1150473991794929220} + - component: {fileID: 441932887230253672} + - component: {fileID: 2989563035749709416} + m_Layer: 0 + m_Name: thighRMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1150473991794929220 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3815844587254289591} + m_LocalRotation: {x: 0.0000004768371, y: -0.000000047917197, z: 1, w: 0.00000039947417} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.5778297, y: 0.6832142, z: 0.57782936} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1471451120586602917} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &441932887230253672 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3815844587254289591} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &2989563035749709416 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3815844587254289591} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3923862875065160405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2897208871385818095} + - component: {fileID: 140674014995900263} + - component: {fileID: 6282954611607885716} + m_Layer: 0 + m_Name: shinLMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2897208871385818095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3923862875065160405} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.3909175, y: 0.60964507, z: 0.39091715} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2836434478391773977} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &140674014995900263 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3923862875065160405} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &6282954611607885716 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3923862875065160405} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &4076039127120179345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 100247765744059013} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &100247765744059013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4076039127120179345} + m_LocalRotation: {x: -0, y: -0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -0, y: -0.055485837, z: 0.30657} + m_LocalScale: {x: 1.3184041, y: 79.02667, z: 1.3184041} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1353751074773911094} + - {fileID: 8424367303329203299} + m_Father: {fileID: 2402313879696252517} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4198786312472868670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8373682713359320793} + - component: {fileID: 3599283674160848329} + - component: {fileID: 3599283674160848340} + - component: {fileID: 3599283674160848330} + - component: {fileID: 3599283674160848331} + m_Layer: 0 + m_Name: head + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8373682713359320793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198786312472868670} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.44945985, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5916261805430962444} + m_Father: {fileID: 4837962911197512155} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674160848329 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198786312472868670} + serializedVersion: 2 + m_Mass: 6 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!135 &3599283674160848340 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198786312472868670} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.22 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283674160848330 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198786312472868670} + m_ConnectedBody: {fileID: 3599283674879403201} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: -0.28, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.16945985, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -30 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 10 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674160848331 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198786312472868670} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4373694954210234204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7149884323848800866} + - component: {fileID: 6579723195786141865} + - component: {fileID: 2125997762951003678} + m_Layer: 0 + m_Name: Symbol_Triangle_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7149884323848800866 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4373694954210234204} + m_LocalRotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + m_LocalPosition: {x: -0.066990964, y: 0.16499999, z: 0} + m_LocalScale: {x: 0.31112, y: 0.4054339, z: 0.085725} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4286477621367985349} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6579723195786141865 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4373694954210234204} + m_Mesh: {fileID: 4951167959090791897, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &2125997762951003678 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4373694954210234204} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &4375708460194622345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4704212028536902927} + - component: {fileID: 3599283675594846475} + - component: {fileID: 3599283675594846474} + - component: {fileID: 3599283675594846472} + - component: {fileID: 3599283675594846473} + m_Layer: 0 + m_Name: upper_arm_L + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4704212028536902927 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375708460194622345} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.41250005, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3562787507205802897} + - {fileID: 2990620456796169743} + m_Father: {fileID: 4837962911197512155} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283675594846475 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375708460194622345} + serializedVersion: 2 + m_Mass: 4 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283675594846474 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375708460194622345} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.33 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283675594846472 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375708460194622345} + m_ConnectedBody: {fileID: 3599283674879403201} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0.18, y: 0, z: 0} + m_Axis: {x: 0, y: -1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.23250008, y: 0.000000029802322, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 100 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283675594846473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375708460194622345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4409675767907316506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3925309372585159072} + - component: {fileID: 3599283675615088294} + - component: {fileID: 3599283675615088295} + - component: {fileID: 3599283675615088288} + - component: {fileID: 3599283675615088289} + - component: {fileID: 3599283675615088290} + m_Layer: 0 + m_Name: WalkerRagdoll + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3925309372585159072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409675767907316506} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.953, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2402313879696252517} + - {fileID: 3047582133579042238} + - {fileID: 3048361687798854720} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3599283675615088294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409675767907316506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 243 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 39 + BranchSizes: + VectorActionSize: 27000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: 5fb07379fa20b43bbab71847a399a54b, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Walker + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_DeterministicInference: 0 + m_ObservableAttributeHandling: 0 +--- !u!114 &3599283675615088295 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409675767907316506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccb0f85f0009540d7ad997952e2aed7b, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + m_TargetWalkingSpeed: 10 + randomizeWalkSpeedEachEpisode: 1 + target: {fileID: 0} + hips: {fileID: 3047582133579042238} + chest: {fileID: 4837962911197512155} + spine: {fileID: 8206384590257021136} + head: {fileID: 8373682713359320793} + thighL: {fileID: 3323966438235503227} + shinL: {fileID: 2836434478391773977} + footL: {fileID: 3787596097469001715} + thighR: {fileID: 1471451120586602917} + shinR: {fileID: 1141629522868234935} + footR: {fileID: 7717884938372330209} + armL: {fileID: 4704212028536902927} + forearmL: {fileID: 3562787507205802897} + handL: {fileID: 1015567049146122347} + armR: {fileID: 7720510888842421855} + forearmR: {fileID: 3030305163938599519} + handR: {fileID: 5846586345213991904} +--- !u!114 &3599283675615088288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409675767907316506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b29724baddfa457da6eeab446fa49ca, type: 3} + m_Name: + m_EditorClassIdentifier: + maxJointSpring: 40000 + jointDampen: 5000 + maxJointForceLimit: 20000 + bodyPartsList: [] +--- !u!114 &3599283675615088289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409675767907316506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 0 +--- !u!114 &3599283675615088290 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409675767907316506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &4677568880406971097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3323966438235503227} + - component: {fileID: 3599283675835168092} + - component: {fileID: 3599283675835168083} + - component: {fileID: 3599283675835168081} + - component: {fileID: 3599283675835168082} + m_Layer: 0 + m_Name: thighL + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3323966438235503227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677568880406971097} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.13199802, y: -0.26399997, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2836434478391773977} + - {fileID: 5438613995790840132} + m_Father: {fileID: 3047582133579042238} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283675835168092 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677568880406971097} + serializedVersion: 2 + m_Mass: 14 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283675835168083 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677568880406971097} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.09 + m_Height: 0.3 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283675835168081 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677568880406971097} + m_ConnectedBody: {fileID: 3599283674258174704} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.16, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.13199806, y: -0.10399997, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -90 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283675835168082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677568880406971097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &4764054427077336680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4286477621367985349} + m_Layer: 0 + m_Name: Arrow_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4286477621367985349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4764054427077336680} + m_LocalRotation: {x: -0, y: -0.7071066, z: 0, w: 0.70710695} + m_LocalPosition: {x: -0, y: 0.039270002, z: 0} + m_LocalScale: {x: 0.7764428, y: 0.7764428, z: 0.7764428} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7391907016122911633} + - {fileID: 7149884323848800866} + m_Father: {fileID: 8337168839679293720} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4875131236924254349 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6676222471354665257} + - component: {fileID: 7960295796855615130} + - component: {fileID: 4733833628919431242} + m_Layer: 0 + m_Name: spineMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6676222471354665257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4875131236924254349} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1.0861033, y: 0.28142798, z: 0.43021327} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8206384590257021136} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7960295796855615130 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4875131236924254349} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &4733833628919431242 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4875131236924254349} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &5124337436413354529 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1570631865252867570} + - component: {fileID: 7967440239769877825} + - component: {fileID: 2911429273168651414} + m_Layer: 0 + m_Name: pupil + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1570631865252867570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5124337436413354529} + m_LocalRotation: {x: 0.12628369, y: 0.8928699, z: 0.39987102, w: -0.16413078} + m_LocalPosition: {x: 0.11555262, y: -0.0148743065, z: 0.121865466} + m_LocalScale: {x: 0.13232353, y: 0.13278784, z: 0.1316155} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5916261805430962444} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7967440239769877825 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5124337436413354529} + m_Mesh: {fileID: -3142223689378028007, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &2911429273168651414 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5124337436413354529} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &5645938672070489566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4079037785481223685} + - component: {fileID: 6432639622960747408} + - component: {fileID: 4633113980507614157} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4079037785481223685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5645938672070489566} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -6.69339e-10, y: 0.00001508562, z: 2.387352e-10} + m_LocalScale: {x: 0.65353715, y: 0.66474384, z: 4.816799} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2402313879696252517} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6432639622960747408 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5645938672070489566} + m_Mesh: {fileID: -6882707818378007546, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &4633113980507614157 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5645938672070489566} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6400223035236922160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1141629522868234935} + - component: {fileID: 3599283674109553356} + - component: {fileID: 3599283674109553347} + - component: {fileID: 3599283674109553345} + - component: {fileID: 3599283674109553346} + m_Layer: 0 + m_Name: shinR + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1141629522868234935 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400223035236922160} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.32999998, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7717884938372330209} + - {fileID: 5163086535797586887} + - {fileID: 3599283675341015701} + m_Father: {fileID: 1471451120586602917} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674109553356 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400223035236922160} + serializedVersion: 2 + m_Mass: 7 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283674109553347 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400223035236922160} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.06 + m_Height: 0.32 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283674109553345 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400223035236922160} + m_ConnectedBody: {fileID: 3599283675061353172} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.17, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.000000044703484, y: 0.16999999, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674109553346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6400223035236922160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &6611463957036373286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2861741835385376879} + - component: {fileID: 5279276355228617389} + - component: {fileID: 7864739208038569927} + m_Layer: 0 + m_Name: footLMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2861741835385376879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6611463957036373286} + m_LocalRotation: {x: 0.5000006, y: 0.49999994, z: 0.49999955, w: 0.4999999} + m_LocalPosition: {x: -0, y: 0, z: 0.03} + m_LocalScale: {x: 0.13621072, y: 0.7, z: 0.39850593} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3787596097469001715} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5279276355228617389 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6611463957036373286} + m_Mesh: {fileID: 4951167959090791897, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &7864739208038569927 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6611463957036373286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6699294713688532889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 938807249466134831} + - component: {fileID: 1218343439052462060} + - component: {fileID: 1671493418438271597} + m_Layer: 0 + m_Name: upper_arm_RMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &938807249466134831 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6699294713688532889} + m_LocalRotation: {x: 0.00000002980232, y: -2.46566e-15, z: 0.70710665, w: 0.70710695} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.5351401, y: 0.63545066, z: 0.40343443} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7720510888842421855} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1218343439052462060 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6699294713688532889} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &1671493418438271597 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6699294713688532889} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6881884224314048485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3562787507205802897} + - component: {fileID: 3599283675242808021} + - component: {fileID: 3599283675242808020} + - component: {fileID: 3599283675242808010} + - component: {fileID: 3599283675242808011} + m_Layer: 0 + m_Name: lower_arm_L + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3562787507205802897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6881884224314048485} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.32999998, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1015567049146122347} + - {fileID: 7648249447467954936} + m_Father: {fileID: 4704212028536902927} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283675242808021 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6881884224314048485} + serializedVersion: 2 + m_Mass: 3 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283675242808020 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6881884224314048485} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.3 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283675242808010 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6881884224314048485} + m_ConnectedBody: {fileID: 3599283675594846475} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0.16, y: 0, z: 0} + m_Axis: {x: 0, y: -1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.16999993, y: 0.000000029802322, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 160 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283675242808011 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6881884224314048485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &6942980172043134913 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6137085599177729441} + - component: {fileID: 6954100639015960264} + - component: {fileID: 7815989250054079465} + m_Layer: 0 + m_Name: hand_RMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6137085599177729441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6942980172043134913} + m_LocalRotation: {x: 0.000000047917148, y: 0.0000004768371, z: -0.00000041723254, + w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.50000024, y: 0.5, z: 0.50000024} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5846586345213991904} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6954100639015960264 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6942980172043134913} + m_Mesh: {fileID: -3142223689378028007, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &7815989250054079465 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6942980172043134913} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7269206035548002701 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5846586345213991904} + - component: {fileID: 3599283674353725469} + - component: {fileID: 3599283674353725464} + - component: {fileID: 3599283674353725470} + - component: {fileID: 3599283674353725471} + m_Layer: 0 + m_Name: hand_R + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5846586345213991904 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7269206035548002701} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.231, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6137085599177729441} + m_Father: {fileID: 3030305163938599519} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674353725469 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7269206035548002701} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!135 &3599283674353725464 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7269206035548002701} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.08 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283674353725470 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7269206035548002701} + m_ConnectedBody: {fileID: 3599283676062257938} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.23100024, y: 0.000000029802322, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 0 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674353725471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7269206035548002701} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &8186187740333259570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5197983613251831156} + - component: {fileID: 7203234408691577593} + - component: {fileID: 3987061516145626734} + m_Layer: 0 + m_Name: chestsMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5197983613251831156 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8186187740333259570} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1.5095952, y: 0.49688917, z: 0.7683002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3599283674421385445} + m_Father: {fileID: 4837962911197512155} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7203234408691577593 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8186187740333259570} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &3987061516145626734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8186187740333259570} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8364447493132669112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7648249447467954936} + - component: {fileID: 3892344417026024032} + - component: {fileID: 7099469822466128457} + m_Layer: 0 + m_Name: lower_arm_LMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7648249447467954936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8364447493132669112} + m_LocalRotation: {x: -0.00000035762787, y: 0.0000004172324, z: -0.7071072, w: 0.7071064} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.4628418, y: 0.5551687, z: 0.3489295} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3562787507205802897} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3892344417026024032 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8364447493132669112} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &7099469822466128457 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8364447493132669112} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8485242011973856458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5438613995790840132} + - component: {fileID: 7376551299720275694} + - component: {fileID: 6335624044515244466} + m_Layer: 0 + m_Name: thighLMesh + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5438613995790840132 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8485242011973856458} + m_LocalRotation: {x: 0.0000004768371, y: 0.0000000116874235, z: 1, w: 0.00000039947415} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.57782984, y: 0.6832142, z: 0.5778293} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3323966438235503227} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7376551299720275694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8485242011973856458} + m_Mesh: {fileID: 1736225472013479476, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &6335624044515244466 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8485242011973856458} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8680753921346785158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3048361687798854720} + - component: {fileID: 3599283675660835128} + m_Layer: 0 + m_Name: OrientationCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3048361687798854720 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8680753921346785158} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8337168839679293720} + m_Father: {fileID: 3925309372585159072} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3599283675660835128 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8680753921346785158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 771e78c5e980e440e8cd19716b55075f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &8809585745563667422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7720510888842421855} + - component: {fileID: 3599283674929991245} + - component: {fileID: 3599283674929991244} + - component: {fileID: 3599283674929991234} + - component: {fileID: 3599283674929991235} + m_Layer: 0 + m_Name: upper_arm_R + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7720510888842421855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809585745563667422} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.41250005, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3030305163938599519} + - {fileID: 938807249466134831} + m_Father: {fileID: 4837962911197512155} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674929991245 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809585745563667422} + serializedVersion: 2 + m_Mass: 4 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283674929991244 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809585745563667422} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.08 + m_Height: 0.33 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283674929991234 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809585745563667422} + m_ConnectedBody: {fileID: 3599283674879403201} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: -0.18, y: 0, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.23250008, y: 0.000000029802322, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 100 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674929991235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809585745563667422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &8991525264902532053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4837962911197512155} + - component: {fileID: 3599283674879403201} + - component: {fileID: 3599283674879403200} + - component: {fileID: 3599283674879403206} + - component: {fileID: 3599283674879403207} + m_Layer: 0 + m_Name: chest + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4837962911197512155 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8991525264902532053} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.2656501, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5197983613251831156} + - {fileID: 8373682713359320793} + - {fileID: 4704212028536902927} + - {fileID: 7720510888842421855} + m_Father: {fileID: 8206384590257021136} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &3599283674879403201 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8991525264902532053} + serializedVersion: 2 + m_Mass: 8 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &3599283674879403200 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8991525264902532053} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.13 + m_Height: 0.45 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &3599283674879403206 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8991525264902532053} + m_ConnectedBody: {fileID: 3599283674701520978} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: -0.16, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.10565004, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 15 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &3599283674879403207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8991525264902532053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &9133557816373326028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8424367303329203299} + - component: {fileID: 861813343943249483} + - component: {fileID: 4949787791576899160} + m_Layer: 0 + m_Name: Symbol_Triangle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8424367303329203299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9133557816373326028} + m_LocalRotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + m_LocalPosition: {x: -0.03597, y: 0.00033, z: 0} + m_LocalScale: {x: 0.21395722, y: 0.34634632, z: 0.025049753} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 100247765744059013} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &861813343943249483 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9133557816373326028} + m_Mesh: {fileID: 4951167959090791897, guid: b5458355adf1a4155a0d7f0ce08a7ee9, type: 3} +--- !u!23 &4949787791576899160 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9133557816373326028} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdoll.prefab.meta b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdoll.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8c4879e35af38ece5aca6ce638b22d6bd848fea --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdoll.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dd62a2a5a838943fba3d2cbb377a75b3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdollLarge.prefab b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdollLarge.prefab new file mode 100644 index 0000000000000000000000000000000000000000..d90e28480c2b95050fa5e084e6c0e9023bdc115e --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdollLarge.prefab @@ -0,0 +1,4879 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &895268871148750013 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871148750004} + - component: {fileID: 895268871148750011} + - component: {fileID: 895268871148750009} + m_Layer: 0 + m_Name: shinLMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871148750004 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871148750013} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.3909175, y: 0.60964507, z: 0.39091715} + m_Children: [] + m_Father: {fileID: 7933235353272702556} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -180, y: 180, z: 0} +--- !u!33 &895268871148750011 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871148750013} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871148750009 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871148750013} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871264836243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871264836332} + - component: {fileID: 895268871264836335} + - component: {fileID: 895268871264836334} + - component: {fileID: 895268871264836333} + m_Layer: 0 + m_Name: hips + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871264836332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871264836243} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268873051627235} + - {fileID: 7933235353228551169} + - {fileID: 7933235353713167657} + - {fileID: 7933235354652902033} + m_Father: {fileID: 895268871377934298} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &895268871264836335 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871264836243} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.28 + m_Height: 1.3 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &895268871264836334 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871264836243} + serializedVersion: 2 + m_Mass: 15 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!114 &895268871264836333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871264836243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!1 &895268871289741235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871289741196} + - component: {fileID: 895268871289741194} + - component: {fileID: 895268871289741192} + m_Layer: 0 + m_Name: hand_RMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871289741196 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871289741235} + m_LocalRotation: {x: 0.000000047917148, y: 0.0000004768371, z: -0.00000041723254, + w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.50000024, y: 0.5, z: 0.50000024} + m_Children: [] + m_Father: {fileID: 7933235354616748502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268871289741194 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871289741235} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871289741192 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871289741235} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871377934275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871377934298} + - component: {fileID: 895268871377934297} + - component: {fileID: 7408209125961349353} + - component: {fileID: 895268871377934303} + - component: {fileID: 895268871377934302} + - component: {fileID: 895268871377934301} + m_Layer: 0 + m_Name: WalkerRagdollLarge + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871377934298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871377934275} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871264836332} + - {fileID: 6359877977706987617} + - {fileID: 5370605450757534085} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &895268871377934297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871377934275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 243 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 39 + BranchSizes: + VectorActionSize: 27000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: f598eaeeef9f94691989a2cfaaafb565, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: WalkerDynamic + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &7408209125961349353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871377934275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccb0f85f0009540d7ad997952e2aed7b, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + m_TargetWalkingSpeed: 10 + randomizeWalkSpeedEachEpisode: 1 + target: {fileID: 0} + hips: {fileID: 895268871264836332} + chest: {fileID: 7933235354845945071} + spine: {fileID: 7933235354652902033} + head: {fileID: 7933235354074184674} + thighL: {fileID: 7933235353228551169} + shinL: {fileID: 7933235353272702556} + footL: {fileID: 7933235354882597189} + thighR: {fileID: 7933235353713167657} + shinR: {fileID: 7933235353711811620} + footR: {fileID: 7933235353655703566} + armL: {fileID: 7933235353030744140} + forearmL: {fileID: 7933235353240438175} + handL: {fileID: 7933235353041637843} + armR: {fileID: 7933235355057813930} + forearmR: {fileID: 7933235353195701980} + handR: {fileID: 7933235354616748502} +--- !u!114 &895268871377934303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871377934275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b29724baddfa457da6eeab446fa49ca, type: 3} + m_Name: + m_EditorClassIdentifier: + maxJointSpring: 40000 + jointDampen: 5000 + maxJointForceLimit: 20000 + bodyPartsList: [] +--- !u!114 &895268871377934302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871377934275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 0 +--- !u!114 &895268871377934301 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871377934275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &895268871382313704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871382313705} + - component: {fileID: 895268871382313707} + - component: {fileID: 895268871382313706} + m_Layer: 0 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871382313705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871382313704} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0.5115262} + m_LocalScale: {x: 0.09474499, y: 0.18615983, z: 0.2878439} + m_Children: [] + m_Father: {fileID: 895268871492350891} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &895268871382313707 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871382313704} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871382313706 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871382313704} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3825ef6e3f8624bc5934d59be09c0c92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871410851227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871410851220} + - component: {fileID: 895268871410851218} + - component: {fileID: 895268871410851216} + m_Layer: 0 + m_Name: hand_LMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871410851220 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871410851227} + m_LocalRotation: {x: 0.000000047917233, y: 0.0000004768371, z: -0.00000041723254, + w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.50000024, y: 0.5, z: 0.50000024} + m_Children: [] + m_Father: {fileID: 7933235353041637843} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268871410851218 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871410851227} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871410851216 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871410851227} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871454340700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871454340699} + - component: {fileID: 895268871454340698} + - component: {fileID: 895268871454340696} + m_Layer: 0 + m_Name: shinRMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871454340699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871454340700} + m_LocalRotation: {x: 0.0000004768371, y: -0.00000004791719, z: 1, w: 0.0000004172325} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.39091522, y: 0.6096474, z: 0.39091474} + m_Children: [] + m_Father: {fileID: 7933235353711811620} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &895268871454340698 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871454340700} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871454340696 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871454340700} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871457413639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871457413662} + - component: {fileID: 895268871457413661} + - component: {fileID: 895268871457413635} + m_Layer: 0 + m_Name: lower_arm_RMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871457413662 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871457413639} + m_LocalRotation: {x: -0.00000068545336, y: -0.0000005960464, z: -0.70710665, w: -0.707107} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.4628379, y: 0.5551653, z: 0.34892684} + m_Children: [] + m_Father: {fileID: 7933235353195701980} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 180, y: 180, z: -90} +--- !u!33 &895268871457413661 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871457413639} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871457413635 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871457413639} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871492350890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871492350891} + - component: {fileID: 895268871492350885} + - component: {fileID: 895268871492350884} + m_Layer: 0 + m_Name: chestsMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871492350891 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871492350890} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.5095952, y: 0.49688917, z: 0.7683002} + m_Children: + - {fileID: 895268871382313705} + m_Father: {fileID: 7933235354845945071} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268871492350885 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871492350890} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871492350884 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871492350890} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871635378180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871635378179} + - component: {fileID: 895268871635378178} + - component: {fileID: 895268871635378176} + m_Layer: 0 + m_Name: thighRMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871635378179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871635378180} + m_LocalRotation: {x: 0.0000004768371, y: -0.00000004791719, z: 1, w: 0.0000004172325} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5778297, y: 0.6832142, z: 0.57782936} + m_Children: [] + m_Father: {fileID: 7933235353713167657} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &895268871635378178 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871635378180} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871635378176 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871635378180} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871754721631 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871754721622} + - component: {fileID: 895268871754721621} + - component: {fileID: 895268871754721627} + m_Layer: 0 + m_Name: upper_arm_RMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871754721622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871754721631} + m_LocalRotation: {x: -0.000000029802319, y: -0, z: -0.70710665, w: -0.707107} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5351401, y: 0.63545066, z: 0.40343443} + m_Children: [] + m_Father: {fileID: 7933235355057813930} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 180, y: 180, z: -90} +--- !u!33 &895268871754721621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871754721631} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871754721627 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871754721631} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268871818316278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268871818316279} + - component: {fileID: 895268871818316273} + - component: {fileID: 895268871818316272} + m_Layer: 0 + m_Name: spineMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268871818316279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871818316278} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0861033, y: 0.28142798, z: 0.43021327} + m_Children: [] + m_Father: {fileID: 7933235354652902033} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268871818316273 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871818316278} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268871818316272 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268871818316278} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872066370729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872066370730} + - component: {fileID: 895268872066370726} + - component: {fileID: 895268872066370725} + m_Layer: 0 + m_Name: headMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872066370730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872066370729} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.301463, y: 1.3014631, z: 1.3014635} + m_Children: + - {fileID: 895268872584957913} + - {fileID: 895268873141660552} + - {fileID: 895268872998223142} + m_Father: {fileID: 7933235354074184674} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268872066370726 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872066370729} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872066370725 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872066370729} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872117633226 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872117633227} + - component: {fileID: 895268872117633217} + - component: {fileID: 895268872117633223} + m_Layer: 0 + m_Name: footRMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872117633227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872117633226} + m_LocalRotation: {x: 0.50000054, y: 0.49999994, z: 0.49999955, w: 0.49999994} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.13621072, y: 0.7, z: 0.39850593} + m_Children: [] + m_Father: {fileID: 7933235353655703566} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268872117633217 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872117633226} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872117633223 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872117633226} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872378336991 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872378336982} + - component: {fileID: 895268872378336981} + - component: {fileID: 895268872378336987} + m_Layer: 0 + m_Name: thighLMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872378336982 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872378336991} + m_LocalRotation: {x: 0.0000004768371, y: 0.0000000116874315, z: 1, w: 0.00000041723254} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.57782984, y: 0.6832142, z: 0.5778293} + m_Children: [] + m_Father: {fileID: 7933235353228551169} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &895268872378336981 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872378336991} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872378336987 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872378336991} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872579982990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872579982991} + - component: {fileID: 895268872579982981} + - component: {fileID: 895268872579982987} + m_Layer: 0 + m_Name: footLMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872579982991 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872579982990} + m_LocalRotation: {x: 0.50000054, y: 0.49999994, z: 0.49999955, w: 0.49999994} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.13621072, y: 0.7, z: 0.39850593} + m_Children: [] + m_Father: {fileID: 7933235354882597189} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268872579982981 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872579982990} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872579982987 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872579982990} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872584957912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872584957913} + - component: {fileID: 895268872584957908} + - component: {fileID: 895268872584957914} + m_Layer: 0 + m_Name: pupil + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872584957913 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872584957912} + m_LocalRotation: {x: 0.12628368, y: 0.8928699, z: 0.39987114, w: -0.16413072} + m_LocalPosition: {x: 0.35015947, y: -0.04507366, z: 0.36928928} + m_LocalScale: {x: 0.13232353, y: 0.13278784, z: 0.1316155} + m_Children: [] + m_Father: {fileID: 895268872066370730} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268872584957908 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872584957912} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872584957914 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872584957912} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872771187495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872771187518} + - component: {fileID: 895268872771187517} + - component: {fileID: 895268872771187491} + m_Layer: 0 + m_Name: lower_arm_LMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872771187518 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872771187495} + m_LocalRotation: {x: -0.00000035762784, y: 0.00000041723246, z: -0.7071072, w: 0.70710653} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.4628418, y: 0.5551687, z: 0.3489295} + m_Children: [] + m_Father: {fileID: 7933235353240438175} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!33 &895268872771187517 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872771187495} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872771187491 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872771187495} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872975941227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872975941218} + - component: {fileID: 895268872975941217} + - component: {fileID: 895268872975941223} + m_Layer: 0 + m_Name: upper_arm_LMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872975941218 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872975941227} + m_LocalRotation: {x: -0.00000035762784, y: 0.00000041723246, z: -0.7071072, w: 0.70710653} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.53514403, y: 0.63545513, z: 0.4034373} + m_Children: [] + m_Father: {fileID: 7933235353030744140} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!33 &895268872975941217 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872975941227} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872975941223 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872975941227} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268872998223141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268872998223142} + - component: {fileID: 895268872998223137} + - component: {fileID: 895268872998223143} + m_Layer: 0 + m_Name: headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268872998223142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872998223141} + m_LocalRotation: {x: 7.536444e-15, y: -7.5364435e-15, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.19593434, z: 0} + m_LocalScale: {x: 1.0004742, y: 0.11760707, z: 1.0004745} + m_Children: [] + m_Father: {fileID: 895268872066370730} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268872998223137 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872998223141} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268872998223143 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268872998223141} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268873051627234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268873051627235} + - component: {fileID: 895268873051627261} + - component: {fileID: 895268873051627260} + m_Layer: 0 + m_Name: hipsMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268873051627235 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268873051627234} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.012999922, z: 0} + m_LocalScale: {x: 1.2840918, y: 0.39110318, z: 0.7331325} + m_Children: [] + m_Father: {fileID: 895268871264836332} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268873051627261 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268873051627234} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268873051627260 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268873051627234} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &895268873141660559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895268873141660552} + - component: {fileID: 895268873141660555} + - component: {fileID: 895268873141660553} + m_Layer: 0 + m_Name: pupil + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895268873141660552 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268873141660559} + m_LocalRotation: {x: -0.23560314, y: 0.6820814, z: 0.3468938, w: 0.59910005} + m_LocalPosition: {x: -0.2837993, y: -0.046493035, z: 0.43792865} + m_LocalScale: {x: 0.13075624, y: 0.13529499, z: 0.13529831} + m_Children: [] + m_Father: {fileID: 895268872066370730} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &895268873141660555 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268873141660559} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &895268873141660553 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895268873141660559} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4618227339832610167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4618227339832610166} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4618227339832610166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4618227339832610167} + m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: -0.1681389, z: 0.929} + m_LocalScale: {x: 1.3184041, y: 79.02667, z: 1.3184041} + m_Children: + - {fileID: 5682730830688643374} + - {fileID: 5682606515116433270} + m_Father: {fileID: 6359877977706987617} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!1 &5680681434016896358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5682606515116433270} + - component: {fileID: 5666723579510482590} + - component: {fileID: 5658415327507096690} + m_Layer: 0 + m_Name: Symbol_Triangle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5682606515116433270 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5680681434016896358} + m_LocalRotation: {x: -0.5000024, y: -0.49999765, z: 0.4999684, w: -0.5000316} + m_LocalPosition: {x: -0.109, y: 0.001, z: -0} + m_LocalScale: {x: 0.21395722, y: 0.34634632, z: 0.025049753} + m_Children: [] + m_Father: {fileID: 4618227339832610166} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90.00001, y: 0, z: 270.007} +--- !u!33 &5666723579510482590 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5680681434016896358} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5658415327507096690 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5680681434016896358} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5681282920262025322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5682730830688643374} + - component: {fileID: 5667106478821568380} + - component: {fileID: 5656907045900441068} + m_Layer: 0 + m_Name: symbol_tri + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5682730830688643374 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5681282920262025322} + m_LocalRotation: {x: -0.5000024, y: -0.49999765, z: 0.4999684, w: -0.5000316} + m_LocalPosition: {x: 0.239, y: 0.001, z: 0} + m_LocalScale: {x: 0.27411628, y: 0.27881688, z: 0.07305265} + m_Children: [] + m_Father: {fileID: 4618227339832610166} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5667106478821568380 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5681282920262025322} + m_Mesh: {fileID: 4300000, guid: 09e2da39770c24cc9a71e5dbf05a1e85, type: 3} +--- !u!23 &5656907045900441068 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5681282920262025322} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6359877977706987616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6359877977706987617} + - component: {fileID: 6359877977706987551} + - component: {fileID: 6359877977706987550} + - component: {fileID: 693499830} + m_Layer: 0 + m_Name: DirectionIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6359877977706987617 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6359877977706987616} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -2.564, z: 0} + m_LocalScale: {x: 2.0320811, y: 0.033901207, z: 2.0320811} + m_Children: + - {fileID: 4618227339832610166} + - {fileID: 7050246302861333602} + m_Father: {fileID: 895268871377934298} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6359877977706987551 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6359877977706987616} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6359877977706987550 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6359877977706987616} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ecd59def9213741058b969f699d10e8e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &693499830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6359877977706987616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1513f8a85fedd47efba089213b7c5bde, type: 3} + m_Name: + m_EditorClassIdentifier: + updatedByAgent: 0 + transformToFollow: {fileID: 895268871264836332} + targetToLookAt: {fileID: 0} + heightOffset: 0 +--- !u!1 &7051518369535447352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7050246302861333602} + - component: {fileID: 7038679947959539916} + - component: {fileID: 7029004222177340658} + m_Layer: 0 + m_Name: symbol_circle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7050246302861333602 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7051518369535447352} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0000000020283, y: 0.000045714, z: 7.2344e-10} + m_LocalScale: {x: 0.65353715, y: 0.66474384, z: 4.816799} + m_Children: [] + m_Father: {fileID: 6359877977706987617} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &7038679947959539916 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7051518369535447352} + m_Mesh: {fileID: 4300000, guid: 809601725d53c41fb9c7a75071bfbf51, type: 3} +--- !u!23 &7029004222177340658 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7051518369535447352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7933235353030744116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353030744140} + - component: {fileID: 7933235353030744119} + - component: {fileID: 7933235353030744139} + - component: {fileID: 7933235353030744136} + - component: {fileID: 7933235353030744117} + m_Layer: 0 + m_Name: upper_arm_L + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353030744140 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353030744116} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.2500001, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268872975941218} + - {fileID: 7933235353240438175} + m_Father: {fileID: 7933235354845945071} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!54 &7933235353030744119 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353030744116} + serializedVersion: 2 + m_Mass: 4 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353030744139 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353030744116} + m_ConnectedBody: {fileID: 7933235354845945046} + m_Anchor: {x: 0.55, y: 0, z: 0} + m_Axis: {x: 0, y: -1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.7000001, y: 0.00000011920929, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 100 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353030744136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353030744116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353030744117 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353030744116} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 1 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353041637840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353041637843} + - component: {fileID: 7933235353041637846} + - component: {fileID: 7933235353041637847} + - component: {fileID: 7933235353041637844} + - component: {fileID: 7933235353041637845} + m_Layer: 0 + m_Name: hand_L + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353041637843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353041637840} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871410851220} + m_Father: {fileID: 7933235353240438175} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235353041637846 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353041637840} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353041637847 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353041637840} + m_ConnectedBody: {fileID: 7933235353240438150} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.70000017, y: 0.00000011920929, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 0 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353041637844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353041637840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!135 &7933235353041637845 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353041637840} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.25000012 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353195701956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353195701980} + - component: {fileID: 7933235353195701959} + - component: {fileID: 7933235353195701979} + - component: {fileID: 7933235353195701976} + - component: {fileID: 7933235353195701957} + m_Layer: 0 + m_Name: lower_arm_R + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353195701980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353195701956} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871457413662} + - {fileID: 7933235354616748502} + m_Father: {fileID: 7933235355057813930} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235353195701959 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353195701956} + serializedVersion: 2 + m_Mass: 3 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353195701979 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353195701956} + m_ConnectedBody: {fileID: 7933235355057813909} + m_Anchor: {x: -0.5, y: 0, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.5, y: 0.00000011920929, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 160 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353195701976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353195701956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353195701957 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353195701956} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 1 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353228551177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353228551169} + - component: {fileID: 7933235353228551176} + - component: {fileID: 7933235353228551180} + - component: {fileID: 7933235353228551181} + - component: {fileID: 7933235353228551178} + m_Layer: 0 + m_Name: thighL + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353228551169 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353228551177} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.39999396, y: -0.79999995, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268872378336982} + - {fileID: 7933235353272702556} + m_Father: {fileID: 895268871264836332} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!54 &7933235353228551176 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353228551177} + serializedVersion: 2 + m_Mass: 14 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353228551180 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353228551177} + m_ConnectedBody: {fileID: 895268871264836334} + m_Anchor: {x: 0, y: 0.5, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.39999396, y: -0.29999995, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -90 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353228551181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353228551177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353228551178 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353228551177} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 0.9 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353240438151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353240438175} + - component: {fileID: 7933235353240438150} + - component: {fileID: 7933235353240438170} + - component: {fileID: 7933235353240438171} + - component: {fileID: 7933235353240438144} + m_Layer: 0 + m_Name: lower_arm_L + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353240438175 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353240438151} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268872771187518} + - {fileID: 7933235353041637843} + m_Father: {fileID: 7933235353030744140} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!54 &7933235353240438150 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353240438151} + serializedVersion: 2 + m_Mass: 3 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353240438170 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353240438151} + m_ConnectedBody: {fileID: 7933235353030744119} + m_Anchor: {x: 0.5, y: 0, z: 0} + m_Axis: {x: 0, y: -1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.5, y: 0.00000011920929, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 160 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353240438171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353240438151} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353240438144 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353240438151} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 1 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353272702532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353272702556} + - component: {fileID: 7933235353272702535} + - component: {fileID: 7933235353272702555} + - component: {fileID: 7933235353272702552} + - component: {fileID: 7933235353272702533} + m_Layer: 0 + m_Name: shinL + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353272702556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353272702532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871148750004} + - {fileID: 7933235354882597189} + m_Father: {fileID: 7933235353228551169} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!54 &7933235353272702535 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353272702532} + serializedVersion: 2 + m_Mass: 7 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353272702555 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353272702532} + m_ConnectedBody: {fileID: 7933235353228551176} + m_Anchor: {x: 0, y: 0.5, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: -0.5, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353272702552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353272702532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353272702533 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353272702532} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353655703567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353655703566} + - component: {fileID: 7933235353655703557} + - component: {fileID: 7933235353655703554} + - component: {fileID: 7933235353655703555} + - component: {fileID: 7933235353655703553} + m_Layer: 0 + m_Name: footR + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353655703566 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353655703567} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.6, z: 0.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268872117633227} + m_Father: {fileID: 7933235353711811620} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235353655703557 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353655703567} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353655703554 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353655703567} + m_ConnectedBody: {fileID: 7933235353711811631} + m_Anchor: {x: 0, y: 0, z: -0.1} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: -0.60000014, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353655703555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353655703567} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!65 &7933235353655703553 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353655703567} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.35, y: 0.1362114, z: 0.55} + m_Center: {x: 0, y: 0, z: -0.06} +--- !u!1 &7933235353711811628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353711811620} + - component: {fileID: 7933235353711811631} + - component: {fileID: 7933235353711811619} + - component: {fileID: 7933235353711811616} + - component: {fileID: 7933235353711811629} + m_Layer: 0 + m_Name: shinR + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353711811620 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353711811628} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871454340699} + - {fileID: 7933235353655703566} + m_Father: {fileID: 7933235353713167657} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!54 &7933235353711811631 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353711811628} + serializedVersion: 2 + m_Mass: 7 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353711811619 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353711811628} + m_ConnectedBody: {fileID: 7933235353713167632} + m_Anchor: {x: 0, y: 0.5, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: -0.5, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353711811616 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353711811628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353711811629 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353711811628} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235353713167633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235353713167657} + - component: {fileID: 7933235353713167632} + - component: {fileID: 7933235353713167636} + - component: {fileID: 7933235353713167637} + - component: {fileID: 7933235353713167634} + m_Layer: 0 + m_Name: thighR + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235353713167657 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353713167633} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.39999396, y: -0.79999995, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871635378179} + - {fileID: 7933235353711811620} + m_Father: {fileID: 895268871264836332} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!54 &7933235353713167632 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353713167633} + serializedVersion: 2 + m_Mass: 14 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235353713167636 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353713167633} + m_ConnectedBody: {fileID: 895268871264836334} + m_Anchor: {x: 0, y: 0.5, z: 0} + m_Axis: {x: -1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.39999396, y: -0.29999995, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -90 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 40 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235353713167637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353713167633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235353713167634 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235353713167633} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 0.9 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235354074184675 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235354074184674} + - component: {fileID: 7933235354074184697} + - component: {fileID: 7933235354074184678} + - component: {fileID: 7933235354074184679} + - component: {fileID: 7933235354074184676} + m_Layer: 0 + m_Name: head + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235354074184674 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354074184675} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.3619995, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268872066370730} + m_Father: {fileID: 7933235354845945071} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235354074184697 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354074184675} + serializedVersion: 2 + m_Mass: 6 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235354074184678 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354074184675} + m_ConnectedBody: {fileID: 7933235354845945046} + m_Anchor: {x: 0, y: -0.85, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.5119997, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -30 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 10 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235354074184679 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354074184675} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!135 &7933235354074184676 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354074184675} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.65073156 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235354616748503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235354616748502} + - component: {fileID: 7933235354616748525} + - component: {fileID: 7933235354616748522} + - component: {fileID: 7933235354616748523} + - component: {fileID: 7933235354616748520} + m_Layer: 0 + m_Name: hand_R + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235354616748502 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354616748503} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871289741196} + m_Father: {fileID: 7933235353195701980} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235354616748525 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354616748503} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235354616748522 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354616748503} + m_ConnectedBody: {fileID: 7933235353195701959} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.70000017, y: 0.00000011920929, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 0 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235354616748523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354616748503} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!135 &7933235354616748520 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354616748503} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.25000012 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235354652902041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235354652902033} + - component: {fileID: 7933235354652902040} + - component: {fileID: 7933235354652902044} + - component: {fileID: 7933235354652902045} + - component: {fileID: 7933235354652902042} + m_Layer: 0 + m_Name: spine + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235354652902033 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354652902041} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.68299997, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871818316279} + - {fileID: 7933235354845945071} + m_Father: {fileID: 895268871264836332} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235354652902040 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354652902041} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235354652902044 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354652902041} + m_ConnectedBody: {fileID: 895268871264836334} + m_Anchor: {x: 0, y: -0.3, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.3829999, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 15 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235354652902045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354652902041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235354652902042 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354652902041} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 1 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235354845945047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235354845945071} + - component: {fileID: 7933235354845945046} + - component: {fileID: 7933235354845945066} + - component: {fileID: 7933235354845945067} + - component: {fileID: 7933235354845945040} + m_Layer: 0 + m_Name: chest + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235354845945071 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354845945047} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.8050003, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871492350891} + - {fileID: 7933235353030744140} + - {fileID: 7933235355057813930} + - {fileID: 7933235354074184674} + m_Father: {fileID: 7933235354652902033} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235354845945046 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354845945047} + serializedVersion: 2 + m_Mass: 8 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235354845945066 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354845945047} + m_ConnectedBody: {fileID: 7933235354652902040} + m_Anchor: {x: 0, y: -0.5, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.30500042, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 15 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235354845945067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354845945047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235354845945040 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354845945047} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.4 + m_Height: 1.4 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &7933235354882597186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235354882597189} + - component: {fileID: 7933235354882597208} + - component: {fileID: 7933235354882597209} + - component: {fileID: 7933235354882597190} + - component: {fileID: 7933235354882597188} + m_Layer: 0 + m_Name: footL + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235354882597189 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354882597186} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.6, z: 0.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268872579982991} + m_Father: {fileID: 7933235353272702556} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235354882597208 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354882597186} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235354882597209 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354882597186} + m_ConnectedBody: {fileID: 7933235353272702535} + m_Anchor: {x: 0, y: 0, z: -0.1} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: -0.60000014, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 1 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -20 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 20 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235354882597190 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354882597186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 0 + penalizeGroundContact: 0 + groundContactPenalty: 0 + touchingGround: 0 +--- !u!65 &7933235354882597188 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235354882597186} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.35, y: 0.1362114, z: 0.55} + m_Center: {x: 0, y: 0, z: -0.06} +--- !u!1 &7933235355057813906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7933235355057813930} + - component: {fileID: 7933235355057813909} + - component: {fileID: 7933235355057813929} + - component: {fileID: 7933235355057813910} + - component: {fileID: 7933235355057813907} + m_Layer: 0 + m_Name: upper_arm_R + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7933235355057813930 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235355057813906} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.2500001, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 895268871754721622} + - {fileID: 7933235353195701980} + m_Father: {fileID: 7933235354845945071} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7933235355057813909 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235355057813906} + serializedVersion: 2 + m_Mass: 4 + m_Drag: 0.05 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7933235355057813929 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235355057813906} + m_ConnectedBody: {fileID: 7933235354845945046} + m_Anchor: {x: -0.55, y: 0, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.7000001, y: 0.00000011920929, z: 0} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: 1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 120 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 100 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 10000 + positionDamper: 100 + maximumForce: 25000 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &7933235355057813910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235355057813906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2666e257ea992476cae0f7f163165e71, type: 3} + m_Name: + m_EditorClassIdentifier: + agent: {fileID: 0} + agentDoneOnGroundContact: 1 + penalizeGroundContact: 1 + groundContactPenalty: -1 + touchingGround: 0 +--- !u!136 &7933235355057813907 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7933235355057813906} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.25 + m_Height: 1 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1001 &7597605653427724053 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 895268871377934298} + m_Modifications: + - target: {fileID: 2591864625898824423, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999519, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_Name + value: OrientationCube + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 72f745913c5a34df5aaadd5c1f0024cb, type: 3} +--- !u!4 &5370605450757534085 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + m_PrefabInstance: {fileID: 7597605653427724053} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdollLarge.prefab.meta b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdollLarge.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..ee74753fa9ec92b4bf0bb82319e5d59179f999bc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Prefabs/Ragdoll/WalkerRagdollLarge.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 765582efd9dda46ed98564603316353f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Scenes.meta b/Project/Assets/ML-Agents/Examples/Walker/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..db94c524593445c4660905f19738024eebad26a3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0cbd2f7f50043472fa69aa1e1671a887 +folderAsset: yes +timeCreated: 1522735620 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity b/Project/Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity new file mode 100644 index 0000000000000000000000000000000000000000..61156e26e0e77432f3b7691fa12fa79e84b79d4a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity @@ -0,0 +1,1270 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971168, g: 0.4997775, b: 0.57563686, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 79aaf90aa86a141da808b7768b9f1403, + type: 2} + m_LightingSettings: {fileID: 579492083} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &193531851 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537121661968964, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_Name + value: Directional_Light + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &377867948 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (5) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1001 &500175881 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (8) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 51 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!850595691 &579492083 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 +--- !u!1001 &753585645 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (9) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 102 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1 &781961355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 781961358} + - component: {fileID: 781961357} + - component: {fileID: 781961356} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &781961356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781961355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &781961357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781961355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &781961358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781961355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1079850865 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (2) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 51 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1 &1392866527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392866532} + - component: {fileID: 1392866531} + - component: {fileID: 1392866529} + - component: {fileID: 1392866533} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &1392866529 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 +--- !u!20 &1392866531 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 60 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1392866532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_LocalRotation: {x: 0.14431359, y: -0.60080194, z: 0.111364864, w: 0.778337} + m_LocalPosition: {x: 4.21, y: 2.83, z: -1.43} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 21.006, y: -75.33, z: -0.003} +--- !u!114 &1392866533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec40c70d5160b47cd8deaab79e24892c, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 1997371326124021637} + smoothingTime: 0.1 +--- !u!1001 &1475071004 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (6) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 76.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1001 &1481808307 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &1702385307 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (4) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 102 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1001 &1828383796 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (7) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1001 &2023056993 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (3) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 76.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1001 &2080237570 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget (1) + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 25.5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} +--- !u!1 &2095421678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2095421679} + - component: {fileID: 2095421681} + - component: {fileID: 2095421680} + m_Layer: 0 + m_Name: WalkerDynamicSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2095421679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2095421680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1.5 + fixedDeltaTime: 0.01333 + maximumDeltaTime: 0.15 + solverIterations: 12 + solverVelocityIterations: 12 + reuseCollisionCallbacks: 1 +--- !u!114 &2095421681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3d6f3eab3776b4fb79724ac4216dfd7b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1997371326124021637 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 1997371326124021637, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + m_PrefabInstance: {fileID: 2709362470382547191} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &2709362470382547191 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6713178126238440196, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_Name + value: PlatformDynamicTarget + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6718791046026642300, guid: 84359146bf7af47e58c229d877e801d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84359146bf7af47e58c229d877e801d7, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity.meta b/Project/Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..e4d71bed5b6196f2366510efd790dd3dd6197a22 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2b839ee93e7a4467f9f8b4803c4a239b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Scripts.meta b/Project/Assets/ML-Agents/Examples/Walker/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..1d27d05b2ec82086915d2ce568633d3a666cb16b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: af2fea7851fc24ade8c2cca401cebe18 +folderAsset: yes +timeCreated: 1522735620 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/Scripts/WalkerAgent.cs b/Project/Assets/ML-Agents/Examples/Walker/Scripts/WalkerAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..1ecd88cc7fb0c697b718573f8f918b9bc6de39fd --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Scripts/WalkerAgent.cs @@ -0,0 +1,294 @@ +using System; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgentsExamples; +using Unity.MLAgents.Sensors; +using BodyPart = Unity.MLAgentsExamples.BodyPart; +using Random = UnityEngine.Random; + +public class WalkerAgent : Agent +{ + [Header("Walk Speed")] + [Range(0.1f, 10)] + [SerializeField] + //The walking speed to try and achieve + private float m_TargetWalkingSpeed = 10; + + public float MTargetWalkingSpeed // property + { + get { return m_TargetWalkingSpeed; } + set { m_TargetWalkingSpeed = Mathf.Clamp(value, .1f, m_maxWalkingSpeed); } + } + + const float m_maxWalkingSpeed = 10; //The max walking speed + + //Should the agent sample a new goal velocity each episode? + //If true, walkSpeed will be randomly set between zero and m_maxWalkingSpeed in OnEpisodeBegin() + //If false, the goal velocity will be walkingSpeed + public bool randomizeWalkSpeedEachEpisode; + + //The direction an agent will walk during training. + private Vector3 m_WorldDirToWalk = Vector3.right; + + [Header("Target To Walk Towards")] public Transform target; //Target the agent will walk towards during training. + + [Header("Body Parts")] public Transform hips; + public Transform chest; + public Transform spine; + public Transform head; + public Transform thighL; + public Transform shinL; + public Transform footL; + public Transform thighR; + public Transform shinR; + public Transform footR; + public Transform armL; + public Transform forearmL; + public Transform handL; + public Transform armR; + public Transform forearmR; + public Transform handR; + + //This will be used as a stabilized model space reference point for observations + //Because ragdolls can move erratically during training, using a stabilized reference transform improves learning + OrientationCubeController m_OrientationCube; + + //The indicator graphic gameobject that points towards the target + DirectionIndicator m_DirectionIndicator; + JointDriveController m_JdController; + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + m_OrientationCube = GetComponentInChildren(); + m_DirectionIndicator = GetComponentInChildren(); + + //Setup each body part + m_JdController = GetComponent(); + m_JdController.SetupBodyPart(hips); + m_JdController.SetupBodyPart(chest); + m_JdController.SetupBodyPart(spine); + m_JdController.SetupBodyPart(head); + m_JdController.SetupBodyPart(thighL); + m_JdController.SetupBodyPart(shinL); + m_JdController.SetupBodyPart(footL); + m_JdController.SetupBodyPart(thighR); + m_JdController.SetupBodyPart(shinR); + m_JdController.SetupBodyPart(footR); + m_JdController.SetupBodyPart(armL); + m_JdController.SetupBodyPart(forearmL); + m_JdController.SetupBodyPart(handL); + m_JdController.SetupBodyPart(armR); + m_JdController.SetupBodyPart(forearmR); + m_JdController.SetupBodyPart(handR); + + m_ResetParams = Academy.Instance.EnvironmentParameters; + } + + /// + /// Loop over body parts and reset them to initial conditions. + /// + public override void OnEpisodeBegin() + { + //Reset all of the body parts + foreach (var bodyPart in m_JdController.bodyPartsDict.Values) + { + bodyPart.Reset(bodyPart); + } + + //Random start rotation to help generalize + hips.rotation = Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0); + + UpdateOrientationObjects(); + + //Set our goal walking speed + MTargetWalkingSpeed = + randomizeWalkSpeedEachEpisode ? Random.Range(0.1f, m_maxWalkingSpeed) : MTargetWalkingSpeed; + } + + /// + /// Add relevant information on each body part to observations. + /// + public void CollectObservationBodyPart(BodyPart bp, VectorSensor sensor) + { + //GROUND CHECK + sensor.AddObservation(bp.groundContact.touchingGround); // Is this bp touching the ground + + //Get velocities in the context of our orientation cube's space + //Note: You can get these velocities in world space as well but it may not train as well. + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(bp.rb.velocity)); + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(bp.rb.angularVelocity)); + + //Get position relative to hips in the context of our orientation cube's space + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(bp.rb.position - hips.position)); + + if (bp.rb.transform != hips && bp.rb.transform != handL && bp.rb.transform != handR) + { + sensor.AddObservation(bp.rb.transform.localRotation); + sensor.AddObservation(bp.currentStrength / m_JdController.maxJointForceLimit); + } + } + + /// + /// Loop over body parts to add them to observation. + /// + public override void CollectObservations(VectorSensor sensor) + { + var cubeForward = m_OrientationCube.transform.forward; + + //velocity we want to match + var velGoal = cubeForward * MTargetWalkingSpeed; + //ragdoll's avg vel + var avgVel = GetAvgVelocity(); + + //current ragdoll velocity. normalized + sensor.AddObservation(Vector3.Distance(velGoal, avgVel)); + //avg body vel relative to cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(avgVel)); + //vel goal relative to cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(velGoal)); + + //rotation deltas + sensor.AddObservation(Quaternion.FromToRotation(hips.forward, cubeForward)); + sensor.AddObservation(Quaternion.FromToRotation(head.forward, cubeForward)); + + //Position of target position relative to cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformPoint(target.transform.position)); + + foreach (var bodyPart in m_JdController.bodyPartsList) + { + CollectObservationBodyPart(bodyPart, sensor); + } + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + var bpDict = m_JdController.bodyPartsDict; + var i = -1; + + var continuousActions = actionBuffers.ContinuousActions; + bpDict[chest].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], continuousActions[++i]); + bpDict[spine].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], continuousActions[++i]); + + bpDict[thighL].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[thighR].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[shinL].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[shinR].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[footR].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], continuousActions[++i]); + bpDict[footL].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], continuousActions[++i]); + + bpDict[armL].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[armR].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[forearmL].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[forearmR].SetJointTargetRotation(continuousActions[++i], 0, 0); + bpDict[head].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + + //update joint strength settings + bpDict[chest].SetJointStrength(continuousActions[++i]); + bpDict[spine].SetJointStrength(continuousActions[++i]); + bpDict[head].SetJointStrength(continuousActions[++i]); + bpDict[thighL].SetJointStrength(continuousActions[++i]); + bpDict[shinL].SetJointStrength(continuousActions[++i]); + bpDict[footL].SetJointStrength(continuousActions[++i]); + bpDict[thighR].SetJointStrength(continuousActions[++i]); + bpDict[shinR].SetJointStrength(continuousActions[++i]); + bpDict[footR].SetJointStrength(continuousActions[++i]); + bpDict[armL].SetJointStrength(continuousActions[++i]); + bpDict[forearmL].SetJointStrength(continuousActions[++i]); + bpDict[armR].SetJointStrength(continuousActions[++i]); + bpDict[forearmR].SetJointStrength(continuousActions[++i]); + } + + //Update OrientationCube and DirectionIndicator + void UpdateOrientationObjects() + { + m_WorldDirToWalk = target.position - hips.position; + m_OrientationCube.UpdateOrientation(hips, target); + if (m_DirectionIndicator) + { + m_DirectionIndicator.MatchOrientation(m_OrientationCube.transform); + } + } + + void FixedUpdate() + { + UpdateOrientationObjects(); + + var cubeForward = m_OrientationCube.transform.forward; + + // Set reward for this step according to mixture of the following elements. + // a. Match target speed + //This reward will approach 1 if it matches perfectly and approach zero as it deviates + var matchSpeedReward = GetMatchingVelocityReward(cubeForward * MTargetWalkingSpeed, GetAvgVelocity()); + + //Check for NaNs + if (float.IsNaN(matchSpeedReward)) + { + throw new ArgumentException( + "NaN in moveTowardsTargetReward.\n" + + $" cubeForward: {cubeForward}\n" + + $" hips.velocity: {m_JdController.bodyPartsDict[hips].rb.velocity}\n" + + $" maximumWalkingSpeed: {m_maxWalkingSpeed}" + ); + } + + // b. Rotation alignment with target direction. + //This reward will approach 1 if it faces the target direction perfectly and approach zero as it deviates + var headForward = head.forward; + headForward.y = 0; + // var lookAtTargetReward = (Vector3.Dot(cubeForward, head.forward) + 1) * .5F; + var lookAtTargetReward = (Vector3.Dot(cubeForward, headForward) + 1) * .5F; + + //Check for NaNs + if (float.IsNaN(lookAtTargetReward)) + { + throw new ArgumentException( + "NaN in lookAtTargetReward.\n" + + $" cubeForward: {cubeForward}\n" + + $" head.forward: {head.forward}" + ); + } + + AddReward(matchSpeedReward * lookAtTargetReward); + } + + //Returns the average velocity of all of the body parts + //Using the velocity of the hips only has shown to result in more erratic movement from the limbs, so... + //...using the average helps prevent this erratic movement + Vector3 GetAvgVelocity() + { + Vector3 velSum = Vector3.zero; + + //ALL RBS + int numOfRb = 0; + foreach (var item in m_JdController.bodyPartsList) + { + numOfRb++; + velSum += item.rb.velocity; + } + + var avgVel = velSum / numOfRb; + return avgVel; + } + + //normalized value of the difference in avg speed vs goal walking speed. + public float GetMatchingVelocityReward(Vector3 velocityGoal, Vector3 actualVelocity) + { + //distance between our actual velocity and goal velocity + var velDeltaMagnitude = Mathf.Clamp(Vector3.Distance(actualVelocity, velocityGoal), 0, MTargetWalkingSpeed); + + //return the value on a declining sigmoid shaped curve that decays from 1 to 0 + //This reward will approach 1 if it matches perfectly and approach zero as it deviates + return Mathf.Pow(1 - Mathf.Pow(velDeltaMagnitude / MTargetWalkingSpeed, 2), 2); + } + + /// + /// Agent touched the target + /// + public void TouchedTarget() + { + AddReward(1f); + } +} diff --git a/Project/Assets/ML-Agents/Examples/Walker/Scripts/WalkerAgent.cs.meta b/Project/Assets/ML-Agents/Examples/Walker/Scripts/WalkerAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9e605daeff05cda9685c66dda122a960007e5f0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/Scripts/WalkerAgent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ccb0f85f0009540d7ad997952e2aed7b +timeCreated: 1507411991 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/TFModels.meta b/Project/Assets/ML-Agents/Examples/Walker/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..cde2ca7b2f3d1342a63c3896cf6af01329123ab4 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/TFModels.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2dd07dfcea4cc4ed2809872c6b2df211 +folderAsset: yes +timeCreated: 1522735609 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx b/Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx new file mode 100644 index 0000000000000000000000000000000000000000..be90f8e6637dd3d6a45ad719faa2d8a771352dc2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e040ded23538c0e25d09b2539dfa12c4b3098a0488b0bdd4fac48204c5e44fe +size 820986 diff --git a/Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx.meta b/Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..33373900ce26aff88419996ba58ba854cf755e63 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/TFModels/Walker.onnx.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: b000e8fcd1edc454d9e6deb84abefbf9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 + weightsTypeMode: 0 + activationTypeMode: 0 diff --git a/Project/Assets/ML-Agents/Examples/Walker/WalkerRagdoll.fbx b/Project/Assets/ML-Agents/Examples/Walker/WalkerRagdoll.fbx new file mode 100644 index 0000000000000000000000000000000000000000..2efefff3ec08cc78ae192448a784613497d02ebc --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/WalkerRagdoll.fbx @@ -0,0 +1,2548 @@ +; FBX 7.4.0 project file +; ---------------------------------------------------- + +FBXHeaderExtension: { + FBXHeaderVersion: 1003 + FBXVersion: 7400 + CreationTimeStamp: { + Version: 1000 + Year: 2023 + Month: 1 + Day: 31 + Hour: 13 + Minute: 50 + Second: 50 + Millisecond: 0 + } + Creator: "FBX SDK/FBX Plugins version 2020.3.2" + SceneInfo: "SceneInfo::GlobalInfo", "UserData" { + Type: "UserData" + Version: 100 + MetaData: { + Version: 100 + Title: "Created by FBX Exporter from Unity Technologies" + Subject: "" + Author: "Unity Technologies" + Keywords: "Nodes Meshes Materials Textures Cameras Lights Skins Animation" + Revision: "1.0" + Comment: "" + } + Properties70: { + P: "DocumentUrl", "KString", "Url", "", "/Users/brandonh/unity_projects/ml-agents-master/ml-agents/Project/Assets/8fp67e3h_WalkerRagdoll.fbx" + P: "SrcDocumentUrl", "KString", "Url", "", "/Users/brandonh/unity_projects/ml-agents-master/ml-agents/Project/Assets/8fp67e3h_WalkerRagdoll.fbx" + P: "Original", "Compound", "", "" + P: "Original|ApplicationVendor", "KString", "", "", "" + P: "Original|ApplicationName", "KString", "", "", "Unity FBX Exporter" + P: "Original|ApplicationVersion", "KString", "", "", "4.1.3" + P: "Original|DateTime_GMT", "DateTime", "", "", "" + P: "Original|FileName", "KString", "", "", "" + P: "LastSaved", "Compound", "", "" + P: "LastSaved|ApplicationVendor", "KString", "", "", "" + P: "LastSaved|ApplicationName", "KString", "", "", "Unity FBX Exporter" + P: "LastSaved|ApplicationVersion", "KString", "", "", "4.1.3" + P: "LastSaved|DateTime_GMT", "DateTime", "", "", "" + } + } +} +GlobalSettings: { + Version: 1000 + Properties70: { + P: "UpAxis", "int", "Integer", "",1 + P: "UpAxisSign", "int", "Integer", "",1 + P: "FrontAxis", "int", "Integer", "",2 + P: "FrontAxisSign", "int", "Integer", "",1 + P: "CoordAxis", "int", "Integer", "",0 + P: "CoordAxisSign", "int", "Integer", "",1 + P: "OriginalUpAxis", "int", "Integer", "",-1 + P: "OriginalUpAxisSign", "int", "Integer", "",1 + P: "UnitScaleFactor", "double", "Number", "",1 + P: "OriginalUnitScaleFactor", "double", "Number", "",1 + P: "AmbientColor", "ColorRGB", "Color", "",0,0,0 + P: "DefaultCamera", "KString", "", "", "Producer Perspective" + P: "TimeMode", "enum", "", "",0 + P: "TimeProtocol", "enum", "", "",2 + P: "SnapOnFrameMode", "enum", "", "",0 + P: "TimeSpanStart", "KTime", "Time", "",0 + P: "TimeSpanStop", "KTime", "Time", "",46186158000 + P: "CustomFrameRate", "double", "Number", "",-1 + P: "TimeMarker", "Compound", "", "" + P: "CurrentTimeMarker", "int", "Integer", "",-1 + } +} + +; Documents Description +;------------------------------------------------------------------ + +Documents: { + Count: 1 + Document: 140631873932384, "Scene", "Scene" { + Properties70: { + P: "SourceObject", "object", "", "" + P: "ActiveAnimStackName", "KString", "", "", "" + } + RootNode: 0 + } +} + +; Document References +;------------------------------------------------------------------ + +References: { +} + +; Object definitions +;------------------------------------------------------------------ + +Definitions: { + Version: 100 + Count: 65 + ObjectType: "GlobalSettings" { + Count: 1 + } + ObjectType: "Model" { + Count: 47 + PropertyTemplate: "FbxNode" { + Properties70: { + P: "QuaternionInterpolate", "enum", "", "",0 + P: "RotationOffset", "Vector3D", "Vector", "",0,0,0 + P: "RotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "ScalingOffset", "Vector3D", "Vector", "",0,0,0 + P: "ScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "TranslationActive", "bool", "", "",0 + P: "TranslationMin", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMax", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMinX", "bool", "", "",0 + P: "TranslationMinY", "bool", "", "",0 + P: "TranslationMinZ", "bool", "", "",0 + P: "TranslationMaxX", "bool", "", "",0 + P: "TranslationMaxY", "bool", "", "",0 + P: "TranslationMaxZ", "bool", "", "",0 + P: "RotationOrder", "enum", "", "",0 + P: "RotationSpaceForLimitOnly", "bool", "", "",0 + P: "RotationStiffnessX", "double", "Number", "",0 + P: "RotationStiffnessY", "double", "Number", "",0 + P: "RotationStiffnessZ", "double", "Number", "",0 + P: "AxisLen", "double", "Number", "",10 + P: "PreRotation", "Vector3D", "Vector", "",0,0,0 + P: "PostRotation", "Vector3D", "Vector", "",0,0,0 + P: "RotationActive", "bool", "", "",0 + P: "RotationMin", "Vector3D", "Vector", "",0,0,0 + P: "RotationMax", "Vector3D", "Vector", "",0,0,0 + P: "RotationMinX", "bool", "", "",0 + P: "RotationMinY", "bool", "", "",0 + P: "RotationMinZ", "bool", "", "",0 + P: "RotationMaxX", "bool", "", "",0 + P: "RotationMaxY", "bool", "", "",0 + P: "RotationMaxZ", "bool", "", "",0 + P: "InheritType", "enum", "", "",0 + P: "ScalingActive", "bool", "", "",0 + P: "ScalingMin", "Vector3D", "Vector", "",0,0,0 + P: "ScalingMax", "Vector3D", "Vector", "",1,1,1 + P: "ScalingMinX", "bool", "", "",0 + P: "ScalingMinY", "bool", "", "",0 + P: "ScalingMinZ", "bool", "", "",0 + P: "ScalingMaxX", "bool", "", "",0 + P: "ScalingMaxY", "bool", "", "",0 + P: "ScalingMaxZ", "bool", "", "",0 + P: "GeometricTranslation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricRotation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricScaling", "Vector3D", "Vector", "",1,1,1 + P: "MinDampRangeX", "double", "Number", "",0 + P: "MinDampRangeY", "double", "Number", "",0 + P: "MinDampRangeZ", "double", "Number", "",0 + P: "MaxDampRangeX", "double", "Number", "",0 + P: "MaxDampRangeY", "double", "Number", "",0 + P: "MaxDampRangeZ", "double", "Number", "",0 + P: "MinDampStrengthX", "double", "Number", "",0 + P: "MinDampStrengthY", "double", "Number", "",0 + P: "MinDampStrengthZ", "double", "Number", "",0 + P: "MaxDampStrengthX", "double", "Number", "",0 + P: "MaxDampStrengthY", "double", "Number", "",0 + P: "MaxDampStrengthZ", "double", "Number", "",0 + P: "PreferedAngleX", "double", "Number", "",0 + P: "PreferedAngleY", "double", "Number", "",0 + P: "PreferedAngleZ", "double", "Number", "",0 + P: "LookAtProperty", "object", "", "" + P: "UpVectorProperty", "object", "", "" + P: "Show", "bool", "", "",1 + P: "NegativePercentShapeSupport", "bool", "", "",1 + P: "DefaultAttributeIndex", "int", "Integer", "",-1 + P: "Freeze", "bool", "", "",0 + P: "LODBox", "bool", "", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,0,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 + P: "Visibility", "Visibility", "", "A",1 + P: "Visibility Inheritance", "Visibility Inheritance", "", "",1 + } + } + } + ObjectType: "Geometry" { + Count: 7 + PropertyTemplate: "FbxMesh" { + Properties70: { + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "BBoxMin", "Vector3D", "Vector", "",0,0,0 + P: "BBoxMax", "Vector3D", "Vector", "",0,0,0 + P: "Primary Visibility", "bool", "", "",1 + P: "Casts Shadows", "bool", "", "",1 + P: "Receive Shadows", "bool", "", "",1 + } + } + } + ObjectType: "Material" { + Count: 8 + PropertyTemplate: "FbxSurfaceLambert" { + Properties70: { + P: "ShadingModel", "KString", "", "", "Lambert" + P: "MultiLayer", "bool", "", "",0 + P: "EmissiveColor", "Color", "", "A",0,0,0 + P: "EmissiveFactor", "Number", "", "A",1 + P: "AmbientColor", "Color", "", "A",0.2,0.2,0.2 + P: "AmbientFactor", "Number", "", "A",1 + P: "DiffuseColor", "Color", "", "A",0.8,0.8,0.8 + P: "DiffuseFactor", "Number", "", "A",1 + P: "Bump", "Vector3D", "Vector", "",0,0,0 + P: "NormalMap", "Vector3D", "Vector", "",0,0,0 + P: "BumpFactor", "double", "Number", "",1 + P: "TransparentColor", "Color", "", "A",0,0,0 + P: "TransparencyFactor", "Number", "", "A",0 + P: "DisplacementColor", "ColorRGB", "Color", "",0,0,0 + P: "DisplacementFactor", "double", "Number", "",1 + P: "VectorDisplacementColor", "ColorRGB", "Color", "",0,0,0 + P: "VectorDisplacementFactor", "double", "Number", "",1 + } + } + } + ObjectType: "Texture" { + Count: 1 + PropertyTemplate: "FbxFileTexture" { + Properties70: { + P: "TextureTypeUse", "enum", "", "",0 + P: "Texture alpha", "Number", "", "A",1 + P: "CurrentMappingType", "enum", "", "",0 + P: "WrapModeU", "enum", "", "",0 + P: "WrapModeV", "enum", "", "",0 + P: "UVSwap", "bool", "", "",0 + P: "PremultiplyAlpha", "bool", "", "",1 + P: "Translation", "Vector", "", "A",0,0,0 + P: "Rotation", "Vector", "", "A",0,0,0 + P: "Scaling", "Vector", "", "A",1,1,1 + P: "TextureRotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "TextureScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "CurrentTextureBlendMode", "enum", "", "",1 + P: "UVSet", "KString", "", "", "default" + P: "UseMaterial", "bool", "", "",0 + P: "UseMipMap", "bool", "", "",0 + } + } + } + ObjectType: "Video" { + Count: 1 + PropertyTemplate: "FbxVideo" { + Properties70: { + P: "Path", "KString", "XRefUrl", "", "" + P: "RelPath", "KString", "XRefUrl", "", "" + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "ClipIn", "KTime", "Time", "",0 + P: "ClipOut", "KTime", "Time", "",0 + P: "Offset", "KTime", "Time", "",0 + P: "PlaySpeed", "double", "Number", "",0 + P: "FreeRunning", "bool", "", "",0 + P: "Loop", "bool", "", "",0 + P: "Mute", "bool", "", "",0 + P: "AccessMode", "enum", "", "",0 + P: "ImageSequence", "bool", "", "",0 + P: "ImageSequenceOffset", "int", "Integer", "",0 + P: "FrameRate", "double", "Number", "",0 + P: "LastFrame", "int", "Integer", "",0 + P: "Width", "int", "Integer", "",0 + P: "Height", "int", "Integer", "",0 + P: "StartFrame", "int", "Integer", "",0 + P: "StopFrame", "int", "Integer", "",0 + P: "InterlaceMode", "enum", "", "",0 + } + } + } +} + +; Object properties +;------------------------------------------------------------------ + +Objects: { + Geometry: 140631875977168, "Geometry::Scene", "Mesh" { + Vertices: *1254 { + a: 28.8587093353271,-78.8739442825317,28.8587063550949,28.8587093353271,-78.9010226726532,-28.8586974143982,-28.8587093353271,-78.8739502429962,28.8587063550949,-28.8587093353271,-78.9010286331177,-28.8587063550949,28.8586974143982,78.8739740848541,28.8587063550949,28.8586974143982,78.8739740848541,-28.8586974143982,-28.8587123155594,78.8739681243896,28.8587063550949,-28.8587123155594,78.8739681243896,-28.8586974143982,-9.85331070069151e-06,-100,5.55979084992941e-06,3.49812907529667e-06,100,-3.02327762824461e-06,50,50.0152587890625,2.69876814229519e-06,1.59078048511674e-06,50.042337179184,-50,-50,50.0152587890625,2.69876814229519e-06,1.59078048511674e-06,50.0152587890625,50,-9.85331070069151e-06,-85.3598058223724,35.3445500135422,-35.3445500135422,-85.3598058223724,5.55979084992941e-06,-9.85331070069151e-06,-85.3868842124939,-35.3445470333099,35.3445500135422,-85.3598058223724,5.55979084992941e-06,35.3445589542389,85.3598177433014,2.69876814229519e-06,1.59078048511674e-06,85.3598177433014,-35.3445500135422,-35.3445589542389,85.3598177433014,2.69876814229519e-06,1.59078048511674e-06,85.3598177433014,35.3445619344711,35.3445440530777,50.042337179184,-35.3445470333099,35.3445440530777,50.0152587890625,35.3445500135422,-35.3445500135422,50.042337179184,-35.3445470333099,-35.3445500135422,50.0152587890625,35.3445500135422,24.0828603506088,-80.9869468212128,30.971685051918,17.0590728521347,-83.2377076148987,33.2224488258362,8.82931277155876,-84.8040282726288,34.7887724637985,-24.0828678011894,-80.9869349002838,30.971685051918,-17.0590877532959,-83.2377076148987,33.2224488258362,-8.82933214306831,-84.8040282726288,34.7887724637985,-30.971685051918,-80.9869468212128,24.0828648209572,-33.2224458456039,-83.2377076148987,17.0590847730637,-34.788766503334,-84.8040282726288,8.82932767271996,-30.971685051918,-81.0140192508698,-24.0828588604927,-33.2224458456039,-83.2647860050201,-17.0590773224831,-34.788766503334,-84.8311066627502,-8.829315751791,-24.0828678011894,-81.0140132904053,-30.9716790914536,-17.0590877532959,-83.2647860050201,-33.2224428653717, +-8.82933214306831,-84.8311066627502,-34.788766503334,24.0828603506088,-81.0140192508698,-30.9716790914536,17.0590728521347,-83.2647860050201,-33.2224428653717,8.82931277155876,-84.8311066627502,-34.788766503334,30.9716761112213,-81.0140192508698,-24.0828588604927,33.2224488258362,-83.2647860050201,-17.0590773224831,34.7887724637985,-84.8311066627502,-8.829315751791,30.9716761112213,-80.9869468212128,24.0828648209572,33.2224488258362,-83.2377076148987,17.0590847730637,34.7887724637985,-84.8040282726288,8.82932767271996,30.9716820716858,80.9869468212128,24.0828678011894,33.2224488258362,83.2377076148987,17.059089243412,34.788766503334,84.8040521144867,8.82932841777802,30.9716820716858,80.9869468212128,-24.0828618407249,33.2224488258362,83.2377076148987,-17.0590803027153,34.788766503334,84.8040521144867,-8.82931724190712,24.0828603506088,80.9869527816772,-30.9716820716858,17.0590832829475,83.2377016544342,-33.2224458456039,8.82932096719742,84.8040521144867,-34.7887724637985,-24.0828722715378,80.9869527816772,-30.9716820716858,-17.0590907335281,83.2377076148987,-33.2224458456039,-8.82932469248772,84.8040521144867,-34.7887724637985,-30.9716880321503,80.9869527816772,-24.0828618407249,-33.2224577665329,83.2377016544342,-17.0590803027153,-34.788778424263,84.8040521144867,-8.82931724190712,-30.9716880321503,80.9869527816772,24.0828678011894,-33.2224577665329,83.2377016544342,17.059089243412,-34.788778424263,84.8040521144867,8.82932841777802,-24.0828722715378,80.9869527816772,30.9716910123825,-17.0590907335281,83.2377076148987,33.2224577665329,-8.82932543754578,84.8040521144867,34.788778424263,24.0828603506088,80.9869527816772,30.9716910123825,17.0590832829475,83.2377016544342,33.2224577665329,8.8293194770813,84.8040521144867,34.788778424263,30.9716820716858,-74.1251945495605,-30.9716790914536,33.2224488258362,-67.1014249324799,-33.2224458456039,34.7887724637985,-58.8716566562653,-34.7887724637985,30.9716820716858,74.098128080368,-30.9716820716858,33.2224488258362,67.0743525028229,-33.2224458456039,34.788778424263,58.8445901870728,-34.7887724637985, +30.9716820716858,74.098128080368,30.9716910123825,33.2224488258362,67.0743525028229,33.2224577665329,34.788778424263,58.8445901870728,34.788778424263,30.9716820716858,-74.0981221199036,30.971685051918,33.2224488258362,-67.0743465423584,33.2224577665329,34.7887724637985,-58.8445782661438,34.788778424263,-30.971685051918,-74.1251945495605,-30.9716790914536,-33.2224488258362,-67.1014249324799,-33.2224458456039,-34.7887754440308,-58.8716566562653,-34.7887724637985,-30.9716880321503,74.098128080368,-30.9716820716858,-33.2224488258362,67.0743525028229,-33.2224458456039,-34.788778424263,58.8445901870728,-34.7887724637985,-30.971685051918,-74.0981221199036,30.971685051918,-33.2224488258362,-67.0743465423584,33.2224577665329,-34.7887754440308,-58.8445782661438,34.788778424263,-30.9716880321503,74.098128080368,30.9716910123825,-33.2224488258362,67.0743525028229,33.2224577665329,-34.788778424263,58.8445901870728,34.788778424263,-9.85331070069151e-06,-91.3605928421021,28.0898541212082,-9.85331070069151e-06,-95.9916830062866,19.6123048663139,-9.85331070069151e-06,-98.9676773548126,10.1061478257179,-28.0898571014404,-91.3605988025665,5.55979084992941e-06,-19.6122989058495,-95.9916830062866,5.47291882924128e-06,-10.1061567664146,-98.9676773548126,5.54241701422598e-06,-9.85331070069151e-06,-91.3876712322235,-28.0898422002792,-9.85331070069151e-06,-96.0187613964081,-19.6122944355011,-9.85331070069151e-06,-98.9947557449341,-10.1061373949051,28.0898481607437,-91.3605988025665,5.55979084992941e-06,19.6123018860817,-95.9916830062866,5.59453994242176e-06,10.1061306893826,-98.9676773548126,5.54241701422598e-06,28.0898451805115,91.3605809211731,2.69876814229519e-06,19.6122989058495,95.9916949272156,2.62927084548892e-06,10.1061448454857,98.9676952362061,2.69876814229519e-06,1.59078048511674e-06,91.3605809211731,-28.0898422002792,1.59078048511674e-06,95.9916949272156,-19.6122959256172,1.59078048511674e-06,98.9676952362061,-10.1061388850212,-28.0898600816727,91.3605809211731,2.69876814229519e-06,-19.6123063564301,95.9916949272156,2.80301435395813e-06, +-10.1061426103115,98.9676952362061,2.69876814229519e-06,1.59078048511674e-06,91.3605809211731,28.0898541212082,1.59078048511674e-06,95.9916949272156,19.6123048663139,1.59078048511674e-06,98.9676952362061,10.106148570776,41.3453131914139,-78.1050980091095,5.55979084992941e-06,45.9764331579208,-69.6275532245636,5.47291882924128e-06,48.9524334669113,-60.1213812828064,5.55979084992941e-06,41.3453221321106,50.042337179184,-28.0898422002792,45.9764331579208,50.042337179184,-19.6122959256172,48.952442407608,50.042337179184,-10.1061373949051,41.3453221321106,78.1051158905029,2.69876814229519e-06,45.9764391183853,69.6275472640991,2.80301435395813e-06,48.952442407608,60.1213872432709,2.69876814229519e-06,41.3453221321106,50.0152587890625,28.0898541212082,45.9764331579208,50.0152587890625,19.6123048663139,48.952442407608,50.0152587890625,10.1061478257179,-9.85331070069151e-06,-78.132176399231,-41.3453221321106,-6.03861352033164e-06,-69.6546256542206,-45.9764271974564,-6.03861352033164e-06,-60.1484537124634,-48.9524364471436,-28.0898451805115,50.042337179184,-41.3453221321106,-19.6123063564301,50.042337179184,-45.9764271974564,-10.1061455905437,50.042337179184,-48.9524304866791,1.59078048511674e-06,78.1051158905029,-41.3453221321106,1.59078048511674e-06,69.6275472640991,-45.9764271974564,1.59078048511674e-06,60.1213872432709,-48.9524304866791,28.0898451805115,50.042337179184,-41.3453221321106,19.6122989058495,50.042337179184,-45.9764271974564,10.1061418652534,50.042337179184,-48.9524304866791,-41.3453161716461,-78.1051218509674,5.55979084992941e-06,-45.9764271974564,-69.6275532245636,5.66403741686372e-06,-48.9524245262146,-60.1213812828064,5.55979084992941e-06,-41.3453131914139,50.0152587890625,28.0898541212082,-45.9764242172241,50.0152587890625,19.6123048663139,-48.9524304866791,50.0152587890625,10.1061478257179,-41.3453131914139,78.1051158905029,2.69876814229519e-06,-45.9764391183853,69.6275472640991,2.62927084548892e-06,-48.9524304866791,60.1214170455933,2.69876814229519e-06,-41.3453131914139,50.042337179184,-28.0898422002792, +-45.9764242172241,50.042337179184,-19.6122959256172,-48.9524304866791,50.042337179184,-10.1061373949051,-9.85331070069151e-06,-78.1050980091095,41.3453221321106,-6.03861352033164e-06,-69.6275472640991,45.9764391183853,-6.03861352033164e-06,-60.1213812828064,48.9524304866791,28.0898451805115,50.0152587890625,41.3453221321106,19.6122989058495,50.0152587890625,45.9764391183853,10.1061411201954,50.015264749527,48.9524304866791,1.59078048511674e-06,78.1051158905029,41.3453221321106,1.59078048511674e-06,69.6275472640991,45.9764391183853,1.59078048511674e-06,60.1213872432709,48.9524364471436,-28.0898451805115,50.0152587890625,41.3453221321106,-19.6123063564301,50.0152587890625,45.9764391183853,-10.1061463356018,50.0152587890625,48.9524304866791,24.9160975217819,-85.4673504829407,24.916099011898,17.5340786576271,-88.6407852172852,26.4404803514481,9.04504954814911,-90.6805336475372,27.6224046945572,26.4404743909836,-88.6407852172852,17.5340890884399,18.442876636982,-92.6555335521698,18.4428840875626,9.47573632001877,-95.1604902744293,19.2507579922676,27.6224046945572,-90.6805336475372,9.04506072402,19.2507535219193,-95.1604843139648,9.47574749588966,9.90131944417953,-97.9986190795898,9.90132987499237,-24.9160900712013,-85.4673504829407,24.916099011898,-26.4404684305191,-88.6407911777496,17.5340890884399,-27.6224046945572,-90.6805336475372,9.04506072402,-17.5340935587883,-88.6407852172852,26.4404803514481,-18.4428885579109,-92.6555633544922,18.4428840875626,-19.2507565021515,-95.1604843139648,9.47574749588966,-9.04506072402,-90.6805217266083,27.6224046945572,-9.47575569152832,-95.1604902744293,19.2507579922676,-9.90133807063103,-97.9986071586609,9.90132987499237,-24.9160900712013,-85.4944288730621,-24.9160900712013,-17.5340935587883,-88.6678576469421,-26.4404684305191,-9.04506072402,-90.7076001167297,-27.6223957538605,-26.4404684305191,-88.6678695678711,-17.5340786576271,-18.4428885579109,-92.6826357841492,-18.442876636982,-9.47575569152832,-95.1875686645508,-19.2507490515709,-27.6224046945572,-90.7076060771942,-9.04504880309105, +-19.2507565021515,-95.1875567436218,-9.47573632001877,-9.90133807063103,-98.0256855487823,-9.90131944417953,24.9160975217819,-85.4944288730621,-24.9160900712013,26.4404743909836,-88.6678576469421,-17.5340786576271,27.6224046945572,-90.7076060771942,-9.04504880309105,17.5340786576271,-88.6678576469421,-26.4404684305191,18.442876636982,-92.6826059818268,-18.442876636982,19.2507535219193,-95.1875567436218,-9.47573632001877,9.04504954814911,-90.7076060771942,-27.6223957538605,9.47573632001877,-95.1875686645508,-19.2507490515709,9.90131944417953,-98.0256915092468,-9.90131944417953,24.9160900712013,85.4673624038696,24.916099011898,26.4404743909836,88.6408090591431,17.5340935587883,27.6223957538605,90.6805396080017,9.04506072402,17.5340861082077,88.6408090591431,26.4404803514481,18.4428840875626,92.6555633544922,18.4428885579109,19.2507609724998,95.1604962348938,9.47574973106384,9.04505625367165,90.6805396080017,27.6224106550217,9.47574302554131,95.1605021953583,19.2507684230804,9.90132614970207,97.9986250400543,9.90133285522461,24.9160900712013,85.4673624038696,-24.9160900712013,17.5340861082077,88.6408090591431,-26.4404714107513,9.04505699872971,90.6805396080017,-27.6223957538605,26.4404743909836,88.6408090591431,-17.5340846180916,18.4428840875626,92.6555633544922,-18.4428781270981,9.47574377059937,95.1605021953583,-19.2507565021515,27.6223987340927,90.6805396080017,-9.04505103826523,19.2507609724998,95.1604962348938,-9.47573855519295,9.90132689476013,97.9986250400543,-9.90132093429565,-24.9161005020142,85.4673624038696,-24.9160900712013,-26.4404833316803,88.6408090591431,-17.5340846180916,-27.6224076747894,90.6805396080017,-9.04504880309105,-17.5340965390205,88.6408090591431,-26.4404714107513,-18.4428885579109,92.6555633544922,-18.4428781270981,-19.2507565021515,95.1605021953583,-9.47573855519295,-9.04506072402,90.6805396080017,-27.6224046945572,-9.47574749588966,95.1604962348938,-19.2507565021515,-9.90133062005043,97.9986190795898,-9.90132093429565,-24.9161005020142,85.4673624038696,24.916099011898,-17.5340965390205,88.6408090591431,26.4404803514481, +-9.04505401849747,90.6805396080017,27.6224046945572,-26.4404833316803,88.6408090591431,17.5340935587883,-18.4428885579109,92.6555633544922,18.4428885579109,-9.47574898600578,95.1604962348938,19.2507684230804,-27.6224136352539,90.6805396080017,9.04506295919418,-19.2507565021515,95.1605021953583,9.47574973106384,-9.90133136510849,97.9986190795898,9.90133285522461,35.4520946741104,-74.9313473701477,24.916099011898,38.6255323886871,-76.4557242393494,17.5340935587883,40.6652748584747,-77.637654542923,9.04506072402,38.6255383491516,-67.549329996109,26.4404803514481,42.6402986049652,-68.4581518173218,18.442890048027,45.1452434062958,-69.2660212516785,9.47574898600578,40.6652718782425,-59.0603172779083,27.6224046945572,45.145246386528,-59.4909906387329,19.2507609724998,47.9833543300629,-59.9165856838226,9.90133285522461,35.4520946741104,-74.9584257602692,-24.9160900712013,38.6255383491516,-67.5764083862305,-26.4404714107513,40.6652718782425,-59.0873956680298,-27.6223957538605,38.6255323886871,-76.4828026294708,-17.5340846180916,42.6402986049652,-68.4852302074432,-18.4428781270981,45.145246386528,-59.5180690288544,-19.250750541687,40.6652748584747,-77.6647329330444,-9.04504880309105,45.1452434062958,-69.2930996417999,-9.47573706507683,47.9833543300629,-59.9436640739441,-9.90132018923759,35.4520857334137,74.9313652515411,-24.9160900712013,38.6255323886871,76.4557421207428,-17.5340846180916,40.6652748584747,77.6376724243164,-9.04504880309105,38.6255323886871,67.5493597984314,-26.4404714107513,42.6402986049652,68.4581577777863,-18.4428781270981,45.145246386528,69.2660272121429,-9.47573706507683,40.6652808189392,59.0603113174438,-27.622401714325,45.145246386528,59.4910085201263,-19.250750541687,47.9833543300629,59.9165916442871,-9.90132018923759,35.4520857334137,74.9313652515411,24.916099011898,38.6255323886871,67.5493597984314,26.4404803514481,40.6652808189392,59.0603113174438,27.6224076747894,38.6255323886871,76.4557421207428,17.5340935587883,42.6402986049652,68.4581518173218,18.4428885579109,45.145246386528,59.4910085201263,19.2507609724998, +40.6652808189392,77.6376605033875,9.04506295919418,45.145246386528,69.2660272121429,9.47574898600578,47.9833543300629,59.9165916442871,9.90133285522461,24.9160975217819,-74.9584317207336,-35.4520916938782,17.5340861082077,-76.4828085899353,-38.6255204677582,9.04504954814911,-77.6647329330444,-40.6652718782425,26.4404773712158,-67.5764083862305,-38.6255204677582,18.4428796172142,-68.4852302074432,-42.640295624733,9.47573259472847,-69.293087720871,-45.1452434062958,27.6223987340927,-59.0873956680298,-40.6652718782425,19.2507535219193,-59.5180749893188,-45.1452434062958,9.90131944417953,-59.9436581134796,-47.9833453893661,-24.9160900712013,-74.9584257602692,-35.4520857334137,-26.4404714107513,-67.5764083862305,-38.6255204677582,-27.6224046945572,-59.0873956680298,-40.6652718782425,-17.5340935587883,-76.4828085899353,-38.6255204677582,-18.4428960084915,-68.4852302074432,-42.640295624733,-19.2507579922676,-59.5180690288544,-45.1452434062958,-9.0450644493103,-77.66472697258,-40.6652718782425,-9.47575196623802,-69.2930996417999,-45.1452434062958,-9.90133434534073,-59.9436581134796,-47.9833453893661,-24.9161005020142,74.9313652515411,-35.4520916938782,-17.5340965390205,76.4557421207428,-38.6255204677582,-9.04505327343941,77.6376724243164,-40.6652718782425,-26.4404833316803,67.5493597984314,-38.6255204677582,-18.4428885579109,68.4581577777863,-42.6402896642685,-9.47574749588966,69.2660272121429,-45.1452434062958,-27.6224136352539,59.0603232383728,-40.6652718782425,-19.2507565021515,59.4910085201263,-45.1452434062958,-9.90132689476013,59.9165916442871,-47.9833453893661,24.9160900712013,74.9313592910767,-35.4520916938782,26.4404743909836,67.5493597984314,-38.6255204677582,27.6223987340927,59.0603172779083,-40.6652718782425,17.5340861082077,76.4557421207428,-38.6255204677582,18.4428840875626,68.4581518173218,-42.6402896642685,19.2507550120354,59.4910085201263,-45.1452434062958,9.04505699872971,77.637654542923,-40.6652718782425,9.47574004530907,69.2660272121429,-45.1452434062958,9.90132689476013,59.9165916442871,-47.9833453893661, +-35.4520916938782,-74.9584257602692,-24.9160900712013,-38.6255174875259,-76.4828085899353,-17.5340846180916,-40.6652599573135,-77.6647329330444,-9.04504880309105,-38.6255174875259,-67.5764083862305,-26.4404714107513,-42.6402896642685,-68.4852302074432,-18.4428781270981,-45.1452314853668,-69.2930996417999,-9.47573706507683,-40.6652599573135,-59.0873956680298,-27.6223957538605,-45.1452314853668,-59.5180749893188,-19.250750541687,-47.9833453893661,-59.9436640739441,-9.90132018923759,-35.4520916938782,-74.9313473701477,24.916099011898,-38.6255174875259,-67.549329996109,26.4404803514481,-40.6652599573135,-59.0603172779083,27.6224046945572,-38.6255174875259,-76.4557301998138,17.5340935587883,-42.6402896642685,-68.4581518173218,18.442890048027,-45.1452314853668,-59.4909965991974,19.2507609724998,-40.6652599573135,-77.637654542923,9.04506072402,-45.1452314853668,-69.2660212516785,9.47574898600578,-47.9833453893661,-59.9165856838226,9.90133285522461,-35.4521006345749,74.9313652515411,24.916099011898,-38.6255174875259,76.4557301998138,17.5340935587883,-40.665265917778,77.6376724243164,9.04506072402,-38.6255174875259,67.5493597984314,26.4404803514481,-42.6402896642685,68.4581577777863,18.4428885579109,-45.1452404260635,69.2660272121429,9.47574898600578,-40.665265917778,59.0603232383728,27.6224076747894,-45.1452404260635,59.4910085201263,19.2507609724998,-47.9833453893661,59.9165916442871,9.90133285522461,-35.4521006345749,74.9313652515411,-24.9160900712013,-38.6255174875259,67.5493597984314,-26.4404714107513,-40.665265917778,59.0603232383728,-27.622401714325,-38.6255174875259,76.4557301998138,-17.5340846180916,-42.6402896642685,68.4581518173218,-18.4428781270981,-45.1452404260635,59.4910085201263,-19.250750541687,-40.665265917778,77.6376605033875,-9.04505103826523,-45.1452404260635,69.2660272121429,-9.47573706507683,-47.9833453893661,59.9165916442871,-9.90132018923759,-24.9161005020142,-74.9313473701477,35.4520946741104,-17.5340935587883,-76.4557301998138,38.6255323886871,-9.0450644493103,-77.6376485824585,40.6652629375458,-26.4404714107513,-67.549329996109,38.6255323886871, +-18.4428960084915,-68.4581518173218,42.640295624733,-9.47575196623802,-69.2660212516785,45.1452374458313,-27.6224046945572,-59.0603172779083,40.6652629375458,-19.2507579922676,-59.4909906387329,45.1452374458313,-9.90133434534073,-59.9165797233582,47.9833543300629,24.9160975217819,-74.9313473701477,35.4520916938782,26.4404773712158,-67.549329996109,38.6255323886871,27.6223987340927,-59.0603172779083,40.6652629375458,17.5340861082077,-76.4557301998138,38.6255323886871,18.4428796172142,-68.4581518173218,42.640295624733,19.2507535219193,-59.4909965991974,45.1452374458313,9.04504954814911,-77.637654542923,40.6652629375458,9.47573259472847,-69.266015291214,45.1452374458313,9.90131944417953,-59.9165797233582,47.9833543300629,24.9160900712013,74.9313592910767,35.4520946741104,17.5340861082077,76.4557421207428,38.6255323886871,9.04505625367165,77.6376605033875,40.6652718782425,26.4404743909836,67.5493597984314,38.6255323886871,18.4428796172142,68.4581577777863,42.640295624733,9.47573930025101,69.2660272121429,45.1452434062958,27.6223987340927,59.0603172779083,40.6652718782425,19.2507550120354,59.4910085201263,45.1452434062958,9.90132614970207,59.9165916442871,47.9833543300629,-24.9161005020142,74.9313652515411,35.4520946741104,-26.4404833316803,67.5493597984314,38.6255323886871,-27.6224136352539,59.0603232383728,40.6652718782425,-17.5340965390205,76.4557421207428,38.6255323886871,-18.4428885579109,68.4581518173218,42.640295624733,-19.2507565021515,59.4910085201263,45.1452434062958,-9.04506221413612,77.6376605033875,40.6652718782425,-9.47574898600578,69.2660272121429,45.1452434062958,-9.90132763981819,59.9165916442871,47.9833543300629,50,-50.0152587890625,5.55979084992941e-06,-2.22391669524313e-06,-50.042337179184,-50,-50,-50.0152587890625,2.69876814229519e-06,-2.22391669524313e-06,-50.0152587890625,50,35.3445500135422,-50.042337179184,-35.3445470333099,35.3445500135422,-50.0152587890625,35.3445500135422,-35.3445500135422,-50.042337179184,-35.3445470333099,-35.3445500135422,-50.0152587890625,35.3445500135422,41.3453131914139,-50.042337179184,-28.0898422002792, +45.9764242172241,-50.042337179184,-19.6122944355011,48.9524304866791,-50.042337179184,-10.1061373949051,41.3453131914139,-50.0152587890625,28.0898541212082,45.9764242172241,-50.0152587890625,19.6123048663139,48.9524304866791,-50.0152587890625,10.1061478257179,-28.0898571014404,-50.042337179184,-41.3453221321106,-19.6123003959656,-50.042337179184,-45.9764271974564,-10.1061530411243,-50.042337179184,-48.9524364471436,28.0898481607437,-50.042337179184,-41.3453221321106,19.6122989058495,-50.042337179184,-45.9764271974564,10.1061344146729,-50.042337179184,-48.9524364471436,-41.3453161716461,-50.0152587890625,28.0898541212082,-45.9764271974564,-50.0152587890625,19.6123048663139,-48.9524364471436,-50.0152587890625,10.1061478257179,-41.3453161716461,-50.042337179184,-28.0898422002792,-45.9764271974564,-50.042337179184,-19.6122944355011,-48.9524364471436,-50.042337179184,-10.1061373949051,28.0898481607437,-50.0152587890625,41.3453221321106,19.6122989058495,-50.0152587890625,45.9764391183853,10.1061344146729,-50.0152587890625,48.9524304866791,-28.0898571014404,-50.0152587890625,41.3453221321106,-19.6123003959656,-50.0152587890625,45.9764391183853,-10.1061530411243,-50.0152587890625,48.9524304866791 + } + PolygonVertexIndex: *2496 { + a: 178,8,-110,177,178,-110,174,178,-178,174,175,-179,175,100,-179,178,100,-9,177,109,-109,173,174,-178,176,177,-109,173,177,-177,171,175,-175,170,174,-174,170,171,-175,48,173,-177,47,173,-49,47,170,-174,0,170,-48,0,26,-171,26,171,-171,48,176,-50,26,27,-172,49,176,-108,176,108,-108,49,107,-18,27,172,-172,171,172,-176,27,28,-173,199,17,-108,199,46,-18,202,107,-109,202,199,-108,172,99,-176,175,99,-101,28,98,-173,172,98,-100,28,14,-99,198,46,-200,198,45,-47,14,185,-99,14,31,-186,98,186,-100,98,185,-187,99,187,-101,99,186,-188,31,182,-186,31,30,-183,100,187,-104,100,103,-9,187,102,-104,187,184,-103,186,184,-188,184,101,-103,185,183,-187,186,183,-185,185,182,-184,184,181,-102,183,181,-185,181,15,-102,181,34,-16,183,180,-182,180,34,-182,182,180,-184,180,33,-35,182,179,-181,179,33,-181,30,179,-183,179,32,-34,30,29,-180,29,32,-180,29,2,-33,37,101,-16,37,194,-102,36,194,-38,194,102,-102,36,191,-195,35,191,-37,194,195,-103,191,195,-195,195,103,-103,35,188,-192,3,188,-36,3,38,-189,191,192,-196,188,192,-192,195,196,-104,192,196,-196,196,8,-104,38,189,-189,188,189,-193,38,39,-190,192,193,-197,189,193,-193,39,190,-190,189,190,-194,39,40,-191,193,106,-197,196,106,-9,40,104,-191,40,16,-105,190,105,-194,193,105,-107,190,104,-106,16,203,-105,16,43,-204,104,204,-106,104,203,-205,105,205,-107,105,204,-206,43,200,-204,43,42,-201,106,205,-110,106,109,-9,205,108,-110,205,202,-109,204,202,-206,203,201,-205,204,201,-203,203,200,-202,201,199,-203,201,198,-200,200,198,-202,42,197,-201,200,197,-199,197,45,-199,42,41,-198,197,44,-46,41,44,-198,41,1,-45,214,9,-122,213,214,-122,210,214,-214,210,211,-215,211,112,-215,214,112,-10,213,121,-121,209,210,-214,212,213,-121,209,213,-213,207,211,-211,206,210,-210,206,207,-211,72,209,-213,71,209,-73,71,206,-210,4,206,-72,4,50,-207,50,207,-207,72,212,-74,50,51,-208,73,212,-120,212,120,-120,73,119,-22,51,208,-208,207,208,-212,51,52,-209,235,21,-120,235,70,-22,238,119,-121,238,235,-120,208,111,-212,211,111,-113,52,110,-209,208,110,-112,52,18,-111,234,70,-236,234,69,-71,18,221,-111,18,55,-222, +110,222,-112,110,221,-223,111,223,-113,111,222,-224,55,218,-222,55,54,-219,221,219,-223,221,218,-220,54,215,-219,54,53,-216,53,56,-216,53,5,-57,215,56,-58,218,215,-217,215,57,-217,218,216,-220,216,57,-59,216,58,-218,219,216,-218,217,58,-20,222,219,-221,219,217,-221,222,220,-224,217,19,-114,220,217,-114,61,113,-20,223,220,-115,220,113,-115,61,230,-114,230,114,-114,60,230,-62,223,114,-116,112,223,-116,112,115,-10,60,227,-231,59,227,-61,230,231,-115,231,115,-115,227,231,-231,59,224,-228,7,224,-60,7,62,-225,231,232,-116,232,9,-116,227,228,-232,224,228,-228,228,232,-232,62,225,-225,224,225,-229,62,63,-226,228,229,-233,225,229,-229,63,226,-226,225,226,-230,63,64,-227,229,118,-233,232,118,-10,229,117,-119,226,117,-230,226,116,-118,64,116,-227,64,20,-117,65,6,-69,65,68,-234,233,68,-70,66,65,-234,233,69,-235,66,233,-237,236,233,-235,67,66,-237,236,234,-238,237,234,-236,237,235,-239,67,236,-240,239,236,-238,20,67,-240,20,239,-117,239,237,-241,116,239,-241,240,237,-239,116,240,-118,240,238,-242,117,240,-242,241,238,-121,117,241,-119,241,120,-122,118,241,-122,118,121,-10,44,1,-75,44,74,-252,45,44,-252,251,74,-76,45,251,-255,46,45,-255,251,75,-253,254,251,-253,252,75,-77,46,254,-258,17,46,-258,252,76,-254,253,76,-391,254,252,-256,257,254,-256,255,252,-254,17,257,-123,49,17,-123,253,390,-395,22,394,-391,255,253,-257,256,253,-395,257,255,-259,122,257,-259,258,255,-257,49,122,-245,48,49,-245,22,125,-395,79,125,-23,122,258,-124,244,122,-124,256,394,-396,125,395,-395,258,256,-260,123,258,-260,259,256,-396,48,244,-244,47,48,-244,79,266,-126,78,266,-80,244,123,-248,243,244,-248,123,259,-125,247,123,-125,259,395,-397,124,259,-397,125,126,-396,266,126,-126,126,396,-396,47,243,-243,0,47,-243,0,242,-84,243,247,-247,242,243,-247,83,242,-246,242,246,-246,83,245,-85,247,124,-251,246,247,-251,124,396,-387,250,124,-387,126,127,-397,127,386,-397,84,245,-249,84,248,-86,245,246,-250,246,250,-250,245,249,-249,250,386,-400,249,250,-400,85,248,-398,85,397,-392,248,249,-399,249,399,-399,248,398,-398,10,399,-387,127,10,-387,267,127,-127,266,267,-127, +131,391,-398,131,23,-392,133,398,-400,10,133,-400,132,397,-399,132,131,-398,133,132,-399,268,10,-128,267,268,-128,263,267,-267,78,263,-267,77,263,-79,271,23,-132,271,82,-24,130,133,-11,268,130,-11,274,131,-133,274,271,-132,277,132,-134,130,277,-134,277,274,-133,263,264,-268,264,268,-268,77,260,-264,260,264,-264,5,260,-78,5,53,-261,53,261,-261,260,261,-265,53,54,-262,264,265,-269,265,130,-269,261,265,-265,54,262,-262,261,262,-266,54,55,-263,265,129,-131,262,129,-266,129,277,-131,55,128,-263,262,128,-130,55,18,-129,129,276,-278,128,276,-130,276,274,-278,18,275,-129,128,275,-277,18,52,-276,276,273,-275,275,273,-277,273,271,-275,52,272,-276,275,272,-274,52,51,-273,273,270,-272,272,270,-274,270,82,-272,270,81,-83,51,269,-273,272,269,-271,269,81,-271,51,50,-270,269,80,-82,50,80,-270,50,4,-81,38,3,-87,38,86,-288,39,38,-288,287,86,-88,39,287,-291,40,39,-291,287,87,-289,290,287,-289,288,87,-89,40,290,-294,16,40,-294,288,88,-290,289,88,-393,290,288,-292,293,290,-292,291,288,-290,16,293,-135,43,16,-135,289,392,-401,24,400,-393,291,289,-293,292,289,-401,293,291,-295,134,293,-295,294,291,-293,43,134,-281,42,43,-281,24,137,-401,91,137,-25,134,294,-136,280,134,-136,292,400,-402,137,401,-401,294,292,-296,135,294,-296,295,292,-402,42,280,-280,41,42,-280,91,302,-138,90,302,-92,280,135,-284,279,280,-284,135,295,-137,283,135,-137,295,401,-403,136,295,-403,137,138,-402,302,138,-138,138,402,-402,41,279,-279,1,41,-279,1,278,-75,279,283,-283,278,279,-283,74,278,-282,278,282,-282,74,281,-76,283,136,-287,282,283,-287,136,402,-388,286,136,-388,138,139,-403,139,387,-403,75,281,-285,75,284,-77,281,282,-286,282,286,-286,281,285,-285,286,387,-406,285,286,-406,76,284,-404,76,403,-391,284,285,-405,285,405,-405,284,404,-404,11,405,-388,139,11,-388,303,139,-139,302,303,-139,143,390,-404,143,22,-391,145,404,-406,11,145,-406,144,403,-405,144,143,-404,145,144,-405,304,11,-140,303,304,-140,299,303,-303,90,299,-303,89,299,-91,307,22,-144,307,79,-23,142,145,-12,304,142,-12,310,143,-145,310,307,-144,313,144,-146,142,313,-146,313,310,-145,299,300,-304,300, +304,-304,89,296,-300,296,300,-300,7,296,-90,7,59,-297,59,297,-297,296,297,-301,59,60,-298,300,301,-305,301,142,-305,297,301,-301,60,298,-298,297,298,-302,60,61,-299,301,141,-143,298,141,-302,141,313,-143,61,140,-299,298,140,-142,61,19,-141,141,312,-314,140,312,-142,312,310,-314,19,311,-141,140,311,-313,19,58,-312,312,309,-311,311,309,-313,309,307,-311,58,308,-312,311,308,-310,58,57,-309,309,306,-308,308,306,-310,306,79,-308,306,78,-80,57,305,-309,308,305,-307,305,78,-307,57,56,-306,305,77,-79,56,77,-306,56,5,-78,37,15,-147,37,146,-317,36,37,-317,316,146,-148,36,316,-316,35,36,-316,316,147,-320,315,316,-320,319,147,-149,35,315,-315,3,35,-315,3,314,-87,315,319,-319,314,315,-319,319,148,-323,318,319,-323,322,148,-389,86,314,-318,314,318,-318,86,317,-88,318,322,-322,317,318,-322,322,388,-412,321,322,-412,12,411,-389,87,317,-321,317,321,-321,87,320,-89,12,157,-412,154,157,-13,321,411,-411,320,321,-411,157,410,-412,88,320,-410,320,410,-410,88,409,-393,154,349,-158,153,349,-155,157,156,-411,156,409,-411,349,156,-158,155,392,-410,156,155,-410,155,24,-393,153,348,-350,152,348,-154,349,346,-157,346,155,-157,348,346,-350,343,24,-156,346,343,-156,343,91,-25,152,347,-349,20,347,-153,20,64,-348,348,345,-347,345,343,-347,347,345,-349,342,91,-344,345,342,-344,342,90,-92,64,344,-348,347,344,-346,344,342,-346,64,63,-345,341,90,-343,344,341,-343,63,341,-345,341,89,-91,63,62,-342,62,89,-342,62,7,-90,32,2,-93,32,92,-324,33,32,-324,323,92,-94,33,323,-327,34,33,-327,323,93,-325,326,323,-325,324,93,-95,34,326,-330,15,34,-330,15,329,-147,324,94,-326,325,94,-394,326,324,-328,329,326,-328,327,324,-326,146,329,-331,329,327,-331,146,330,-148,325,393,-407,25,406,-394,327,325,-329,330,327,-329,328,325,-407,147,330,-332,330,328,-332,147,331,-149,25,149,-407,97,149,-26,328,406,-408,331,328,-408,149,407,-407,148,331,-409,331,407,-409,148,408,-389,97,338,-150,96,338,-98,149,150,-408,150,408,-408,338,150,-150,151,388,-409,150,151,-409,151,12,-389,96,335,-339,95,335,-97,338,339,-151,339,151,-151,335,339,-339,340,12,-152,339,340,-152,340,154,-13,95,332, +-336,6,332,-96,6,65,-333,335,336,-340,336,340,-340,332,336,-336,337,154,-341,336,337,-341,337,153,-155,65,333,-333,332,333,-337,333,337,-337,65,66,-334,334,153,-338,333,334,-338,66,334,-334,334,152,-154,66,67,-335,67,152,-335,67,20,-153,26,0,-84,26,83,-360,27,26,-360,359,83,-85,27,359,-363,28,27,-363,359,84,-361,362,359,-361,360,84,-86,28,362,-366,14,28,-366,360,85,-362,361,85,-392,362,360,-364,365,362,-364,363,360,-362,14,365,-159,31,14,-159,361,391,-413,23,412,-392,363,361,-365,364,361,-413,365,363,-367,158,365,-367,366,363,-365,31,158,-353,30,31,-353,23,161,-413,82,161,-24,158,366,-160,352,158,-160,364,412,-414,161,413,-413,366,364,-368,159,366,-368,367,364,-414,30,352,-352,29,30,-352,82,374,-162,81,374,-83,352,159,-356,351,352,-356,159,367,-161,355,159,-161,367,413,-415,160,367,-415,161,162,-414,374,162,-162,162,414,-414,29,351,-351,2,29,-351,2,350,-93,351,355,-355,350,351,-355,92,350,-354,350,354,-354,92,353,-94,355,160,-359,354,355,-359,160,414,-390,358,160,-390,162,163,-415,163,389,-415,93,353,-357,93,356,-95,353,354,-358,354,358,-358,353,357,-357,358,389,-418,357,358,-418,94,356,-416,94,415,-394,356,357,-417,357,417,-417,356,416,-416,13,417,-390,163,13,-390,375,163,-163,374,375,-163,167,393,-416,167,25,-394,169,416,-418,13,169,-418,168,415,-417,168,167,-416,169,168,-417,376,13,-164,375,376,-164,371,375,-375,81,371,-375,80,371,-82,379,25,-168,379,97,-26,166,169,-14,376,166,-14,382,167,-169,382,379,-168,385,168,-170,166,385,-170,385,382,-169,371,372,-376,372,376,-376,80,368,-372,368,372,-372,4,368,-81,4,71,-369,71,369,-369,368,369,-373,71,72,-370,372,373,-377,373,166,-377,369,373,-373,72,370,-370,369,370,-374,72,73,-371,373,165,-167,370,165,-374,165,385,-167,73,164,-371,370,164,-166,73,21,-165,165,384,-386,164,384,-166,384,382,-386,21,383,-165,164,383,-385,21,70,-384,384,381,-383,383,381,-385,381,379,-383,70,380,-384,383,380,-382,70,69,-381,381,378,-380,380,378,-382,378,97,-380,378,96,-98,69,377,-381,380,377,-379,377,96,-379,69,68,-378,377,95,-97,68,95,-378,68,6,-96 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *7488 { + a: 0.196468442678452,-0.960624933242798,0.196468368172646,-0,-0.999999165534973,0.0013401482719928,0.199606508016586,-0.979875206947327,0.00133452040608972,0.382818400859833,-0.904340386390686,0.188728466629982,0.196468442678452,-0.960624933242798,0.196468368172646,0.199606508016586,-0.979875206947327,0.00133452040608972,0.367015421390533,-0.85475105047226,0.367015361785889,0.196468442678452,-0.960624933242798,0.196468368172646,0.382818400859833,-0.904340386390686,0.188728466629982,0.367015421390533,-0.85475105047226,0.367015361785889,0.188728407025337,-0.904340386390686,0.382818669080734,0.196468442678452,-0.960624933242798,0.196468368172646,0.188728407025337,-0.904340386390686,0.382818669080734,-0,-0.979871809482574,0.199627742171288,0.196468442678452,-0.960624933242798,0.196468368172646,0.196468442678452,-0.960624933242798,0.196468368172646,-0,-0.979871809482574,0.199627742171288,-0,-0.999999165534973,0.0013401482719928,0.382818400859833,-0.904340386390686,0.188728466629982,0.199606508016586,-0.979875206947327,0.00133452040608972,0.388948500156403,-0.921258509159088,0.00130435940809548,0.527258932590485,-0.77461713552475,0.349236756563187,0.367015421390533,-0.85475105047226,0.367015361785889,0.382818400859833,-0.904340386390686,0.188728466629982,0.550848662853241,-0.814844906330109,0.180537268519402,0.382818400859833,-0.904340386390686,0.188728466629982,0.388948500156403,-0.921258509159088,0.00130435940809548,0.527258932590485,-0.77461713552475,0.349236756563187,0.382818400859833,-0.904340386390686,0.188728466629982,0.550848662853241,-0.814844906330109,0.180537268519402,0.349236577749252,-0.77461701631546,0.527259349822998,0.188728407025337,-0.904340386390686,0.382818669080734,0.367015421390533,-0.85475105047226,0.367015361785889,0.496357381343842,-0.712220847606659,0.496357530355453,0.367015421390533,-0.85475105047226,0.367015361785889,0.527258932590485,-0.77461713552475,0.349236756563187,0.496357381343842,-0.712220847606659,0.496357530355453,0.349236577749252,-0.77461701631546,0.527259349822998, +0.367015421390533,-0.85475105047226,0.367015361785889,0.66469931602478,-0.664699375629425,0.341100484132767,0.527258932590485,-0.77461713552475,0.349236756563187,0.550848662853241,-0.814844906330109,0.180537268519402,0.620109975337982,-0.620109856128693,0.48054912686348,0.527258932590485,-0.77461713552475,0.349236756563187,0.66469931602478,-0.664699375629425,0.341100484132767,0.620109975337982,-0.620109856128693,0.48054912686348,0.496357381343842,-0.712220847606659,0.496357530355453,0.527258932590485,-0.77461713552475,0.349236756563187,0.577350378036499,-0.577349960803986,0.577350437641144,0.496357381343842,-0.712220847606659,0.496357530355453,0.620109975337982,-0.620109856128693,0.48054912686348,0.577350378036499,-0.577349960803986,0.577350437641144,0.480548977851868,-0.620109796524048,0.620110154151917,0.496357381343842,-0.712220847606659,0.496357530355453,0.480548977851868,-0.620109796524048,0.620110154151917,0.349236577749252,-0.77461701631546,0.527259349822998,0.496357381343842,-0.712220847606659,0.496357530355453,0.66469931602478,-0.664699375629425,0.341100484132767,0.550848662853241,-0.814844906330109,0.180537268519402,0.695951879024506,-0.695951282978058,0.176925674080849,0.480548977851868,-0.620109796524048,0.620110154151917,0.341100066900253,-0.664699375629425,0.664699614048004,0.349236577749252,-0.77461701631546,0.527259349822998,0.695951879024506,-0.695951282978058,0.176925674080849,0.550848662853241,-0.814844906330109,0.180537268519402,0.559593260288239,-0.828766524791718,0.00122217321768403,0.550848662853241,-0.814844906330109,0.180537268519402,0.388948500156403,-0.921258509159088,0.00130435940809548,0.559593260288239,-0.828766524791718,0.00122217321768403,0.695951879024506,-0.695951282978058,0.176925674080849,0.559593260288239,-0.828766524791718,0.00122217321768403,0.70710551738739,-0.707107186317444,0.00106279889587313,0.341100066900253,-0.664699375629425,0.664699614048004,0.180536970496178,-0.81484466791153,0.55084902048111,0.349236577749252,-0.77461701631546,0.527259349822998,0.349236577749252,-0.77461701631546,0.527259349822998, +0.180536970496178,-0.81484466791153,0.55084902048111,0.188728407025337,-0.904340386390686,0.382818669080734,0.341100066900253,-0.664699375629425,0.664699614048004,0.17692556977272,-0.695951223373413,0.695951998233795,0.180536970496178,-0.81484466791153,0.55084902048111,0.55095362663269,-0.815039157867432,-0.179335504770279,0.70710551738739,-0.707107186317444,0.00106279889587313,0.559593260288239,-0.828766524791718,0.00122217321768403,0.55095362663269,-0.815039157867432,-0.179335504770279,0.696083009243011,-0.696085274219513,-0.175880089402199,0.70710551738739,-0.707107186317444,0.00106279889587313,0.382886976003647,-0.904577732086182,-0.187447816133499,0.559593260288239,-0.828766524791718,0.00122217321768403,0.388948500156403,-0.921258509159088,0.00130435940809548,0.382886976003647,-0.904577732086182,-0.187447816133499,0.55095362663269,-0.815039157867432,-0.179335504770279,0.559593260288239,-0.828766524791718,0.00122217321768403,0.180536970496178,-0.81484466791153,0.55084902048111,-0,-0.921247780323029,0.388976186513901,0.188728407025337,-0.904340386390686,0.382818669080734,0.188728407025337,-0.904340386390686,0.382818669080734,-0,-0.921247780323029,0.388976186513901,-0,-0.979871809482574,0.199627742171288,0.17692556977272,-0.695951223373413,0.695951998233795,-0,-0.828754723072052,0.559612095355988,0.180536970496178,-0.81484466791153,0.55084902048111,0.180536970496178,-0.81484466791153,0.55084902048111,-0,-0.828754723072052,0.559612095355988,-0,-0.921247780323029,0.388976186513901,0.17692556977272,-0.695951223373413,0.695951998233795,-0,-0.707106113433838,0.707107424736023,-0,-0.828754723072052,0.559612095355988,0.527258932590485,-0.77461713552475,-0.349236667156219,0.696083009243011,-0.696085274219513,-0.175880089402199,0.55095362663269,-0.815039157867432,-0.179335504770279,0.527258932590485,-0.77461713552475,-0.349236667156219,0.66469931602478,-0.664699375629425,-0.341100364923477,0.696083009243011,-0.696085274219513,-0.175880089402199,-0,-0.707106113433838,0.707107424736023,-0.18053662776947,-0.814844489097595,0.550849318504333, +-0,-0.828754723072052,0.559612095355988,-0,-0.707106113433838,0.707107424736023,-0.176925629377365,-0.695951282978058,0.695951998233795,-0.18053662776947,-0.814844489097595,0.550849318504333,-0,-0.828754723072052,0.559612095355988,-0.188727796077728,-0.904340505599976,0.382818609476089,-0,-0.921247780323029,0.388976186513901,-0,-0.828754723072052,0.559612095355988,-0.18053662776947,-0.814844489097595,0.550849318504333,-0.188727796077728,-0.904340505599976,0.382818609476089,-0,-0.921247780323029,0.388976186513901,-0.196468308568001,-0.960624992847443,0.196468010544777,-0,-0.979871809482574,0.199627742171288,-0,-0.921247780323029,0.388976186513901,-0.188727796077728,-0.904340505599976,0.382818609476089,-0.196468308568001,-0.960624992847443,0.196468010544777,-0.176925629377365,-0.695951282978058,0.695951998233795,-0.349236667156219,-0.774616479873657,0.527259945869446,-0.18053662776947,-0.814844489097595,0.550849318504333,-0.176925629377365,-0.695951282978058,0.695951998233795,-0.341100245714188,-0.664699375629425,0.66469943523407,-0.349236667156219,-0.774616479873657,0.527259945869446,-0,-0.979871809482574,0.199627742171288,-0.196468308568001,-0.960624992847443,0.196468010544777,-0.19960680603981,-0.979875147342682,0.00133452052250504,-0,-0.979871809482574,0.199627742171288,-0.19960680603981,-0.979875147342682,0.00133452052250504,-0,-0.999999165534973,0.0013401482719928,-0.196468308568001,-0.960624992847443,0.196468010544777,-0.388948529958725,-0.921258509159088,0.00130436115432531,-0.19960680603981,-0.979875147342682,0.00133452052250504,-0.196468308568001,-0.960624992847443,0.196468010544777,-0.382818520069122,-0.90434056520462,0.188727647066116,-0.388948529958725,-0.921258509159088,0.00130436115432531,-0.188727796077728,-0.904340505599976,0.382818609476089,-0.382818520069122,-0.90434056520462,0.188727647066116,-0.196468308568001,-0.960624992847443,0.196468010544777,-0.382818520069122,-0.90434056520462,0.188727647066116,-0.559593260288239,-0.828766524791718,0.00122217531315982,-0.388948529958725,-0.921258509159088,0.00130436115432531, +-0.18053662776947,-0.814844489097595,0.550849318504333,-0.367015510797501,-0.85475105047226,0.367015361785889,-0.188727796077728,-0.904340505599976,0.382818609476089,-0.188727796077728,-0.904340505599976,0.382818609476089,-0.367015510797501,-0.85475105047226,0.367015361785889,-0.382818520069122,-0.90434056520462,0.188727647066116,-0.18053662776947,-0.814844489097595,0.550849318504333,-0.349236667156219,-0.774616479873657,0.527259945869446,-0.367015510797501,-0.85475105047226,0.367015361785889,-0.382818520069122,-0.90434056520462,0.188727647066116,-0.550849080085754,-0.81484454870224,0.180536821484566,-0.559593260288239,-0.828766524791718,0.00122217531315982,-0.367015510797501,-0.85475105047226,0.367015361785889,-0.550849080085754,-0.81484454870224,0.180536821484566,-0.382818520069122,-0.90434056520462,0.188727647066116,-0.550849080085754,-0.81484454870224,0.180536821484566,-0.707105457782745,-0.707107245922089,0.00106279528699815,-0.559593260288239,-0.828766524791718,0.00122217531315982,-0.550849080085754,-0.81484454870224,0.180536821484566,-0.69595205783844,-0.695951044559479,0.176926121115685,-0.707105457782745,-0.707107245922089,0.00106279528699815,-0.367015510797501,-0.85475105047226,0.367015361785889,-0.527259767055511,-0.774616658687592,0.349236607551575,-0.550849080085754,-0.81484454870224,0.180536821484566,-0.527259767055511,-0.774616658687592,0.349236607551575,-0.69595205783844,-0.695951044559479,0.176926121115685,-0.550849080085754,-0.81484454870224,0.180536821484566,-0.349236667156219,-0.774616479873657,0.527259945869446,-0.527259767055511,-0.774616658687592,0.349236607551575,-0.367015510797501,-0.85475105047226,0.367015361785889,-0.527259767055511,-0.774616658687592,0.349236607551575,-0.664699673652649,-0.664699137210846,0.341100215911865,-0.69595205783844,-0.695951044559479,0.176926121115685,-0.349236667156219,-0.774616479873657,0.527259945869446,-0.496357679367065,-0.712220430374146,0.496357679367065,-0.527259767055511,-0.774616658687592,0.349236607551575,-0.496357679367065,-0.712220430374146,0.496357679367065, +-0.664699673652649,-0.664699137210846,0.341100215911865,-0.527259767055511,-0.774616658687592,0.349236607551575,-0.341100245714188,-0.664699375629425,0.66469943523407,-0.496357679367065,-0.712220430374146,0.496357679367065,-0.349236667156219,-0.774616479873657,0.527259945869446,-0.496357679367065,-0.712220430374146,0.496357679367065,-0.620110154151917,-0.620109856128693,0.480548918247223,-0.664699673652649,-0.664699137210846,0.341100215911865,-0.341100245714188,-0.664699375629425,0.66469943523407,-0.480549067258835,-0.620109915733337,0.620109915733337,-0.496357679367065,-0.712220430374146,0.496357679367065,-0.480549067258835,-0.620109915733337,0.620109915733337,-0.620110154151917,-0.620109856128693,0.480548918247223,-0.496357679367065,-0.712220430374146,0.496357679367065,-0.480549067258835,-0.620109915733337,0.620109915733337,-0.577350318431854,-0.577350199222565,0.577350378036499,-0.620110154151917,-0.620109856128693,0.480548918247223,-0.696083128452301,-0.696085035800934,-0.175880461931229,-0.559593260288239,-0.828766524791718,0.00122217531315982,-0.707105457782745,-0.707107245922089,0.00106279528699815,-0.696083128452301,-0.696085035800934,-0.175880461931229,-0.550953984260559,-0.815038979053497,-0.179335057735443,-0.559593260288239,-0.828766524791718,0.00122217531315982,-0.664699673652649,-0.664699137210846,-0.341100126504898,-0.550953984260559,-0.815038979053497,-0.179335057735443,-0.696083128452301,-0.696085035800934,-0.175880461931229,-0.550953984260559,-0.815038979053497,-0.179335057735443,-0.388948529958725,-0.921258509159088,0.00130436115432531,-0.559593260288239,-0.828766524791718,0.00122217531315982,-0.664699673652649,-0.664699137210846,-0.341100126504898,-0.527259767055511,-0.774616658687592,-0.349236577749252,-0.550953984260559,-0.815038979053497,-0.179335057735443,-0.620110154151917,-0.620109975337982,-0.480548769235611,-0.527259767055511,-0.774616658687592,-0.349236577749252,-0.664699673652649,-0.664699137210846,-0.341100126504898,-0.550953984260559,-0.815038979053497,-0.179335057735443,-0.382887005805969,-0.904577910900116,-0.187446981668472, +-0.388948529958725,-0.921258509159088,0.00130436115432531,-0.527259767055511,-0.774616658687592,-0.349236577749252,-0.382887005805969,-0.904577910900116,-0.187446981668472,-0.550953984260559,-0.815038979053497,-0.179335057735443,-0.382887005805969,-0.904577910900116,-0.187446981668472,-0.19960680603981,-0.979875147342682,0.00133452052250504,-0.388948529958725,-0.921258509159088,0.00130436115432531,-0.620110154151917,-0.620109975337982,-0.480548769235611,-0.496357530355453,-0.71222060918808,-0.496357589960098,-0.527259767055511,-0.774616658687592,-0.349236577749252,-0.577350258827209,-0.577350080013275,-0.577350556850433,-0.496357530355453,-0.71222060918808,-0.496357589960098,-0.620110154151917,-0.620109975337982,-0.480548769235611,-0.577350258827209,-0.577350080013275,-0.577350556850433,-0.480548888444901,-0.620109856128693,-0.620110154151917,-0.496357530355453,-0.71222060918808,-0.496357589960098,-0.527259767055511,-0.774616658687592,-0.349236577749252,-0.367015570402145,-0.85475105047226,-0.367015361785889,-0.382887005805969,-0.904577910900116,-0.187446981668472,-0.496357530355453,-0.71222060918808,-0.496357589960098,-0.367015570402145,-0.85475105047226,-0.367015361785889,-0.527259767055511,-0.774616658687592,-0.349236577749252,-0.382887005805969,-0.904577910900116,-0.187446981668472,-0.196499526500702,-0.960885345935822,-0.195159614086151,-0.19960680603981,-0.979875147342682,0.00133452052250504,-0.367015570402145,-0.85475105047226,-0.367015361785889,-0.196499526500702,-0.960885345935822,-0.195159614086151,-0.382887005805969,-0.904577910900116,-0.187446981668472,-0.196499526500702,-0.960885345935822,-0.195159614086151,-0,-0.999999165534973,0.0013401482719928,-0.19960680603981,-0.979875147342682,0.00133452052250504,-0.480548888444901,-0.620109856128693,-0.620110154151917,-0.349236726760864,-0.774616599082947,-0.527259826660156,-0.496357530355453,-0.71222060918808,-0.496357589960098,-0.496357530355453,-0.71222060918808,-0.496357589960098,-0.349236726760864,-0.774616599082947,-0.527259826660156,-0.367015570402145,-0.85475105047226,-0.367015361785889, +-0.480548888444901,-0.620109856128693,-0.620110154151917,-0.341100573539734,-0.664699375629425,-0.664699196815491,-0.349236726760864,-0.774616599082947,-0.527259826660156,-0.367015570402145,-0.85475105047226,-0.367015361785889,-0.188727825880051,-0.904340505599976,-0.382818639278412,-0.196499526500702,-0.960885345935822,-0.195159614086151,-0.349236726760864,-0.774616599082947,-0.527259826660156,-0.188727825880051,-0.904340505599976,-0.382818639278412,-0.367015570402145,-0.85475105047226,-0.367015361785889,-0.341100573539734,-0.664699375629425,-0.664699196815491,-0.180536657571793,-0.81484454870224,-0.550849080085754,-0.349236726760864,-0.774616599082947,-0.527259826660156,-0.349236726760864,-0.774616599082947,-0.527259826660156,-0.180536657571793,-0.81484454870224,-0.550849080085754,-0.188727825880051,-0.904340505599976,-0.382818639278412,-0.341100573539734,-0.664699375629425,-0.664699196815491,-0.176925823092461,-0.695951581001282,-0.695951640605927,-0.180536657571793,-0.81484454870224,-0.550849080085754,-0.188727825880051,-0.904340505599976,-0.382818639278412,-0,-0.980138421058655,-0.198314547538757,-0.196499526500702,-0.960885345935822,-0.195159614086151,-0.196499526500702,-0.960885345935822,-0.195159614086151,-0,-0.980138421058655,-0.198314547538757,-0,-0.999999165534973,0.0013401482719928,-0.176925823092461,-0.695951581001282,-0.695951640605927,-0,-0.828754782676697,-0.559611797332764,-0.180536657571793,-0.81484454870224,-0.550849080085754,-0.176925823092461,-0.695951581001282,-0.695951640605927,-0,-0.707106590270996,-0.707106947898865,-0,-0.828754782676697,-0.559611797332764,-0.180536657571793,-0.81484454870224,-0.550849080085754,-0,-0.921247780323029,-0.388976186513901,-0.188727825880051,-0.904340505599976,-0.382818639278412,-0.188727825880051,-0.904340505599976,-0.382818639278412,-0,-0.921247780323029,-0.388976186513901,-0,-0.980138421058655,-0.198314547538757,-0.180536657571793,-0.81484454870224,-0.550849080085754,-0,-0.828754782676697,-0.559611797332764,-0,-0.921247780323029,-0.388976186513901,-0,-0.707106590270996,-0.707106947898865, +0.180536985397339,-0.814844727516174,-0.550848841667175,-0,-0.828754782676697,-0.559611797332764,-0,-0.707106590270996,-0.707106947898865,0.176925808191299,-0.695951581001282,-0.695951640605927,0.180536985397339,-0.814844727516174,-0.550848841667175,-0,-0.828754782676697,-0.559611797332764,0.188728377223015,-0.904340386390686,-0.382818698883057,-0,-0.921247780323029,-0.388976186513901,-0,-0.828754782676697,-0.559611797332764,0.180536985397339,-0.814844727516174,-0.550848841667175,0.188728377223015,-0.904340386390686,-0.382818698883057,-0,-0.921247780323029,-0.388976186513901,0.19649963080883,-0.960885226726532,-0.195160016417503,-0,-0.980138421058655,-0.198314547538757,-0,-0.921247780323029,-0.388976186513901,0.188728377223015,-0.904340386390686,-0.382818698883057,0.19649963080883,-0.960885226726532,-0.195160016417503,0.176925808191299,-0.695951581001282,-0.695951640605927,0.349236518144608,-0.774617075920105,-0.527259111404419,0.180536985397339,-0.814844727516174,-0.550848841667175,0.176925808191299,-0.695951581001282,-0.695951640605927,0.341100066900253,-0.664699614048004,-0.66469931602478,0.349236518144608,-0.774617075920105,-0.527259111404419,-0,-0.980138421058655,-0.198314547538757,0.19649963080883,-0.960885226726532,-0.195160016417503,0.199606508016586,-0.979875206947327,0.00133452040608972,-0,-0.980138421058655,-0.198314547538757,0.199606508016586,-0.979875206947327,0.00133452040608972,-0,-0.999999165534973,0.0013401482719928,0.19649963080883,-0.960885226726532,-0.195160016417503,0.388948500156403,-0.921258509159088,0.00130435940809548,0.199606508016586,-0.979875206947327,0.00133452040608972,0.19649963080883,-0.960885226726532,-0.195160016417503,0.382886976003647,-0.904577732086182,-0.187447816133499,0.388948500156403,-0.921258509159088,0.00130435940809548,0.188728377223015,-0.904340386390686,-0.382818698883057,0.382886976003647,-0.904577732086182,-0.187447816133499,0.19649963080883,-0.960885226726532,-0.195160016417503,0.180536985397339,-0.814844727516174,-0.550848841667175,0.367015361785889,-0.85475105047226,-0.367015361785889, +0.188728377223015,-0.904340386390686,-0.382818698883057,0.188728377223015,-0.904340386390686,-0.382818698883057,0.367015361785889,-0.85475105047226,-0.367015361785889,0.382886976003647,-0.904577732086182,-0.187447816133499,0.180536985397339,-0.814844727516174,-0.550848841667175,0.349236518144608,-0.774617075920105,-0.527259111404419,0.367015361785889,-0.85475105047226,-0.367015361785889,0.367015361785889,-0.85475105047226,-0.367015361785889,0.55095362663269,-0.815039157867432,-0.179335504770279,0.382886976003647,-0.904577732086182,-0.187447816133499,0.367015361785889,-0.85475105047226,-0.367015361785889,0.527258932590485,-0.77461713552475,-0.349236667156219,0.55095362663269,-0.815039157867432,-0.179335504770279,0.349236518144608,-0.774617075920105,-0.527259111404419,0.527258932590485,-0.77461713552475,-0.349236667156219,0.367015361785889,-0.85475105047226,-0.367015361785889,0.341100066900253,-0.664699614048004,-0.66469931602478,0.496357291936874,-0.712220966815948,-0.496357500553131,0.349236518144608,-0.774617075920105,-0.527259111404419,0.349236518144608,-0.774617075920105,-0.527259111404419,0.496357291936874,-0.712220966815948,-0.496357500553131,0.527258932590485,-0.77461713552475,-0.349236667156219,0.496357291936874,-0.712220966815948,-0.496357500553131,0.66469931602478,-0.664699375629425,-0.341100364923477,0.527258932590485,-0.77461713552475,-0.349236667156219,0.341100066900253,-0.664699614048004,-0.66469931602478,0.480548888444901,-0.620110154151917,-0.620109856128693,0.496357291936874,-0.712220966815948,-0.496357500553131,0.496357291936874,-0.712220966815948,-0.496357500553131,0.620109975337982,-0.620109915733337,-0.480549067258835,0.66469931602478,-0.664699375629425,-0.341100364923477,0.480548888444901,-0.620110154151917,-0.620109856128693,0.620109975337982,-0.620109915733337,-0.480549067258835,0.496357291936874,-0.712220966815948,-0.496357500553131,0.480548888444901,-0.620110154151917,-0.620109856128693,0.577350497245789,-0.57735013961792,-0.577350080013275,0.620109975337982,-0.620109915733337,-0.480549067258835, +0.196468144655228,0.960625112056732,0.196467965841293,-0,1,0,-0,0.979871928691864,0.199627429246902,0.18872757256031,0.904340386390686,0.382818877696991,0.196468144655228,0.960625112056732,0.196467965841293,-0,0.979871928691864,0.199627429246902,0.367015600204468,0.85475105047226,0.367015212774277,0.196468144655228,0.960625112056732,0.196467965841293,0.18872757256031,0.904340386390686,0.382818877696991,0.367015600204468,0.85475105047226,0.367015212774277,0.382819145917892,0.904340386390686,0.188727423548698,0.196468144655228,0.960625112056732,0.196467965841293,0.382819145917892,0.904340386390686,0.188727423548698,0.199627503752708,0.979871809482574,0,0.196468144655228,0.960625112056732,0.196467965841293,0.196468144655228,0.960625112056732,0.196467965841293,0.199627503752708,0.979871809482574,0,-0,1,0,0.18872757256031,0.904340386390686,0.382818877696991,-0,0.979871928691864,0.199627429246902,-0,0.921247601509094,0.388976752758026,0.349236994981766,0.774616420269012,0.527259826660156,0.367015600204468,0.85475105047226,0.367015212774277,0.18872757256031,0.904340386390686,0.382818877696991,0.180536106228828,0.81484466791153,0.550849258899689,0.18872757256031,0.904340386390686,0.382818877696991,-0,0.921247601509094,0.388976752758026,0.349236994981766,0.774616420269012,0.527259826660156,0.18872757256031,0.904340386390686,0.382818877696991,0.180536106228828,0.81484466791153,0.550849258899689,0.527259767055511,0.774616479873657,0.349236756563187,0.382819145917892,0.904340386390686,0.188727423548698,0.367015600204468,0.85475105047226,0.367015212774277,0.496357858181,0.712220311164856,0.496357768774033,0.367015600204468,0.85475105047226,0.367015212774277,0.349236994981766,0.774616420269012,0.527259826660156,0.496357858181,0.712220311164856,0.496357768774033,0.527259767055511,0.774616479873657,0.349236756563187,0.367015600204468,0.85475105047226,0.367015212774277,0.341100752353668,0.664698898792267,0.664699733257294,0.349236994981766,0.774616420269012,0.527259826660156,0.180536106228828,0.81484466791153,0.550849258899689,0.480548918247223,0.620109736919403,0.620110154151917, +0.349236994981766,0.774616420269012,0.527259826660156,0.341100752353668,0.664698898792267,0.664699733257294,0.480548918247223,0.620109736919403,0.620110154151917,0.496357858181,0.712220311164856,0.496357768774033,0.349236994981766,0.774616420269012,0.527259826660156,0.577350378036499,0.577350258827209,0.577350199222565,0.496357858181,0.712220311164856,0.496357768774033,0.480548918247223,0.620109736919403,0.620110154151917,0.577350378036499,0.577350258827209,0.577350199222565,0.620109975337982,0.620109856128693,0.480548918247223,0.496357858181,0.712220311164856,0.496357768774033,0.620109975337982,0.620109856128693,0.480548918247223,0.527259767055511,0.774616479873657,0.349236756563187,0.496357858181,0.712220311164856,0.496357768774033,0.341100752353668,0.664698898792267,0.664699733257294,0.180536106228828,0.81484466791153,0.550849258899689,0.176925644278526,0.695951342582703,0.695951879024506,0.620109975337982,0.620109856128693,0.480548918247223,0.664699256420135,0.664699256420135,0.341100782155991,0.527259767055511,0.774616479873657,0.349236756563187,0.176925644278526,0.695951342582703,0.695951879024506,0.180536106228828,0.81484466791153,0.550849258899689,-0,0.828754782676697,0.559611797332764,0.180536106228828,0.81484466791153,0.550849258899689,-0,0.921247601509094,0.388976752758026,-0,0.828754782676697,0.559611797332764,0.176925644278526,0.695951342582703,0.695951879024506,-0,0.828754782676697,0.559611797332764,-0,0.707106649875641,0.70710688829422,0.664699256420135,0.664699256420135,0.341100782155991,0.550849139690399,0.814844787120819,0.180535987019539,0.527259767055511,0.774616479873657,0.349236756563187,0.527259767055511,0.774616479873657,0.349236756563187,0.550849139690399,0.814844787120819,0.180535987019539,0.382819145917892,0.904340386390686,0.188727423548698,0.664699256420135,0.664699256420135,0.341100782155991,0.695951402187347,0.695951879024506,0.176925510168076,0.550849139690399,0.814844787120819,0.180535987019539,-0.180535867810249,0.814844906330109,0.550849080085754,-0,0.707106649875641,0.70710688829422, +-0,0.828754782676697,0.559611797332764,-0.180535867810249,0.814844906330109,0.550849080085754,-0.176925331354141,0.695951461791992,0.695951819419861,-0,0.707106649875641,0.70710688829422,-0.188727453351021,0.904340505599976,0.382818907499313,-0,0.828754782676697,0.559611797332764,-0,0.921247601509094,0.388976752758026,-0.188727453351021,0.904340505599976,0.382818907499313,-0.180535867810249,0.814844906330109,0.550849080085754,-0,0.828754782676697,0.559611797332764,0.550849139690399,0.814844787120819,0.180535987019539,0.388976991176605,0.921247482299805,0,0.382819145917892,0.904340386390686,0.188727423548698,0.382819145917892,0.904340386390686,0.188727423548698,0.388976991176605,0.921247482299805,0,0.199627503752708,0.979871809482574,0,0.695951402187347,0.695951879024506,0.176925510168076,0.559611856937408,0.828754901885986,0,0.550849139690399,0.814844787120819,0.180535987019539,0.550849139690399,0.814844787120819,0.180535987019539,0.559611856937408,0.828754901885986,0,0.388976991176605,0.921247482299805,0,0.695951402187347,0.695951879024506,0.176925510168076,0.707106411457062,0.707107067108154,0,0.559611856937408,0.828754901885986,0,-0.349236637353897,0.774616718292236,0.527259647846222,-0.176925331354141,0.695951461791992,0.695951819419861,-0.180535867810249,0.814844906330109,0.550849080085754,-0.349236637353897,0.774616718292236,0.527259647846222,-0.341100484132767,0.664699077606201,0.664699614048004,-0.176925331354141,0.695951461791992,0.695951819419861,0.707106411457062,0.707107067108154,0,0.550849139690399,0.814844787120819,-0.180535987019539,0.559611856937408,0.828754901885986,0,0.707106411457062,0.707107067108154,0,0.695951521396637,0.695951759815216,-0.176925525069237,0.550849139690399,0.814844787120819,-0.180535987019539,0.559611856937408,0.828754901885986,0,0.382819056510925,0.904340386390686,-0.18872743844986,0.388976991176605,0.921247482299805,0,0.559611856937408,0.828754901885986,0,0.550849139690399,0.814844787120819,-0.180535987019539,0.382819056510925,0.904340386390686,-0.18872743844986,0.388976991176605,0.921247482299805,0, +0.196468159556389,0.960625112056732,-0.196467980742455,0.199627503752708,0.979871809482574,0,0.388976991176605,0.921247482299805,0,0.382819056510925,0.904340386390686,-0.18872743844986,0.196468159556389,0.960625112056732,-0.196467980742455,0.695951521396637,0.695951759815216,-0.176925525069237,0.527259767055511,0.774616479873657,-0.349236786365509,0.550849139690399,0.814844787120819,-0.180535987019539,0.695951521396637,0.695951759815216,-0.176925525069237,0.66469931602478,0.664699137210846,-0.341100782155991,0.527259767055511,0.774616479873657,-0.349236786365509,0.550849139690399,0.814844787120819,-0.180535987019539,0.367015510797501,0.85475105047226,-0.367015272378922,0.382819056510925,0.904340386390686,-0.18872743844986,0.550849139690399,0.814844787120819,-0.180535987019539,0.527259767055511,0.774616479873657,-0.349236786365509,0.367015510797501,0.85475105047226,-0.367015272378922,0.66469931602478,0.664699137210846,-0.341100782155991,0.496357768774033,0.712220311164856,-0.496357858181,0.527259767055511,0.774616479873657,-0.349236786365509,0.66469931602478,0.664699137210846,-0.341100782155991,0.620109975337982,0.620109856128693,-0.480548918247223,0.496357768774033,0.712220311164856,-0.496357858181,0.620109975337982,0.620109856128693,-0.480548918247223,0.480548799037933,0.620109915733337,-0.620110154151917,0.496357768774033,0.712220311164856,-0.496357858181,0.620109975337982,0.620109856128693,-0.480548918247223,0.577350378036499,0.577350318431854,-0.577350199222565,0.480548799037933,0.620109915733337,-0.620110154151917,0.496357768774033,0.712220311164856,-0.496357858181,0.480548799037933,0.620109915733337,-0.620110154151917,0.341100722551346,0.664699018001556,-0.664699673652649,0.527259767055511,0.774616479873657,-0.349236786365509,0.496357768774033,0.712220311164856,-0.496357858181,0.349236905574799,0.774616479873657,-0.527259767055511,0.496357768774033,0.712220311164856,-0.496357858181,0.341100722551346,0.664699018001556,-0.664699673652649,0.349236905574799,0.774616479873657,-0.527259767055511,0.527259767055511,0.774616479873657,-0.349236786365509, +0.349236905574799,0.774616479873657,-0.527259767055511,0.367015510797501,0.85475105047226,-0.367015272378922,0.349236905574799,0.774616479873657,-0.527259767055511,0.341100722551346,0.664699018001556,-0.664699673652649,0.176925733685493,0.695951521396637,-0.695951759815216,0.349236905574799,0.774616479873657,-0.527259767055511,0.176925733685493,0.695951521396637,-0.695951759815216,0.180536076426506,0.81484466791153,-0.550849258899689,0.367015510797501,0.85475105047226,-0.367015272378922,0.349236905574799,0.774616479873657,-0.527259767055511,0.180536076426506,0.81484466791153,-0.550849258899689,0.180536076426506,0.81484466791153,-0.550849258899689,0.176925733685493,0.695951521396637,-0.695951759815216,-0,0.70710688829422,-0.707106649875641,0.382819056510925,0.904340386390686,-0.18872743844986,0.367015510797501,0.85475105047226,-0.367015272378922,0.18872757256031,0.904340386390686,-0.382818996906281,0.367015510797501,0.85475105047226,-0.367015272378922,0.180536076426506,0.81484466791153,-0.550849258899689,0.18872757256031,0.904340386390686,-0.382818996906281,0.382819056510925,0.904340386390686,-0.18872743844986,0.18872757256031,0.904340386390686,-0.382818996906281,0.196468159556389,0.960625112056732,-0.196467980742455,0.180536076426506,0.81484466791153,-0.550849258899689,-0,0.70710688829422,-0.707106649875641,-0,0.828754782676697,-0.559611797332764,0.18872757256031,0.904340386390686,-0.382818996906281,0.180536076426506,0.81484466791153,-0.550849258899689,-0,0.828754782676697,-0.559611797332764,-0.17692543566227,0.695951640605927,-0.695951640605927,-0,0.828754782676697,-0.559611797332764,-0,0.70710688829422,-0.707106649875641,0.196468159556389,0.960625112056732,-0.196467980742455,0.18872757256031,0.904340386390686,-0.382818996906281,-0,0.921247601509094,-0.388976752758026,0.18872757256031,0.904340386390686,-0.382818996906281,-0,0.828754782676697,-0.559611797332764,-0,0.921247601509094,-0.388976752758026,-0.17692543566227,0.695951640605927,-0.695951640605927,-0.180535912513733,0.814844906330109,-0.550849080085754,-0,0.828754782676697,-0.559611797332764, +-0.180535912513733,0.814844906330109,-0.550849080085754,-0,0.921247601509094,-0.388976752758026,-0,0.828754782676697,-0.559611797332764,-0.341100662946701,0.664699077606201,-0.664699554443359,-0.180535912513733,0.814844906330109,-0.550849080085754,-0.17692543566227,0.695951640605927,-0.695951640605927,0.196468159556389,0.960625112056732,-0.196467980742455,-0,0.921247601509094,-0.388976752758026,-0,0.979871928691864,-0.199627444148064,0.199627503752708,0.979871809482574,0,0.196468159556389,0.960625112056732,-0.196467980742455,-0,0.979871928691864,-0.199627444148064,0.199627503752708,0.979871809482574,0,-0,0.979871928691864,-0.199627444148064,-0,1,0,-0.341100662946701,0.664699077606201,-0.664699554443359,-0.349236816167831,0.774616599082947,-0.527259707450867,-0.180535912513733,0.814844906330109,-0.550849080085754,-0.480548977851868,0.620109915733337,-0.620110034942627,-0.349236816167831,0.774616599082947,-0.527259707450867,-0.341100662946701,0.664699077606201,-0.664699554443359,-0.180535912513733,0.814844906330109,-0.550849080085754,-0.188727468252182,0.90434056520462,-0.382818669080734,-0,0.921247601509094,-0.388976752758026,-0.188727468252182,0.90434056520462,-0.382818669080734,-0,0.979871928691864,-0.199627444148064,-0,0.921247601509094,-0.388976752758026,-0.349236816167831,0.774616599082947,-0.527259707450867,-0.188727468252182,0.90434056520462,-0.382818669080734,-0.180535912513733,0.814844906330109,-0.550849080085754,-0.480548977851868,0.620109915733337,-0.620110034942627,-0.496357887983322,0.712220370769501,-0.496357709169388,-0.349236816167831,0.774616599082947,-0.527259707450867,-0.577350378036499,0.577350199222565,-0.577350318431854,-0.496357887983322,0.712220370769501,-0.496357709169388,-0.480548977851868,0.620109915733337,-0.620110034942627,-0.577350378036499,0.577350199222565,-0.577350318431854,-0.620110392570496,0.620109736919403,-0.480548620223999,-0.496357887983322,0.712220370769501,-0.496357709169388,-0.188727468252182,0.90434056520462,-0.382818669080734,-0.196467995643616,0.960625112056732,-0.196468144655228, +-0,0.979871928691864,-0.199627444148064,-0.196467995643616,0.960625112056732,-0.196468144655228,-0,1,0,-0,0.979871928691864,-0.199627444148064,-0.349236816167831,0.774616599082947,-0.527259707450867,-0.367015182971954,0.854751229286194,-0.367015182971954,-0.188727468252182,0.90434056520462,-0.382818669080734,-0.496357887983322,0.712220370769501,-0.496357709169388,-0.367015182971954,0.854751229286194,-0.367015182971954,-0.349236816167831,0.774616599082947,-0.527259707450867,-0.367015182971954,0.854751229286194,-0.367015182971954,-0.196467995643616,0.960625112056732,-0.196468144655228,-0.188727468252182,0.90434056520462,-0.382818669080734,-0.620110392570496,0.620109736919403,-0.480548620223999,-0.527259826660156,0.774616599082947,-0.349236726760864,-0.496357887983322,0.712220370769501,-0.496357709169388,-0.496357887983322,0.712220370769501,-0.496357709169388,-0.527259826660156,0.774616599082947,-0.349236726760864,-0.367015182971954,0.854751229286194,-0.367015182971954,-0.620110392570496,0.620109736919403,-0.480548620223999,-0.664700090885162,0.664698719978333,-0.341100424528122,-0.527259826660156,0.774616599082947,-0.349236726760864,-0.367015182971954,0.854751229286194,-0.367015182971954,-0.382818639278412,0.90434056520462,-0.188727587461472,-0.196467995643616,0.960625112056732,-0.196468144655228,-0.527259826660156,0.774616599082947,-0.349236726760864,-0.382818639278412,0.90434056520462,-0.188727587461472,-0.367015182971954,0.854751229286194,-0.367015182971954,-0.664700090885162,0.664698719978333,-0.341100424528122,-0.550849139690399,0.814844727516174,-0.180536106228828,-0.527259826660156,0.774616599082947,-0.349236726760864,-0.527259826660156,0.774616599082947,-0.349236726760864,-0.550849139690399,0.814844727516174,-0.180536106228828,-0.382818639278412,0.90434056520462,-0.188727587461472,-0.664700090885162,0.664698719978333,-0.341100424528122,-0.695952177047729,0.695951104164124,-0.176925718784332,-0.550849139690399,0.814844727516174,-0.180536106228828,-0.382818639278412,0.90434056520462,-0.188727587461472,-0.199627354741096,0.979871928691864,0, +-0.196467995643616,0.960625112056732,-0.196468144655228,-0.196467995643616,0.960625112056732,-0.196468144655228,-0.199627354741096,0.979871928691864,0,-0,1,0,-0.382818639278412,0.90434056520462,-0.188727587461472,-0.388976484537125,0.921247720718384,0,-0.199627354741096,0.979871928691864,0,-0.550849139690399,0.814844727516174,-0.180536106228828,-0.388976484537125,0.921247720718384,0,-0.382818639278412,0.90434056520462,-0.188727587461472,-0.550849139690399,0.814844727516174,-0.180536106228828,-0.559611916542053,0.828754782676697,0,-0.388976484537125,0.921247720718384,0,-0.695952177047729,0.695951104164124,-0.176925718784332,-0.559611916542053,0.828754782676697,0,-0.550849139690399,0.814844727516174,-0.180536106228828,-0.695952177047729,0.695951104164124,-0.176925718784332,-0.707107067108154,0.707106411457062,0,-0.559611916542053,0.828754782676697,0,-0.620110392570496,0.620109736919403,0.480548620223999,-0.577350318431854,0.577350199222565,0.577350318431854,-0.480549067258835,0.620109796524048,0.620110034942627,-0.620110392570496,0.620109736919403,0.480548620223999,-0.480549067258835,0.620109796524048,0.620110034942627,-0.496357917785645,0.712220311164856,0.496357619762421,-0.496357917785645,0.712220311164856,0.496357619762421,-0.480549067258835,0.620109796524048,0.620110034942627,-0.341100484132767,0.664699077606201,0.664699614048004,-0.664700031280518,0.664698660373688,0.341100633144379,-0.620110392570496,0.620109736919403,0.480548620223999,-0.496357917785645,0.712220311164856,0.496357619762421,-0.496357917785645,0.712220311164856,0.496357619762421,-0.341100484132767,0.664699077606201,0.664699614048004,-0.349236637353897,0.774616718292236,0.527259647846222,-0.664700031280518,0.664698660373688,0.341100633144379,-0.496357917785645,0.712220311164856,0.496357619762421,-0.527259826660156,0.774616420269012,0.349236875772476,-0.527259826660156,0.774616420269012,0.349236875772476,-0.496357917785645,0.712220311164856,0.496357619762421,-0.349236637353897,0.774616718292236,0.527259647846222,-0.695952177047729,0.695951104164124,0.176925718784332, +-0.664700031280518,0.664698660373688,0.341100633144379,-0.527259826660156,0.774616420269012,0.349236875772476,-0.527259826660156,0.774616420269012,0.349236875772476,-0.349236637353897,0.774616718292236,0.527259647846222,-0.367015093564987,0.854751229286194,0.367015361785889,-0.367015093564987,0.854751229286194,0.367015361785889,-0.349236637353897,0.774616718292236,0.527259647846222,-0.180535867810249,0.814844906330109,0.550849080085754,-0.367015093564987,0.854751229286194,0.367015361785889,-0.180535867810249,0.814844906330109,0.550849080085754,-0.188727453351021,0.904340505599976,0.382818907499313,-0.695952177047729,0.695951104164124,0.176925718784332,-0.527259826660156,0.774616420269012,0.349236875772476,-0.550849258899689,0.81484466791153,0.180536106228828,-0.550849258899689,0.81484466791153,0.180536106228828,-0.527259826660156,0.774616420269012,0.349236875772476,-0.367015093564987,0.854751229286194,0.367015361785889,-0.707107067108154,0.707106411457062,0,-0.695952177047729,0.695951104164124,0.176925718784332,-0.550849258899689,0.81484466791153,0.180536106228828,-0.707107067108154,0.707106411457062,0,-0.550849258899689,0.81484466791153,0.180536106228828,-0.559611916542053,0.828754782676697,0,-0.550849258899689,0.81484466791153,0.180536106228828,-0.367015093564987,0.854751229286194,0.367015361785889,-0.382818549871445,0.90434056520462,0.188727557659149,-0.559611916542053,0.828754782676697,0,-0.550849258899689,0.81484466791153,0.180536106228828,-0.382818549871445,0.90434056520462,0.188727557659149,-0.382818549871445,0.90434056520462,0.188727557659149,-0.367015093564987,0.854751229286194,0.367015361785889,-0.188727453351021,0.904340505599976,0.382818907499313,-0.559611916542053,0.828754782676697,0,-0.382818549871445,0.90434056520462,0.188727557659149,-0.388976484537125,0.921247720718384,0,-0.382818549871445,0.90434056520462,0.188727557659149,-0.188727453351021,0.904340505599976,0.382818907499313,-0.196467980742455,0.960625112056732,0.196468099951744,-0.388976484537125,0.921247720718384,0,-0.382818549871445,0.90434056520462,0.188727557659149, +-0.196467980742455,0.960625112056732,0.196468099951744,-0.196467980742455,0.960625112056732,0.196468099951744,-0.188727453351021,0.904340505599976,0.382818907499313,-0,0.921247601509094,0.388976752758026,-0.388976484537125,0.921247720718384,0,-0.196467980742455,0.960625112056732,0.196468099951744,-0.199627354741096,0.979871928691864,0,-0.196467980742455,0.960625112056732,0.196468099951744,-0,0.921247601509094,0.388976752758026,-0,0.979871928691864,0.199627429246902,-0.199627354741096,0.979871928691864,0,-0.196467980742455,0.960625112056732,0.196468099951744,-0,0.979871928691864,0.199627429246902,-0.199627354741096,0.979871928691864,0,-0,0.979871928691864,0.199627429246902,-0,1,0,0.620109975337982,-0.620109915733337,-0.480549067258835,0.577350497245789,-0.57735013961792,-0.577350080013275,0.620109915733337,-0.480549156665802,-0.620109796524048,0.620109975337982,-0.620109915733337,-0.480549067258835,0.620109915733337,-0.480549156665802,-0.620109796524048,0.712220311164856,-0.496357887983322,-0.496357798576355,0.66469931602478,-0.664699375629425,-0.341100364923477,0.620109975337982,-0.620109915733337,-0.480549067258835,0.712220311164856,-0.496357887983322,-0.496357798576355,0.712220311164856,-0.496357887983322,-0.496357798576355,0.620109915733337,-0.480549156665802,-0.620109796524048,0.664699196815491,-0.341100484132767,-0.66469943523407,0.66469931602478,-0.664699375629425,-0.341100364923477,0.712220311164856,-0.496357887983322,-0.496357798576355,0.774616360664368,-0.527260005474091,-0.349236816167831,0.696083009243011,-0.696085274219513,-0.175880089402199,0.66469931602478,-0.664699375629425,-0.341100364923477,0.774616360664368,-0.527260005474091,-0.349236816167831,0.712220311164856,-0.496357887983322,-0.496357798576355,0.664699196815491,-0.341100484132767,-0.66469943523407,0.774616479873657,-0.349236756563187,-0.527259826660156,0.774616360664368,-0.527260005474091,-0.349236816167831,0.712220311164856,-0.496357887983322,-0.496357798576355,0.774616479873657,-0.349236756563187,-0.527259826660156,0.774616479873657,-0.349236756563187,-0.527259826660156, +0.664699196815491,-0.341100484132767,-0.66469943523407,0.695951759815216,-0.176925420761108,-0.695951581001282,0.696083009243011,-0.696085274219513,-0.175880089402199,0.774616360664368,-0.527260005474091,-0.349236816167831,0.814974963665009,-0.550922811031342,-0.179721549153328,0.70710551738739,-0.707107186317444,0.00106279889587313,0.696083009243011,-0.696085274219513,-0.175880089402199,0.814974963665009,-0.550922811031342,-0.179721549153328,0.774616479873657,-0.349236756563187,-0.527259826660156,0.695951759815216,-0.176925420761108,-0.695951581001282,0.81484454870224,-0.180535808205605,-0.550849378108978,0.81484454870224,-0.180535808205605,-0.550849378108978,0.695951759815216,-0.176925420761108,-0.695951581001282,0.706392407417297,-0.0449478290975094,-0.706391870975494,0.774616360664368,-0.527260005474091,-0.349236816167831,0.774616479873657,-0.349236756563187,-0.527259826660156,0.85475081205368,-0.36701574921608,-0.36701574921608,0.814974963665009,-0.550922811031342,-0.179721549153328,0.774616360664368,-0.527260005474091,-0.349236816167831,0.85475081205368,-0.36701574921608,-0.36701574921608,0.85475081205368,-0.36701574921608,-0.36701574921608,0.774616479873657,-0.349236756563187,-0.527259826660156,0.81484454870224,-0.180535808205605,-0.550849378108978,0.70710551738739,-0.707107186317444,0.00106279889587313,0.814974963665009,-0.550922811031342,-0.179721549153328,0.828761279582977,-0.559601783752441,0.000828257587272674,0.695951879024506,-0.695951282978058,0.176925674080849,0.70710551738739,-0.707107186317444,0.00106279889587313,0.828761279582977,-0.559601783752441,0.000828257587272674,0.81484454870224,-0.180535808205605,-0.550849378108978,0.706392407417297,-0.0449478290975094,-0.706391870975494,0.827433586120605,-0.0457738451659679,-0.559694945812225,0.706387877464294,0.0450831651687622,-0.70638781785965,0.827433586120605,-0.0457738451659679,-0.559694945812225,0.706392407417297,-0.0449478290975094,-0.706391870975494,0.85475081205368,-0.36701574921608,-0.36701574921608,0.81484454870224,-0.180535808205605,-0.550849378108978, +0.904340386390686,-0.188727155327797,-0.38281911611557,0.904340386390686,-0.188727155327797,-0.38281911611557,0.81484454870224,-0.180535808205605,-0.550849378108978,0.827433586120605,-0.0457738451659679,-0.559694945812225,0.814974963665009,-0.550922811031342,-0.179721549153328,0.85475081205368,-0.36701574921608,-0.36701574921608,0.904440820217133,-0.38284957408905,-0.188183292746544,0.828761279582977,-0.559601783752441,0.000828257587272674,0.814974963665009,-0.550922811031342,-0.179721549153328,0.904440820217133,-0.38284957408905,-0.188183292746544,0.904440820217133,-0.38284957408905,-0.188183292746544,0.85475081205368,-0.36701574921608,-0.36701574921608,0.904340386390686,-0.188727155327797,-0.38281911611557,0.695951879024506,-0.695951282978058,0.176925674080849,0.828761279582977,-0.559601783752441,0.000828257587272674,0.814844489097595,-0.550849616527557,0.180535957217216,0.66469931602478,-0.664699375629425,0.341100484132767,0.695951879024506,-0.695951282978058,0.176925674080849,0.814844489097595,-0.550849616527557,0.180535957217216,0.706387877464294,0.0450831651687622,-0.70638781785965,0.82742702960968,0.0459093116223812,-0.559693515300751,0.827433586120605,-0.0457738451659679,-0.559694945812225,0.695934474468231,0.17705887556076,-0.6959348320961,0.82742702960968,0.0459093116223812,-0.559693515300751,0.706387877464294,0.0450831651687622,-0.70638781785965,0.828761279582977,-0.559601783752441,0.000828257587272674,0.904440820217133,-0.38284957408905,-0.188183292746544,0.921251773834229,-0.388966500759125,0.000554104801267385,0.814844489097595,-0.550849616527557,0.180535957217216,0.828761279582977,-0.559601783752441,0.000828257587272674,0.921251773834229,-0.388966500759125,0.000554104801267385,0.904340386390686,-0.188727155327797,-0.38281911611557,0.827433586120605,-0.0457738451659679,-0.559694945812225,0.919776856899261,-0.0476835556328297,-0.389534085988998,0.82742702960968,0.0459093116223812,-0.559693515300751,0.919776856899261,-0.0476835556328297,-0.389534085988998,0.827433586120605,-0.0457738451659679,-0.559694945812225, +0.904440820217133,-0.38284957408905,-0.188183292746544,0.904340386390686,-0.188727155327797,-0.38281911611557,0.960604667663574,-0.196656048297882,-0.196380093693733,0.921251773834229,-0.388966500759125,0.000554104801267385,0.904440820217133,-0.38284957408905,-0.188183292746544,0.960604667663574,-0.196656048297882,-0.196380093693733,0.960604667663574,-0.196656048297882,-0.196380093693733,0.904340386390686,-0.188727155327797,-0.38281911611557,0.919776856899261,-0.0476835556328297,-0.389534085988998,0.66469931602478,-0.664699375629425,0.341100484132767,0.814844489097595,-0.550849616527557,0.180535957217216,0.774616360664368,-0.527260005474091,0.349236816167831,0.620109975337982,-0.620109856128693,0.48054912686348,0.66469931602478,-0.664699375629425,0.341100484132767,0.774616360664368,-0.527260005474091,0.349236816167831,0.695934474468231,0.17705887556076,-0.6959348320961,0.814822971820831,0.180669486522675,-0.550837695598602,0.82742702960968,0.0459093116223812,-0.559693515300751,0.664698958396912,0.341100931167603,-0.66469943523407,0.814822971820831,0.180669486522675,-0.550837695598602,0.695934474468231,0.17705887556076,-0.6959348320961,0.814844489097595,-0.550849616527557,0.180535957217216,0.921251773834229,-0.388966500759125,0.000554104801267385,0.904340267181396,-0.382819205522537,0.188727259635925,0.774616360664368,-0.527260005474091,0.349236816167831,0.814844489097595,-0.550849616527557,0.180535957217216,0.904340267181396,-0.382819205522537,0.188727259635925,0.921251773834229,-0.388966500759125,0.000554104801267385,0.960604667663574,-0.196656048297882,-0.196380093693733,0.979795694351196,-0.20000085234642,0.000274586112936959,0.904340267181396,-0.382819205522537,0.188727259635925,0.921251773834229,-0.388966500759125,0.000554104801267385,0.979795694351196,-0.20000085234642,0.000274586112936959,0.960604667663574,-0.196656048297882,-0.196380093693733,0.919776856899261,-0.0476835556328297,-0.389534085988998,0.978397071361542,-0.049742054194212,-0.200661152601242,0.979795694351196,-0.20000085234642,0.000274586112936959, +0.960604667663574,-0.196656048297882,-0.196380093693733,0.978397071361542,-0.049742054194212,-0.200661152601242,0.82742702960968,0.0459093116223812,-0.559693515300751,0.919769704341888,0.0478194355964661,-0.389534205198288,0.919776856899261,-0.0476835556328297,-0.389534085988998,0.814822971820831,0.180669486522675,-0.550837695598602,0.919769704341888,0.0478194355964661,-0.389534205198288,0.82742702960968,0.0459093116223812,-0.559693515300751,0.919769704341888,0.0478194355964661,-0.389534205198288,0.978397071361542,-0.049742054194212,-0.200661152601242,0.919776856899261,-0.0476835556328297,-0.389534085988998,0.620109975337982,-0.620109856128693,0.48054912686348,0.774616360664368,-0.527260005474091,0.349236816167831,0.712220251560211,-0.496357917785645,0.496357798576355,0.577350378036499,-0.577349960803986,0.577350437641144,0.620109975337982,-0.620109856128693,0.48054912686348,0.712220251560211,-0.496357917785645,0.496357798576355,0.577350378036499,-0.577349960803986,0.577350437641144,0.712220251560211,-0.496357917785645,0.496357798576355,0.620109677314758,-0.480549246072769,0.620109975337982,0.774616360664368,-0.527260005474091,0.349236816167831,0.904340267181396,-0.382819205522537,0.188727259635925,0.85475081205368,-0.36701574921608,0.367015808820724,0.712220251560211,-0.496357917785645,0.496357798576355,0.774616360664368,-0.527260005474091,0.349236816167831,0.85475081205368,-0.36701574921608,0.367015808820724,0.620109677314758,-0.480549246072769,0.620109975337982,0.712220251560211,-0.496357917785645,0.496357798576355,0.774616479873657,-0.349236786365509,0.527259826660156,0.712220251560211,-0.496357917785645,0.496357798576355,0.85475081205368,-0.36701574921608,0.367015808820724,0.774616479873657,-0.349236786365509,0.527259826660156,0.620109677314758,-0.480549246072769,0.620109975337982,0.774616479873657,-0.349236786365509,0.527259826660156,0.664699077606201,-0.341100484132767,0.664699673652649,0.904340267181396,-0.382819205522537,0.188727259635925,0.979795694351196,-0.20000085234642,0.000274586112936959,0.960550963878632,-0.196649014949799,0.196649238467216, +0.85475081205368,-0.36701574921608,0.367015808820724,0.904340267181396,-0.382819205522537,0.188727259635925,0.960550963878632,-0.196649014949799,0.196649238467216,0.979795694351196,-0.20000085234642,0.000274586112936959,0.978397071361542,-0.049742054194212,-0.200661152601242,0.998712539672852,-0.0507274568080902,6.79484801366925e-05,0.960550963878632,-0.196649014949799,0.196649238467216,0.979795694351196,-0.20000085234642,0.000274586112936959,0.998712539672852,-0.0507274568080902,6.79484801366925e-05,0.919769704341888,0.0478194355964661,-0.389534205198288,0.978384971618652,0.0498440340161324,-0.200694844126701,0.978397071361542,-0.049742054194212,-0.200661152601242,0.978384971618652,0.0498440340161324,-0.200694844126701,0.998712539672852,-0.0507274568080902,6.79484801366925e-05,0.978397071361542,-0.049742054194212,-0.200661152601242,0.664699077606201,-0.341100484132767,0.664699673652649,0.774616479873657,-0.349236786365509,0.527259826660156,0.81484454870224,-0.180535778403282,0.550849556922913,0.664699077606201,-0.341100484132767,0.664699673652649,0.81484454870224,-0.180535778403282,0.550849556922913,0.695951402187347,-0.17692519724369,0.69595193862915,0.774616479873657,-0.349236786365509,0.527259826660156,0.85475081205368,-0.36701574921608,0.367015808820724,0.904340386390686,-0.188727140426636,0.38281911611557,0.85475081205368,-0.36701574921608,0.367015808820724,0.960550963878632,-0.196649014949799,0.196649238467216,0.904340386390686,-0.188727140426636,0.38281911611557,0.774616479873657,-0.349236786365509,0.527259826660156,0.904340386390686,-0.188727140426636,0.38281911611557,0.81484454870224,-0.180535778403282,0.550849556922913,0.960550963878632,-0.196649014949799,0.196649238467216,0.998712539672852,-0.0507274568080902,6.79484801366925e-05,0.978383362293243,-0.0497417040169239,0.200727760791779,0.904340386390686,-0.188727140426636,0.38281911611557,0.960550963878632,-0.196649014949799,0.196649238467216,0.978383362293243,-0.0497417040169239,0.200727760791779,0.695951402187347,-0.17692519724369,0.69595193862915,0.81484454870224,-0.180535778403282,0.550849556922913, +0.827433466911316,-0.0457738414406776,0.559695065021515,0.695951402187347,-0.17692519724369,0.69595193862915,0.827433466911316,-0.0457738414406776,0.559695065021515,0.706392109394073,-0.0449478439986706,0.706392168998718,0.81484454870224,-0.180535778403282,0.550849556922913,0.904340386390686,-0.188727140426636,0.38281911611557,0.919776856899261,-0.0476835556328297,0.389534085988998,0.904340386390686,-0.188727140426636,0.38281911611557,0.978383362293243,-0.0497417040169239,0.200727760791779,0.919776856899261,-0.0476835556328297,0.389534085988998,0.81484454870224,-0.180535778403282,0.550849556922913,0.919776856899261,-0.0476835556328297,0.389534085988998,0.827433466911316,-0.0457738414406776,0.559695065021515,0.998710751533508,0.0507617704570293,3.39978505508043e-05,0.978383362293243,-0.0497417040169239,0.200727760791779,0.998712539672852,-0.0507274568080902,6.79484801366925e-05,0.978384971618652,0.0498440340161324,-0.200694844126701,0.998710751533508,0.0507617704570293,3.39978505508043e-05,0.998712539672852,-0.0507274568080902,6.79484801366925e-05,0.904315710067749,0.188860833644867,-0.382811695337296,0.978384971618652,0.0498440340161324,-0.200694844126701,0.919769704341888,0.0478194355964661,-0.389534205198288,0.814822971820831,0.180669486522675,-0.550837695598602,0.904315710067749,0.188860833644867,-0.382811695337296,0.919769704341888,0.0478194355964661,-0.389534205198288,0.827433466911316,0.0457736141979694,0.559695184230804,0.706392109394073,-0.0449478439986706,0.706392168998718,0.827433466911316,-0.0457738414406776,0.559695065021515,0.827433466911316,0.0457736141979694,0.559695184230804,0.706391930580139,0.0449474081397057,0.706392407417297,0.706392109394073,-0.0449478439986706,0.706392168998718,0.978383362293243,0.0497418940067291,0.200727730989456,0.919776856899261,-0.0476835556328297,0.389534085988998,0.978383362293243,-0.0497417040169239,0.200727760791779,0.998710751533508,0.0507617704570293,3.39978505508043e-05,0.978383362293243,0.0497418940067291,0.200727730989456,0.978383362293243,-0.0497417040169239,0.200727760791779, +0.919776856899261,0.0476837232708931,0.389533996582031,0.827433466911316,-0.0457738414406776,0.559695065021515,0.919776856899261,-0.0476835556328297,0.389534085988998,0.919776856899261,0.0476837232708931,0.389533996582031,0.827433466911316,0.0457736141979694,0.559695184230804,0.827433466911316,-0.0457738414406776,0.559695065021515,0.978383362293243,0.0497418940067291,0.200727730989456,0.919776856899261,0.0476837232708931,0.389533996582031,0.919776856899261,-0.0476835556328297,0.389534085988998,0.960537672042847,0.196749955415726,-0.196613296866417,0.998710751533508,0.0507617704570293,3.39978505508043e-05,0.978384971618652,0.0498440340161324,-0.200694844126701,0.904315710067749,0.188860833644867,-0.382811695337296,0.960537672042847,0.196749955415726,-0.196613296866417,0.978384971618652,0.0498440340161324,-0.200694844126701,0.774616360664368,0.349237322807312,-0.527259707450867,0.904315710067749,0.188860833644867,-0.382811695337296,0.814822971820831,0.180669486522675,-0.550837695598602,0.664698958396912,0.341100931167603,-0.66469943523407,0.774616360664368,0.349237322807312,-0.527259707450867,0.814822971820831,0.180669486522675,-0.550837695598602,0.620109796524048,0.480549216270447,-0.620109975337982,0.774616360664368,0.349237322807312,-0.527259707450867,0.664698958396912,0.341100931167603,-0.66469943523407,0.81484454870224,0.180535897612572,0.550849556922913,0.706391930580139,0.0449474081397057,0.706392407417297,0.827433466911316,0.0457736141979694,0.559695184230804,0.81484454870224,0.180535897612572,0.550849556922913,0.695951342582703,0.176924973726273,0.695952177047729,0.706391930580139,0.0449474081397057,0.706392407417297,0.979788243770599,0.200037494301796,3.41001141350716e-05,0.978383362293243,0.0497418940067291,0.200727730989456,0.998710751533508,0.0507617704570293,3.39978505508043e-05,0.960537672042847,0.196749955415726,-0.196613296866417,0.979788243770599,0.200037494301796,3.41001141350716e-05,0.998710751533508,0.0507617704570293,3.39978505508043e-05,0.904340386390686,0.188727483153343,0.382818996906281,0.827433466911316,0.0457736141979694,0.559695184230804, +0.919776856899261,0.0476837232708931,0.389533996582031,0.904340386390686,0.188727483153343,0.382818996906281,0.81484454870224,0.180535897612572,0.550849556922913,0.827433466911316,0.0457736141979694,0.559695184230804,0.960550904273987,0.196649238467216,0.196649327874184,0.919776856899261,0.0476837232708931,0.389533996582031,0.978383362293243,0.0497418940067291,0.200727730989456,0.979788243770599,0.200037494301796,3.41001141350716e-05,0.960550904273987,0.196649238467216,0.196649327874184,0.978383362293243,0.0497418940067291,0.200727730989456,0.960550904273987,0.196649238467216,0.196649327874184,0.904340386390686,0.188727483153343,0.382818996906281,0.919776856899261,0.0476837232708931,0.389533996582031,0.774616360664368,0.349237322807312,-0.527259707450867,0.85475081205368,0.367015838623047,-0.367015659809113,0.904315710067749,0.188860833644867,-0.382811695337296,0.85475081205368,0.367015838623047,-0.367015659809113,0.960537672042847,0.196749955415726,-0.196613296866417,0.904315710067749,0.188860833644867,-0.382811695337296,0.620109796524048,0.480549216270447,-0.620109975337982,0.712220251560211,0.496358007192612,-0.496357679367065,0.774616360664368,0.349237322807312,-0.527259707450867,0.712220251560211,0.496358007192612,-0.496357679367065,0.85475081205368,0.367015838623047,-0.367015659809113,0.774616360664368,0.349237322807312,-0.527259707450867,0.577350378036499,0.577350318431854,-0.577350199222565,0.712220251560211,0.496358007192612,-0.496357679367065,0.620109796524048,0.480549216270447,-0.620109975337982,0.577350378036499,0.577350318431854,-0.577350199222565,0.620109975337982,0.620109856128693,-0.480548918247223,0.712220251560211,0.496358007192612,-0.496357679367065,0.620109975337982,0.620109856128693,-0.480548918247223,0.774616241455078,0.52726012468338,-0.349237114191055,0.712220251560211,0.496358007192612,-0.496357679367065,0.712220251560211,0.496358007192612,-0.496357679367065,0.774616241455078,0.52726012468338,-0.349237114191055,0.85475081205368,0.367015838623047,-0.367015659809113,0.620109975337982,0.620109856128693,-0.480548918247223, +0.66469931602478,0.664699137210846,-0.341100782155991,0.774616241455078,0.52726012468338,-0.349237114191055,0.85475081205368,0.367015838623047,-0.367015659809113,0.904340386390686,0.382818996906281,-0.188727453351021,0.960537672042847,0.196749955415726,-0.196613296866417,0.904340386390686,0.382818996906281,-0.188727453351021,0.979788243770599,0.200037494301796,3.41001141350716e-05,0.960537672042847,0.196749955415726,-0.196613296866417,0.774616241455078,0.52726012468338,-0.349237114191055,0.904340386390686,0.382818996906281,-0.188727453351021,0.85475081205368,0.367015838623047,-0.367015659809113,0.66469931602478,0.664699137210846,-0.341100782155991,0.814844489097595,0.550849497318268,-0.180536270141602,0.774616241455078,0.52726012468338,-0.349237114191055,0.774616241455078,0.52726012468338,-0.349237114191055,0.814844489097595,0.550849497318268,-0.180536270141602,0.904340386390686,0.382818996906281,-0.188727453351021,0.66469931602478,0.664699137210846,-0.341100782155991,0.695951521396637,0.695951759815216,-0.176925525069237,0.814844489097595,0.550849497318268,-0.180536270141602,0.904340386390686,0.382818996906281,-0.188727453351021,0.921247720718384,0.388976514339447,0,0.979788243770599,0.200037494301796,3.41001141350716e-05,0.814844489097595,0.550849497318268,-0.180536270141602,0.921247720718384,0.388976514339447,0,0.904340386390686,0.382818996906281,-0.188727453351021,0.921247720718384,0.388976514339447,0,0.960550904273987,0.196649238467216,0.196649327874184,0.979788243770599,0.200037494301796,3.41001141350716e-05,0.695951521396637,0.695951759815216,-0.176925525069237,0.828754663467407,0.559612214565277,0,0.814844489097595,0.550849497318268,-0.180536270141602,0.814844489097595,0.550849497318268,-0.180536270141602,0.828754663467407,0.559612214565277,0,0.921247720718384,0.388976514339447,0,0.695951521396637,0.695951759815216,-0.176925525069237,0.707106411457062,0.707107067108154,0,0.828754663467407,0.559612214565277,0,0.921247720718384,0.388976514339447,0,0.904340505599976,0.382818877696991,0.188727542757988,0.960550904273987,0.196649238467216,0.196649327874184, +0.828754663467407,0.559612214565277,0,0.904340505599976,0.382818877696991,0.188727542757988,0.921247720718384,0.388976514339447,0,0.904340505599976,0.382818877696991,0.188727542757988,0.904340386390686,0.188727483153343,0.382818996906281,0.960550904273987,0.196649238467216,0.196649327874184,0.707106411457062,0.707107067108154,0,0.814844489097595,0.550849437713623,0.180536299943924,0.828754663467407,0.559612214565277,0,0.828754663467407,0.559612214565277,0,0.814844489097595,0.550849437713623,0.180536299943924,0.904340505599976,0.382818877696991,0.188727542757988,0.707106411457062,0.707107067108154,0,0.695951402187347,0.695951879024506,0.176925510168076,0.814844489097595,0.550849437713623,0.180536299943924,0.904340505599976,0.382818877696991,0.188727542757988,0.85475081205368,0.367015719413757,0.367015719413757,0.904340386390686,0.188727483153343,0.382818996906281,0.814844489097595,0.550849437713623,0.180536299943924,0.85475081205368,0.367015719413757,0.367015719413757,0.904340505599976,0.382818877696991,0.188727542757988,0.85475081205368,0.367015719413757,0.367015719413757,0.81484454870224,0.180535897612572,0.550849556922913,0.904340386390686,0.188727483153343,0.382818996906281,0.695951402187347,0.695951879024506,0.176925510168076,0.774616241455078,0.527260065078735,0.349237114191055,0.814844489097595,0.550849437713623,0.180536299943924,0.814844489097595,0.550849437713623,0.180536299943924,0.774616241455078,0.527260065078735,0.349237114191055,0.85475081205368,0.367015719413757,0.367015719413757,0.695951402187347,0.695951879024506,0.176925510168076,0.664699256420135,0.664699256420135,0.341100782155991,0.774616241455078,0.527260065078735,0.349237114191055,0.85475081205368,0.367015719413757,0.367015719413757,0.774616360664368,0.349237203598022,0.527259707450867,0.81484454870224,0.180535897612572,0.550849556922913,0.774616241455078,0.527260065078735,0.349237114191055,0.774616360664368,0.349237203598022,0.527259707450867,0.85475081205368,0.367015719413757,0.367015719413757,0.774616360664368,0.349237203598022,0.527259707450867, +0.695951342582703,0.176924973726273,0.695952177047729,0.81484454870224,0.180535897612572,0.550849556922913,0.774616360664368,0.349237203598022,0.527259707450867,0.664698958396912,0.341100782155991,0.664699554443359,0.695951342582703,0.176924973726273,0.695952177047729,0.664699256420135,0.664699256420135,0.341100782155991,0.712220251560211,0.496358096599579,0.496357679367065,0.774616241455078,0.527260065078735,0.349237114191055,0.774616241455078,0.527260065078735,0.349237114191055,0.712220251560211,0.496358096599579,0.496357679367065,0.774616360664368,0.349237203598022,0.527259707450867,0.712220251560211,0.496358096599579,0.496357679367065,0.664698958396912,0.341100782155991,0.664699554443359,0.774616360664368,0.349237203598022,0.527259707450867,0.664699256420135,0.664699256420135,0.341100782155991,0.620109975337982,0.620109856128693,0.480548918247223,0.712220251560211,0.496358096599579,0.496357679367065,0.712220251560211,0.496358096599579,0.496357679367065,0.620109617710114,0.480549246072769,0.620109975337982,0.664698958396912,0.341100782155991,0.664699554443359,0.620109975337982,0.620109856128693,0.480548918247223,0.620109617710114,0.480549246072769,0.620109975337982,0.712220251560211,0.496358096599579,0.496357679367065,0.620109975337982,0.620109856128693,0.480548918247223,0.577350378036499,0.577350258827209,0.577350199222565,0.620109617710114,0.480549246072769,0.620109975337982,-0.480548888444901,-0.620109856128693,-0.620110154151917,-0.577350258827209,-0.577350080013275,-0.577350556850433,-0.620110094547272,-0.480548650026321,-0.620110154151917,-0.480548888444901,-0.620109856128693,-0.620110154151917,-0.620110094547272,-0.480548650026321,-0.620110154151917,-0.496357709169388,-0.496357470750809,-0.712220668792725,-0.341100573539734,-0.664699375629425,-0.664699196815491,-0.480548888444901,-0.620109856128693,-0.620110154151917,-0.496357709169388,-0.496357470750809,-0.712220668792725,-0.496357709169388,-0.496357470750809,-0.712220668792725,-0.620110094547272,-0.480548650026321,-0.620110154151917,-0.66469943523407,-0.341100603342056,-0.664699137210846, +-0.341100573539734,-0.664699375629425,-0.664699196815491,-0.496357709169388,-0.496357470750809,-0.712220668792725,-0.349237203598022,-0.527259945869446,-0.774616241455078,-0.176925823092461,-0.695951581001282,-0.695951640605927,-0.341100573539734,-0.664699375629425,-0.664699196815491,-0.349237203598022,-0.527259945869446,-0.774616241455078,-0.496357709169388,-0.496357470750809,-0.712220668792725,-0.66469943523407,-0.341100603342056,-0.664699137210846,-0.527259826660156,-0.349237054586411,-0.774616420269012,-0.349237203598022,-0.527259945869446,-0.774616241455078,-0.496357709169388,-0.496357470750809,-0.712220668792725,-0.527259826660156,-0.349237054586411,-0.774616420269012,-0.527259826660156,-0.349237054586411,-0.774616420269012,-0.66469943523407,-0.341100603342056,-0.664699137210846,-0.69595205783844,-0.176925808191299,-0.695951044559479,-0.176925823092461,-0.695951581001282,-0.695951640605927,-0.349237203598022,-0.527259945869446,-0.774616241455078,-0.180536270141602,-0.550849616527557,-0.81484442949295,-0,-0.707106590270996,-0.707106947898865,-0.176925823092461,-0.695951581001282,-0.695951640605927,-0.180536270141602,-0.550849616527557,-0.81484442949295,-0.527259826660156,-0.349237054586411,-0.774616420269012,-0.69595205783844,-0.176925808191299,-0.695951044559479,-0.550849497318268,-0.180536583065987,-0.814844310283661,-0.550849497318268,-0.180536583065987,-0.814844310283661,-0.69595205783844,-0.176925808191299,-0.695951044559479,-0.706392645835876,-0.0449479334056377,-0.70639169216156,-0.349237203598022,-0.527259945869446,-0.774616241455078,-0.527259826660156,-0.349237054586411,-0.774616420269012,-0.367016136646271,-0.367015838623047,-0.854750514030457,-0.180536270141602,-0.550849616527557,-0.81484442949295,-0.349237203598022,-0.527259945869446,-0.774616241455078,-0.367016136646271,-0.367015838623047,-0.854750514030457,-0.367016136646271,-0.367015838623047,-0.854750514030457,-0.527259826660156,-0.349237054586411,-0.774616420269012,-0.550849497318268,-0.180536583065987,-0.814844310283661,-0,-0.707106590270996,-0.707106947898865, +-0.180536270141602,-0.550849616527557,-0.81484442949295,-0,-0.559612154960632,-0.828754544258118,0.176925808191299,-0.695951581001282,-0.695951640605927,-0,-0.707106590270996,-0.707106947898865,-0,-0.559612154960632,-0.828754544258118,-0.550849497318268,-0.180536583065987,-0.814844310283661,-0.706392645835876,-0.0449479334056377,-0.70639169216156,-0.55969512462616,-0.0457741282880306,-0.827433466911316,-0.706388175487518,0.0450832396745682,-0.706387400627136,-0.55969512462616,-0.0457741282880306,-0.827433466911316,-0.706392645835876,-0.0449479334056377,-0.70639169216156,-0.367016136646271,-0.367015838623047,-0.854750514030457,-0.550849497318268,-0.180536583065987,-0.814844310283661,-0.382818996906281,-0.188727647066116,-0.904340267181396,-0.382818996906281,-0.188727647066116,-0.904340267181396,-0.550849497318268,-0.180536583065987,-0.814844310283661,-0.55969512462616,-0.0457741282880306,-0.827433466911316,-0.180536270141602,-0.550849616527557,-0.81484442949295,-0.367016136646271,-0.367015838623047,-0.854750514030457,-0.188727453351021,-0.382818996906281,-0.904340386390686,-0,-0.559612154960632,-0.828754544258118,-0.180536270141602,-0.550849616527557,-0.81484442949295,-0.188727453351021,-0.382818996906281,-0.904340386390686,-0.188727453351021,-0.382818996906281,-0.904340386390686,-0.367016136646271,-0.367015838623047,-0.854750514030457,-0.382818996906281,-0.188727647066116,-0.904340267181396,0.176925808191299,-0.695951581001282,-0.695951640605927,-0,-0.559612154960632,-0.828754544258118,0.180536210536957,-0.550849616527557,-0.81484442949295,0.341100066900253,-0.664699614048004,-0.66469931602478,0.176925808191299,-0.695951581001282,-0.695951640605927,0.180536210536957,-0.550849616527557,-0.81484442949295,-0.706388175487518,0.0450832396745682,-0.706387400627136,-0.559693515300751,0.0459095612168312,-0.82742702960968,-0.55969512462616,-0.0457741282880306,-0.827433466911316,-0.695935070514679,0.177059024572372,-0.695934236049652,-0.559693515300751,0.0459095612168312,-0.82742702960968,-0.706388175487518,0.0450832396745682,-0.706387400627136, +-0,-0.559612154960632,-0.828754544258118,-0.188727453351021,-0.382818996906281,-0.904340386390686,-0,-0.388976484537125,-0.921247720718384,0.180536210536957,-0.550849616527557,-0.81484442949295,-0,-0.559612154960632,-0.828754544258118,-0,-0.388976484537125,-0.921247720718384,-0.382818996906281,-0.188727647066116,-0.904340267181396,-0.55969512462616,-0.0457741282880306,-0.827433466911316,-0.389533877372742,-0.0476840361952782,-0.919776976108551,-0.559693515300751,0.0459095612168312,-0.82742702960968,-0.389533877372742,-0.0476840361952782,-0.919776976108551,-0.55969512462616,-0.0457741282880306,-0.827433466911316,-0.188727453351021,-0.382818996906281,-0.904340386390686,-0.382818996906281,-0.188727647066116,-0.904340267181396,-0.196649387478828,-0.196649327874184,-0.960550904273987,-0,-0.388976484537125,-0.921247720718384,-0.188727453351021,-0.382818996906281,-0.904340386390686,-0.196649387478828,-0.196649327874184,-0.960550904273987,-0.196649387478828,-0.196649327874184,-0.960550904273987,-0.382818996906281,-0.188727647066116,-0.904340267181396,-0.389533877372742,-0.0476840361952782,-0.919776976108551,0.341100066900253,-0.664699614048004,-0.66469931602478,0.180536210536957,-0.550849616527557,-0.81484442949295,0.349236607551575,-0.527260005474091,-0.774616479873657,0.480548888444901,-0.620110154151917,-0.620109856128693,0.341100066900253,-0.664699614048004,-0.66469931602478,0.349236607551575,-0.527260005474091,-0.774616479873657,-0.695935070514679,0.177059024572372,-0.695934236049652,-0.550837635993958,0.18066979944706,-0.814822852611542,-0.559693515300751,0.0459095612168312,-0.82742702960968,-0.664699673652649,0.341100484132767,-0.664699018001556,-0.550837635993958,0.18066979944706,-0.814822852611542,-0.695935070514679,0.177059024572372,-0.695934236049652,0.180536210536957,-0.550849616527557,-0.81484442949295,-0,-0.388976484537125,-0.921247720718384,0.188727408647537,-0.382818937301636,-0.904340505599976,0.349236607551575,-0.527260005474091,-0.774616479873657,0.180536210536957,-0.550849616527557,-0.81484442949295,0.188727408647537,-0.382818937301636,-0.904340505599976, +-0,-0.388976484537125,-0.921247720718384,-0.196649387478828,-0.196649327874184,-0.960550904273987,-0,-0.200004979968071,-0.979794859886169,0.188727408647537,-0.382818937301636,-0.904340505599976,-0,-0.388976484537125,-0.921247720718384,-0,-0.200004979968071,-0.979794859886169,-0.196649387478828,-0.196649327874184,-0.960550904273987,-0.389533877372742,-0.0476840361952782,-0.919776976108551,-0.200727805495262,-0.0497421845793724,-0.978383362293243,-0,-0.200004979968071,-0.979794859886169,-0.196649387478828,-0.196649327874184,-0.960550904273987,-0.200727805495262,-0.0497421845793724,-0.978383362293243,-0.559693515300751,0.0459095612168312,-0.82742702960968,-0.389534026384354,0.0478195995092392,-0.919769823551178,-0.389533877372742,-0.0476840361952782,-0.919776976108551,-0.550837635993958,0.18066979944706,-0.814822852611542,-0.389534026384354,0.0478195995092392,-0.919769823551178,-0.559693515300751,0.0459095612168312,-0.82742702960968,-0.389534026384354,0.0478195995092392,-0.919769823551178,-0.200727805495262,-0.0497421845793724,-0.978383362293243,-0.389533877372742,-0.0476840361952782,-0.919776976108551,0.480548888444901,-0.620110154151917,-0.620109856128693,0.349236607551575,-0.527260005474091,-0.774616479873657,0.496357709169388,-0.496357798576355,-0.712220430374146,0.577350497245789,-0.57735013961792,-0.577350080013275,0.480548888444901,-0.620110154151917,-0.620109856128693,0.496357709169388,-0.496357798576355,-0.712220430374146,0.577350497245789,-0.57735013961792,-0.577350080013275,0.496357709169388,-0.496357798576355,-0.712220430374146,0.620109915733337,-0.480549156665802,-0.620109796524048,0.349236607551575,-0.527260005474091,-0.774616479873657,0.188727408647537,-0.382818937301636,-0.904340505599976,0.36701563000679,-0.367015719413757,-0.854750871658325,0.496357709169388,-0.496357798576355,-0.712220430374146,0.349236607551575,-0.527260005474091,-0.774616479873657,0.36701563000679,-0.367015719413757,-0.854750871658325,0.620109915733337,-0.480549156665802,-0.620109796524048,0.496357709169388,-0.496357798576355,-0.712220430374146, +0.527259767055511,-0.349236726760864,-0.774616479873657,0.496357709169388,-0.496357798576355,-0.712220430374146,0.36701563000679,-0.367015719413757,-0.854750871658325,0.527259767055511,-0.349236726760864,-0.774616479873657,0.620109915733337,-0.480549156665802,-0.620109796524048,0.527259767055511,-0.349236726760864,-0.774616479873657,0.664699196815491,-0.341100484132767,-0.66469943523407,0.188727408647537,-0.382818937301636,-0.904340505599976,-0,-0.200004979968071,-0.979794859886169,0.196649223566055,-0.196649447083473,-0.960550904273987,0.36701563000679,-0.367015719413757,-0.854750871658325,0.188727408647537,-0.382818937301636,-0.904340505599976,0.196649223566055,-0.196649447083473,-0.960550904273987,-0,-0.200004979968071,-0.979794859886169,-0.200727805495262,-0.0497421845793724,-0.978383362293243,-0,-0.0507281683385372,-0.998712539672852,0.196649223566055,-0.196649447083473,-0.960550904273987,-0,-0.200004979968071,-0.979794859886169,-0,-0.0507281683385372,-0.998712539672852,-0.389534026384354,0.0478195995092392,-0.919769823551178,-0.200728461146355,0.0498782657086849,-0.978376269340515,-0.200727805495262,-0.0497421845793724,-0.978383362293243,-0.200728461146355,0.0498782657086849,-0.978376269340515,-0,-0.0507281683385372,-0.998712539672852,-0.200727805495262,-0.0497421845793724,-0.978383362293243,0.664699196815491,-0.341100484132767,-0.66469943523407,0.527259767055511,-0.349236726760864,-0.774616479873657,0.550849378108978,-0.180536448955536,-0.81484454870224,0.664699196815491,-0.341100484132767,-0.66469943523407,0.550849378108978,-0.180536448955536,-0.81484454870224,0.695951759815216,-0.176925420761108,-0.695951581001282,0.527259767055511,-0.349236726760864,-0.774616479873657,0.36701563000679,-0.367015719413757,-0.854750871658325,0.382818788290024,-0.188727736473083,-0.904340386390686,0.36701563000679,-0.367015719413757,-0.854750871658325,0.196649223566055,-0.196649447083473,-0.960550904273987,0.382818788290024,-0.188727736473083,-0.904340386390686,0.527259767055511,-0.349236726760864,-0.774616479873657,0.382818788290024,-0.188727736473083,-0.904340386390686, +0.550849378108978,-0.180536448955536,-0.81484454870224,0.196649223566055,-0.196649447083473,-0.960550904273987,-0,-0.0507281683385372,-0.998712539672852,0.200727760791779,-0.0497421957552433,-0.978383362293243,0.382818788290024,-0.188727736473083,-0.904340386390686,0.196649223566055,-0.196649447083473,-0.960550904273987,0.200727760791779,-0.0497421957552433,-0.978383362293243,0.695951759815216,-0.176925420761108,-0.695951581001282,0.550849378108978,-0.180536448955536,-0.81484454870224,0.559695065021515,-0.0457741394639015,-0.827433466911316,0.695951759815216,-0.176925420761108,-0.695951581001282,0.559695065021515,-0.0457741394639015,-0.827433466911316,0.706392407417297,-0.0449478290975094,-0.706391870975494,0.550849378108978,-0.180536448955536,-0.81484454870224,0.382818788290024,-0.188727736473083,-0.904340386390686,0.389533787965775,-0.0476840361952782,-0.919776976108551,0.382818788290024,-0.188727736473083,-0.904340386390686,0.200727760791779,-0.0497421957552433,-0.978383362293243,0.389533787965775,-0.0476840361952782,-0.919776976108551,0.550849378108978,-0.180536448955536,-0.81484454870224,0.389533787965775,-0.0476840361952782,-0.919776976108551,0.559695065021515,-0.0457741394639015,-0.827433466911316,-0,0.0508647747337818,-0.998705506324768,0.200727760791779,-0.0497421957552433,-0.978383362293243,-0,-0.0507281683385372,-0.998712539672852,-0.200728461146355,0.0498782657086849,-0.978376269340515,-0,0.0508647747337818,-0.998705506324768,-0,-0.0507281683385372,-0.998712539672852,-0.382811576128006,0.188861057162285,-0.904315710067749,-0.200728461146355,0.0498782657086849,-0.978376269340515,-0.389534026384354,0.0478195995092392,-0.919769823551178,-0.550837635993958,0.18066979944706,-0.814822852611542,-0.382811576128006,0.188861057162285,-0.904315710067749,-0.389534026384354,0.0478195995092392,-0.919769823551178,0.559693515300751,0.0459097176790237,-0.82742702960968,0.706392407417297,-0.0449478290975094,-0.706391870975494,0.559695065021515,-0.0457741394639015,-0.827433466911316,0.559693515300751,0.0459097176790237,-0.82742702960968, +0.706387877464294,0.0450831651687622,-0.70638781785965,0.706392407417297,-0.0449478290975094,-0.706391870975494,0.200728476047516,0.0498782210052013,-0.978376269340515,0.389533787965775,-0.0476840361952782,-0.919776976108551,0.200727760791779,-0.0497421957552433,-0.978383362293243,-0,0.0508647747337818,-0.998705506324768,0.200728476047516,0.0498782210052013,-0.978376269340515,0.200727760791779,-0.0497421957552433,-0.978383362293243,0.389534056186676,0.0478196367621422,-0.919769823551178,0.559695065021515,-0.0457741394639015,-0.827433466911316,0.389533787965775,-0.0476840361952782,-0.919776976108551,0.389534056186676,0.0478196367621422,-0.919769823551178,0.559693515300751,0.0459097176790237,-0.82742702960968,0.559695065021515,-0.0457741394639015,-0.827433466911316,0.200728476047516,0.0498782210052013,-0.978376269340515,0.389534056186676,0.0478196367621422,-0.919769823551178,0.389533787965775,-0.0476840361952782,-0.919776976108551,-0.196645900607109,0.196782901883125,-0.960524260997772,-0,0.0508647747337818,-0.998705506324768,-0.200728461146355,0.0498782657086849,-0.978376269340515,-0.382811576128006,0.188861057162285,-0.904315710067749,-0.196645900607109,0.196782901883125,-0.960524260997772,-0.200728461146355,0.0498782657086849,-0.978376269340515,-0.527259767055511,0.349236965179443,-0.774616479873657,-0.382811576128006,0.188861057162285,-0.904315710067749,-0.550837635993958,0.18066979944706,-0.814822852611542,-0.664699673652649,0.341100484132767,-0.664699018001556,-0.527259767055511,0.349236965179443,-0.774616479873657,-0.550837635993958,0.18066979944706,-0.814822852611542,-0.620110154151917,0.480548739433289,-0.620109915733337,-0.527259767055511,0.349236965179443,-0.774616479873657,-0.664699673652649,0.341100484132767,-0.664699018001556,0.550837516784668,0.180669873952866,-0.814822971820831,0.706387877464294,0.0450831651687622,-0.70638781785965,0.559693515300751,0.0459097176790237,-0.82742702960968,0.550837516784668,0.180669873952866,-0.814822971820831,0.695934474468231,0.17705887556076,-0.6959348320961,0.706387877464294,0.0450831651687622,-0.70638781785965, +-0,0.200138852000237,-0.979767560958862,0.200728476047516,0.0498782210052013,-0.978376269340515,-0,0.0508647747337818,-0.998705506324768,-0.196645900607109,0.196782901883125,-0.960524260997772,-0,0.200138852000237,-0.979767560958862,-0,0.0508647747337818,-0.998705506324768,0.382811725139618,0.18886111676693,-0.904315531253815,0.559693515300751,0.0459097176790237,-0.82742702960968,0.389534056186676,0.0478196367621422,-0.919769823551178,0.382811725139618,0.18886111676693,-0.904315531253815,0.550837516784668,0.180669873952866,-0.814822971820831,0.559693515300751,0.0459097176790237,-0.82742702960968,0.196646004915237,0.19678296148777,-0.960524260997772,0.389534056186676,0.0478196367621422,-0.919769823551178,0.200728476047516,0.0498782210052013,-0.978376269340515,-0,0.200138852000237,-0.979767560958862,0.196646004915237,0.19678296148777,-0.960524260997772,0.200728476047516,0.0498782210052013,-0.978376269340515,0.196646004915237,0.19678296148777,-0.960524260997772,0.382811725139618,0.18886111676693,-0.904315531253815,0.389534056186676,0.0478196367621422,-0.919769823551178,-0.527259767055511,0.349236965179443,-0.774616479873657,-0.367015600204468,0.36701574921608,-0.854750871658325,-0.382811576128006,0.188861057162285,-0.904315710067749,-0.367015600204468,0.36701574921608,-0.854750871658325,-0.196645900607109,0.196782901883125,-0.960524260997772,-0.382811576128006,0.188861057162285,-0.904315710067749,-0.620110154151917,0.480548739433289,-0.620109915733337,-0.496357619762421,0.496357709169388,-0.712220549583435,-0.527259767055511,0.349236965179443,-0.774616479873657,-0.496357619762421,0.496357709169388,-0.712220549583435,-0.367015600204468,0.36701574921608,-0.854750871658325,-0.527259767055511,0.349236965179443,-0.774616479873657,-0.577350378036499,0.577350199222565,-0.577350318431854,-0.496357619762421,0.496357709169388,-0.712220549583435,-0.620110154151917,0.480548739433289,-0.620109915733337,-0.577350378036499,0.577350199222565,-0.577350318431854,-0.480548977851868,0.620109915733337,-0.620110034942627,-0.496357619762421,0.496357709169388,-0.712220549583435, +-0.480548977851868,0.620109915733337,-0.620110034942627,-0.349236786365509,0.527259767055511,-0.774616479873657,-0.496357619762421,0.496357709169388,-0.712220549583435,-0.496357619762421,0.496357709169388,-0.712220549583435,-0.349236786365509,0.527259767055511,-0.774616479873657,-0.367015600204468,0.36701574921608,-0.854750871658325,-0.480548977851868,0.620109915733337,-0.620110034942627,-0.341100662946701,0.664699077606201,-0.664699554443359,-0.349236786365509,0.527259767055511,-0.774616479873657,-0.367015600204468,0.36701574921608,-0.854750871658325,-0.188727408647537,0.382818758487701,-0.904340505599976,-0.196645900607109,0.196782901883125,-0.960524260997772,-0.188727408647537,0.382818758487701,-0.904340505599976,-0,0.200138852000237,-0.979767560958862,-0.196645900607109,0.196782901883125,-0.960524260997772,-0.349236786365509,0.527259767055511,-0.774616479873657,-0.188727408647537,0.382818758487701,-0.904340505599976,-0.367015600204468,0.36701574921608,-0.854750871658325,-0.341100662946701,0.664699077606201,-0.664699554443359,-0.180536344647408,0.550849318504333,-0.81484454870224,-0.349236786365509,0.527259767055511,-0.774616479873657,-0.349236786365509,0.527259767055511,-0.774616479873657,-0.180536344647408,0.550849318504333,-0.81484454870224,-0.188727408647537,0.382818758487701,-0.904340505599976,-0.341100662946701,0.664699077606201,-0.664699554443359,-0.17692543566227,0.695951640605927,-0.695951640605927,-0.180536344647408,0.550849318504333,-0.81484454870224,-0.188727408647537,0.382818758487701,-0.904340505599976,-0,0.388976246118546,-0.921247780323029,-0,0.200138852000237,-0.979767560958862,-0.180536344647408,0.550849318504333,-0.81484454870224,-0,0.388976246118546,-0.921247780323029,-0.188727408647537,0.382818758487701,-0.904340505599976,-0,0.388976246118546,-0.921247780323029,0.196646004915237,0.19678296148777,-0.960524260997772,-0,0.200138852000237,-0.979767560958862,-0.17692543566227,0.695951640605927,-0.695951640605927,-0,0.559611797332764,-0.828754782676697,-0.180536344647408,0.550849318504333,-0.81484454870224, +-0.180536344647408,0.550849318504333,-0.81484454870224,-0,0.559611797332764,-0.828754782676697,-0,0.388976246118546,-0.921247780323029,-0.17692543566227,0.695951640605927,-0.695951640605927,-0,0.70710688829422,-0.707106649875641,-0,0.559611797332764,-0.828754782676697,-0,0.388976246118546,-0.921247780323029,0.18872757256031,0.382818967103958,-0.904340386390686,0.196646004915237,0.19678296148777,-0.960524260997772,-0,0.559611797332764,-0.828754782676697,0.18872757256031,0.382818967103958,-0.904340386390686,-0,0.388976246118546,-0.921247780323029,0.18872757256031,0.382818967103958,-0.904340386390686,0.382811725139618,0.18886111676693,-0.904315531253815,0.196646004915237,0.19678296148777,-0.960524260997772,-0,0.70710688829422,-0.707106649875641,0.180536612868309,0.550849199295044,-0.81484454870224,-0,0.559611797332764,-0.828754782676697,-0,0.559611797332764,-0.828754782676697,0.180536612868309,0.550849199295044,-0.81484454870224,0.18872757256031,0.382818967103958,-0.904340386390686,-0,0.70710688829422,-0.707106649875641,0.176925733685493,0.695951521396637,-0.695951759815216,0.180536612868309,0.550849199295044,-0.81484454870224,0.18872757256031,0.382818967103958,-0.904340386390686,0.367015779018402,0.367015928030014,-0.854750692844391,0.382811725139618,0.18886111676693,-0.904315531253815,0.180536612868309,0.550849199295044,-0.81484454870224,0.367015779018402,0.367015928030014,-0.854750692844391,0.18872757256031,0.382818967103958,-0.904340386390686,0.367015779018402,0.367015928030014,-0.854750692844391,0.550837516784668,0.180669873952866,-0.814822971820831,0.382811725139618,0.18886111676693,-0.904315531253815,0.176925733685493,0.695951521396637,-0.695951759815216,0.349236965179443,0.527259767055511,-0.774616479873657,0.180536612868309,0.550849199295044,-0.81484454870224,0.180536612868309,0.550849199295044,-0.81484454870224,0.349236965179443,0.527259767055511,-0.774616479873657,0.367015779018402,0.367015928030014,-0.854750692844391,0.176925733685493,0.695951521396637,-0.695951759815216,0.341100722551346,0.664699018001556,-0.664699673652649, +0.349236965179443,0.527259767055511,-0.774616479873657,0.367015779018402,0.367015928030014,-0.854750692844391,0.527259469032288,0.349237114191055,-0.774616658687592,0.550837516784668,0.180669873952866,-0.814822971820831,0.349236965179443,0.527259767055511,-0.774616479873657,0.527259469032288,0.349237114191055,-0.774616658687592,0.367015779018402,0.367015928030014,-0.854750692844391,0.527259469032288,0.349237114191055,-0.774616658687592,0.695934474468231,0.17705887556076,-0.6959348320961,0.550837516784668,0.180669873952866,-0.814822971820831,0.527259469032288,0.349237114191055,-0.774616658687592,0.664698958396912,0.341100931167603,-0.66469943523407,0.695934474468231,0.17705887556076,-0.6959348320961,0.341100722551346,0.664699018001556,-0.664699673652649,0.496357381343842,0.496357709169388,-0.712220668792725,0.349236965179443,0.527259767055511,-0.774616479873657,0.349236965179443,0.527259767055511,-0.774616479873657,0.496357381343842,0.496357709169388,-0.712220668792725,0.527259469032288,0.349237114191055,-0.774616658687592,0.496357381343842,0.496357709169388,-0.712220668792725,0.664698958396912,0.341100931167603,-0.66469943523407,0.527259469032288,0.349237114191055,-0.774616658687592,0.341100722551346,0.664699018001556,-0.664699673652649,0.480548799037933,0.620109915733337,-0.620110154151917,0.496357381343842,0.496357709169388,-0.712220668792725,0.496357381343842,0.496357709169388,-0.712220668792725,0.620109796524048,0.480549216270447,-0.620109975337982,0.664698958396912,0.341100931167603,-0.66469943523407,0.480548799037933,0.620109915733337,-0.620110154151917,0.620109796524048,0.480549216270447,-0.620109975337982,0.496357381343842,0.496357709169388,-0.712220668792725,0.480548799037933,0.620109915733337,-0.620110154151917,0.577350378036499,0.577350318431854,-0.577350199222565,0.620109796524048,0.480549216270447,-0.620109975337982,-0.696083128452301,-0.696085035800934,-0.175880461931229,-0.707105457782745,-0.707107245922089,0.00106279528699815,-0.828761279582977,-0.559601664543152,0.000828259508125484,-0.696083128452301,-0.696085035800934,-0.175880461931229, +-0.828761279582977,-0.559601664543152,0.000828259508125484,-0.814974963665009,-0.550922572612762,-0.179722309112549,-0.664699673652649,-0.664699137210846,-0.341100126504898,-0.696083128452301,-0.696085035800934,-0.175880461931229,-0.814974963665009,-0.550922572612762,-0.179722309112549,-0.814974963665009,-0.550922572612762,-0.179722309112549,-0.828761279582977,-0.559601664543152,0.000828259508125484,-0.921251952648163,-0.388966083526611,0.000554110389202833,-0.664699673652649,-0.664699137210846,-0.341100126504898,-0.814974963665009,-0.550922572612762,-0.179722309112549,-0.774616777896881,-0.527259647846222,-0.34923654794693,-0.620110154151917,-0.620109975337982,-0.480548769235611,-0.664699673652649,-0.664699137210846,-0.341100126504898,-0.774616777896881,-0.527259647846222,-0.34923654794693,-0.814974963665009,-0.550922572612762,-0.179722309112549,-0.921251952648163,-0.388966083526611,0.000554110389202833,-0.904440820217133,-0.382849335670471,-0.188183858990669,-0.774616777896881,-0.527259647846222,-0.34923654794693,-0.814974963665009,-0.550922572612762,-0.179722309112549,-0.904440820217133,-0.382849335670471,-0.188183858990669,-0.904440820217133,-0.382849335670471,-0.188183858990669,-0.921251952648163,-0.388966083526611,0.000554110389202833,-0.979795575141907,-0.200001448392868,0.00027458238764666,-0.620110154151917,-0.620109975337982,-0.480548769235611,-0.774616777896881,-0.527259647846222,-0.34923654794693,-0.712221086025238,-0.49635723233223,-0.496357440948486,-0.577350258827209,-0.577350080013275,-0.577350556850433,-0.620110154151917,-0.620109975337982,-0.480548769235611,-0.712221086025238,-0.49635723233223,-0.496357440948486,-0.577350258827209,-0.577350080013275,-0.577350556850433,-0.712221086025238,-0.49635723233223,-0.496357440948486,-0.620110094547272,-0.480548650026321,-0.620110154151917,-0.774616777896881,-0.527259647846222,-0.34923654794693,-0.904440820217133,-0.382849335670471,-0.188183858990669,-0.85475081205368,-0.367015659809113,-0.36701574921608,-0.712221086025238,-0.49635723233223,-0.496357440948486, +-0.774616777896881,-0.527259647846222,-0.34923654794693,-0.85475081205368,-0.367015659809113,-0.36701574921608,-0.904440820217133,-0.382849335670471,-0.188183858990669,-0.979795575141907,-0.200001448392868,0.00027458238764666,-0.960604429244995,-0.196656748652458,-0.196380257606506,-0.85475081205368,-0.367015659809113,-0.36701574921608,-0.904440820217133,-0.382849335670471,-0.188183858990669,-0.960604429244995,-0.196656748652458,-0.196380257606506,-0.960604429244995,-0.196656748652458,-0.196380257606506,-0.979795575141907,-0.200001448392868,0.00027458238764666,-0.998712539672852,-0.0507280826568604,6.79353688610718e-05,-0.620110094547272,-0.480548650026321,-0.620110154151917,-0.712221086025238,-0.49635723233223,-0.496357440948486,-0.774616956710815,-0.349236607551575,-0.527259349822998,-0.712221086025238,-0.49635723233223,-0.496357440948486,-0.85475081205368,-0.367015659809113,-0.36701574921608,-0.774616956710815,-0.349236607551575,-0.527259349822998,-0.620110094547272,-0.480548650026321,-0.620110154151917,-0.774616956710815,-0.349236607551575,-0.527259349822998,-0.66469943523407,-0.341100603342056,-0.664699137210846,-0.85475081205368,-0.367015659809113,-0.36701574921608,-0.960604429244995,-0.196656748652458,-0.196380257606506,-0.904340207576752,-0.188728019595146,-0.382819265127182,-0.774616956710815,-0.349236607551575,-0.527259349822998,-0.85475081205368,-0.367015659809113,-0.36701574921608,-0.904340207576752,-0.188728019595146,-0.382819265127182,-0.960604429244995,-0.196656748652458,-0.196380257606506,-0.998712539672852,-0.0507280826568604,6.79353688610718e-05,-0.978397071361542,-0.0497428104281425,-0.200661316514015,-0.904340207576752,-0.188728019595146,-0.382819265127182,-0.960604429244995,-0.196656748652458,-0.196380257606506,-0.978397071361542,-0.0497428104281425,-0.200661316514015,-0.998710751533508,0.0507621206343174,3.39903526764829e-05,-0.978397071361542,-0.0497428104281425,-0.200661316514015,-0.998712539672852,-0.0507280826568604,6.79353688610718e-05,-0.66469943523407,-0.341100603342056,-0.664699137210846, +-0.774616956710815,-0.349236607551575,-0.527259349822998,-0.814844727516174,-0.180536508560181,-0.55084902048111,-0.774616956710815,-0.349236607551575,-0.527259349822998,-0.904340207576752,-0.188728019595146,-0.382819265127182,-0.814844727516174,-0.180536508560181,-0.55084902048111,-0.66469943523407,-0.341100603342056,-0.664699137210846,-0.814844727516174,-0.180536508560181,-0.55084902048111,-0.69595205783844,-0.176925808191299,-0.695951044559479,-0.998710751533508,0.0507621206343174,3.39903526764829e-05,-0.978384971618652,0.0498442314565182,-0.20069508254528,-0.978397071361542,-0.0497428104281425,-0.200661316514015,-0.979788243770599,0.20003767311573,3.41038721671794e-05,-0.978384971618652,0.0498442314565182,-0.20069508254528,-0.998710751533508,0.0507621206343174,3.39903526764829e-05,-0.904340207576752,-0.188728019595146,-0.382819265127182,-0.978397071361542,-0.0497428104281425,-0.200661316514015,-0.919776797294617,-0.0476843602955341,-0.389534205198288,-0.814844727516174,-0.180536508560181,-0.55084902048111,-0.904340207576752,-0.188728019595146,-0.382819265127182,-0.919776797294617,-0.0476843602955341,-0.389534205198288,-0.978384971618652,0.0498442314565182,-0.20069508254528,-0.919776797294617,-0.0476843602955341,-0.389534205198288,-0.978397071361542,-0.0497428104281425,-0.200661316514015,-0.69595205783844,-0.176925808191299,-0.695951044559479,-0.814844727516174,-0.180536508560181,-0.55084902048111,-0.827433705329895,-0.0457743480801582,-0.559694707393646,-0.814844727516174,-0.180536508560181,-0.55084902048111,-0.919776797294617,-0.0476843602955341,-0.389534205198288,-0.827433705329895,-0.0457743480801582,-0.559694707393646,-0.69595205783844,-0.176925808191299,-0.695951044559479,-0.827433705329895,-0.0457743480801582,-0.559694707393646,-0.706392645835876,-0.0449479334056377,-0.70639169216156,-0.979788243770599,0.20003767311573,3.41038721671794e-05,-0.960537552833557,0.196750059723854,-0.196613624691963,-0.978384971618652,0.0498442314565182,-0.20069508254528,-0.921247601509094,0.388976573944092,0,-0.960537552833557,0.196750059723854,-0.196613624691963, +-0.979788243770599,0.20003767311573,3.41038721671794e-05,-0.978384971618652,0.0498442314565182,-0.20069508254528,-0.919769704341888,0.0478195734322071,-0.38953423500061,-0.919776797294617,-0.0476843602955341,-0.389534205198288,-0.919769704341888,0.0478195734322071,-0.38953423500061,-0.827433705329895,-0.0457743480801582,-0.559694707393646,-0.919776797294617,-0.0476843602955341,-0.389534205198288,-0.960537552833557,0.196750059723854,-0.196613624691963,-0.919769704341888,0.0478195734322071,-0.38953423500061,-0.978384971618652,0.0498442314565182,-0.20069508254528,-0.827427268028259,0.045909583568573,-0.559693217277527,-0.706392645835876,-0.0449479334056377,-0.70639169216156,-0.827433705329895,-0.0457743480801582,-0.559694707393646,-0.919769704341888,0.0478195734322071,-0.38953423500061,-0.827427268028259,0.045909583568573,-0.559693217277527,-0.827433705329895,-0.0457743480801582,-0.559694707393646,-0.827427268028259,0.045909583568573,-0.559693217277527,-0.706388175487518,0.0450832396745682,-0.706387400627136,-0.706392645835876,-0.0449479334056377,-0.70639169216156,-0.921247601509094,0.388976573944092,0,-0.904340207576752,0.382819086313248,-0.188728019595146,-0.960537552833557,0.196750059723854,-0.196613624691963,-0.828754901885986,0.559611856937408,0,-0.904340207576752,0.382819086313248,-0.188728019595146,-0.921247601509094,0.388976573944092,0,-0.960537552833557,0.196750059723854,-0.196613624691963,-0.904315590858459,0.188861057162285,-0.382811784744263,-0.919769704341888,0.0478195734322071,-0.38953423500061,-0.904315590858459,0.188861057162285,-0.382811784744263,-0.827427268028259,0.045909583568573,-0.559693217277527,-0.919769704341888,0.0478195734322071,-0.38953423500061,-0.904340207576752,0.382819086313248,-0.188728019595146,-0.904315590858459,0.188861057162285,-0.382811784744263,-0.960537552833557,0.196750059723854,-0.196613624691963,-0.814823091030121,0.180669873952866,-0.550837337970734,-0.706388175487518,0.0450832396745682,-0.706387400627136,-0.827427268028259,0.045909583568573,-0.559693217277527,-0.904315590858459,0.188861057162285,-0.382811784744263, +-0.814823091030121,0.180669873952866,-0.550837337970734,-0.827427268028259,0.045909583568573,-0.559693217277527,-0.814823091030121,0.180669873952866,-0.550837337970734,-0.695935070514679,0.177059024572372,-0.695934236049652,-0.706388175487518,0.0450832396745682,-0.706387400627136,-0.828754901885986,0.559611856937408,0,-0.814844727516174,0.55084902048111,-0.180536687374115,-0.904340207576752,0.382819086313248,-0.188728019595146,-0.707107067108154,0.707106411457062,0,-0.814844727516174,0.55084902048111,-0.180536687374115,-0.828754901885986,0.559611856937408,0,-0.707107067108154,0.707106411457062,0,-0.695952177047729,0.695951104164124,-0.176925718784332,-0.814844727516174,0.55084902048111,-0.180536687374115,-0.904340207576752,0.382819086313248,-0.188728019595146,-0.854750871658325,0.36701574921608,-0.367015540599823,-0.904315590858459,0.188861057162285,-0.382811784744263,-0.854750871658325,0.36701574921608,-0.367015540599823,-0.814823091030121,0.180669873952866,-0.550837337970734,-0.904315590858459,0.188861057162285,-0.382811784744263,-0.814844727516174,0.55084902048111,-0.180536687374115,-0.854750871658325,0.36701574921608,-0.367015540599823,-0.904340207576752,0.382819086313248,-0.188728019595146,-0.774616837501526,0.349236756563187,-0.527259230613708,-0.695935070514679,0.177059024572372,-0.695934236049652,-0.814823091030121,0.180669873952866,-0.550837337970734,-0.854750871658325,0.36701574921608,-0.367015540599823,-0.774616837501526,0.349236756563187,-0.527259230613708,-0.814823091030121,0.180669873952866,-0.550837337970734,-0.774616837501526,0.349236756563187,-0.527259230613708,-0.664699673652649,0.341100484132767,-0.664699018001556,-0.695935070514679,0.177059024572372,-0.695934236049652,-0.695952177047729,0.695951104164124,-0.176925718784332,-0.774616956710815,0.527259349822998,-0.349236577749252,-0.814844727516174,0.55084902048111,-0.180536687374115,-0.814844727516174,0.55084902048111,-0.180536687374115,-0.774616956710815,0.527259349822998,-0.349236577749252,-0.854750871658325,0.36701574921608,-0.367015540599823, +-0.774616956710815,0.527259349822998,-0.349236577749252,-0.774616837501526,0.349236756563187,-0.527259230613708,-0.854750871658325,0.36701574921608,-0.367015540599823,-0.695952177047729,0.695951104164124,-0.176925718784332,-0.664700090885162,0.664698719978333,-0.341100424528122,-0.774616956710815,0.527259349822998,-0.349236577749252,-0.712221145629883,0.496357411146164,-0.496357142925262,-0.664699673652649,0.341100484132767,-0.664699018001556,-0.774616837501526,0.349236756563187,-0.527259230613708,-0.774616956710815,0.527259349822998,-0.349236577749252,-0.712221145629883,0.496357411146164,-0.496357142925262,-0.774616837501526,0.349236756563187,-0.527259230613708,-0.664700090885162,0.664698719978333,-0.341100424528122,-0.712221145629883,0.496357411146164,-0.496357142925262,-0.774616956710815,0.527259349822998,-0.349236577749252,-0.712221145629883,0.496357411146164,-0.496357142925262,-0.620110154151917,0.480548739433289,-0.620109915733337,-0.664699673652649,0.341100484132767,-0.664699018001556,-0.664700090885162,0.664698719978333,-0.341100424528122,-0.620110392570496,0.620109736919403,-0.480548620223999,-0.712221145629883,0.496357411146164,-0.496357142925262,-0.620110392570496,0.620109736919403,-0.480548620223999,-0.620110154151917,0.480548739433289,-0.620109915733337,-0.712221145629883,0.496357411146164,-0.496357142925262,-0.620110392570496,0.620109736919403,-0.480548620223999,-0.577350378036499,0.577350199222565,-0.577350318431854,-0.620110154151917,0.480548739433289,-0.620109915733337,-0.620110154151917,-0.620109856128693,0.480548918247223,-0.577350318431854,-0.577350199222565,0.577350378036499,-0.620110094547272,-0.480548888444901,0.620109856128693,-0.620110154151917,-0.620109856128693,0.480548918247223,-0.620110094547272,-0.480548888444901,0.620109856128693,-0.712220966815948,-0.496357411146164,0.496357411146164,-0.664699673652649,-0.664699137210846,0.341100215911865,-0.620110154151917,-0.620109856128693,0.480548918247223,-0.712220966815948,-0.496357411146164,0.496357411146164,-0.712220966815948,-0.496357411146164,0.496357411146164, +-0.620110094547272,-0.480548888444901,0.620109856128693,-0.664699554443359,-0.341100424528122,0.664699137210846,-0.664699673652649,-0.664699137210846,0.341100215911865,-0.712220966815948,-0.496357411146164,0.496357411146164,-0.774616718292236,-0.527259647846222,0.349236637353897,-0.69595205783844,-0.695951044559479,0.176926121115685,-0.664699673652649,-0.664699137210846,0.341100215911865,-0.774616718292236,-0.527259647846222,0.349236637353897,-0.712220966815948,-0.496357411146164,0.496357411146164,-0.664699554443359,-0.341100424528122,0.664699137210846,-0.774616837501526,-0.349236577749252,0.527259409427643,-0.774616718292236,-0.527259647846222,0.349236637353897,-0.712220966815948,-0.496357411146164,0.496357411146164,-0.774616837501526,-0.349236577749252,0.527259409427643,-0.774616837501526,-0.349236577749252,0.527259409427643,-0.664699554443359,-0.341100424528122,0.664699137210846,-0.695951759815216,-0.17692556977272,0.695951461791992,-0.69595205783844,-0.695951044559479,0.176926121115685,-0.774616718292236,-0.527259647846222,0.349236637353897,-0.81484442949295,-0.550849378108978,0.18053674697876,-0.707105457782745,-0.707107245922089,0.00106279528699815,-0.69595205783844,-0.695951044559479,0.176926121115685,-0.81484442949295,-0.550849378108978,0.18053674697876,-0.707105457782745,-0.707107245922089,0.00106279528699815,-0.81484442949295,-0.550849378108978,0.18053674697876,-0.828761279582977,-0.559601664543152,0.000828259508125484,-0.774616837501526,-0.349236577749252,0.527259409427643,-0.695951759815216,-0.17692556977272,0.695951461791992,-0.814844727516174,-0.180536478757858,0.550849080085754,-0.814844727516174,-0.180536478757858,0.550849080085754,-0.695951759815216,-0.17692556977272,0.695951461791992,-0.706392347812653,-0.0449479557573795,0.706392049789429,-0.774616718292236,-0.527259647846222,0.349236637353897,-0.774616837501526,-0.349236577749252,0.527259409427643,-0.85475081205368,-0.367015659809113,0.367015838623047,-0.81484442949295,-0.550849378108978,0.18053674697876,-0.774616718292236,-0.527259647846222,0.349236637353897, +-0.85475081205368,-0.367015659809113,0.367015838623047,-0.85475081205368,-0.367015659809113,0.367015838623047,-0.774616837501526,-0.349236577749252,0.527259409427643,-0.814844727516174,-0.180536478757858,0.550849080085754,-0.828761279582977,-0.559601664543152,0.000828259508125484,-0.81484442949295,-0.550849378108978,0.18053674697876,-0.904340267181396,-0.382818937301636,0.188727870583534,-0.81484442949295,-0.550849378108978,0.18053674697876,-0.85475081205368,-0.367015659809113,0.367015838623047,-0.904340267181396,-0.382818937301636,0.188727870583534,-0.828761279582977,-0.559601664543152,0.000828259508125484,-0.904340267181396,-0.382818937301636,0.188727870583534,-0.921251952648163,-0.388966083526611,0.000554110389202833,-0.814844727516174,-0.180536478757858,0.550849080085754,-0.706392347812653,-0.0449479557573795,0.706392049789429,-0.827433586120605,-0.045774333178997,0.559694766998291,-0.706392347812653,0.044947475194931,0.706392049789429,-0.827433586120605,-0.045774333178997,0.559694766998291,-0.706392347812653,-0.0449479557573795,0.706392049789429,-0.85475081205368,-0.367015659809113,0.367015838623047,-0.814844727516174,-0.180536478757858,0.550849080085754,-0.904340207576752,-0.188727989792824,0.382819265127182,-0.904340267181396,-0.382818937301636,0.188727870583534,-0.85475081205368,-0.367015659809113,0.367015838623047,-0.904340207576752,-0.188727989792824,0.382819265127182,-0.904340207576752,-0.188727989792824,0.382819265127182,-0.814844727516174,-0.180536478757858,0.550849080085754,-0.827433586120605,-0.045774333178997,0.559694766998291,-0.921251952648163,-0.388966083526611,0.000554110389202833,-0.904340267181396,-0.382818937301636,0.188727870583534,-0.960550785064697,-0.196649730205536,0.196649447083473,-0.904340267181396,-0.382818937301636,0.188727870583534,-0.904340207576752,-0.188727989792824,0.382819265127182,-0.960550785064697,-0.196649730205536,0.196649447083473,-0.921251952648163,-0.388966083526611,0.000554110389202833,-0.960550785064697,-0.196649730205536,0.196649447083473,-0.979795575141907,-0.200001448392868,0.00027458238764666, +-0.706392347812653,0.044947475194931,0.706392049789429,-0.827433586120605,0.0457738786935806,0.559694766998291,-0.827433586120605,-0.045774333178997,0.559694766998291,-0.695951998233795,0.176925107836723,0.695951402187347,-0.827433586120605,0.0457738786935806,0.559694766998291,-0.706392347812653,0.044947475194931,0.706392049789429,-0.904340207576752,-0.188727989792824,0.382819265127182,-0.827433586120605,-0.045774333178997,0.559694766998291,-0.919776797294617,-0.0476843602955341,0.389534175395966,-0.960550785064697,-0.196649730205536,0.196649447083473,-0.904340207576752,-0.188727989792824,0.382819265127182,-0.919776797294617,-0.0476843602955341,0.389534175395966,-0.827433586120605,0.0457738786935806,0.559694766998291,-0.919776797294617,-0.0476843602955341,0.389534175395966,-0.827433586120605,-0.045774333178997,0.559694766998291,-0.979795575141907,-0.200001448392868,0.00027458238764666,-0.960550785064697,-0.196649730205536,0.196649447083473,-0.978383362293243,-0.0497424378991127,0.200727894902229,-0.960550785064697,-0.196649730205536,0.196649447083473,-0.919776797294617,-0.0476843602955341,0.389534175395966,-0.978383362293243,-0.0497424378991127,0.200727894902229,-0.979795575141907,-0.200001448392868,0.00027458238764666,-0.978383362293243,-0.0497424378991127,0.200727894902229,-0.998712539672852,-0.0507280826568604,6.79353688610718e-05,-0.695951998233795,0.176925107836723,0.695951402187347,-0.814844727516174,0.180536165833473,0.550849080085754,-0.827433586120605,0.0457738786935806,0.559694766998291,-0.664699673652649,0.341100364923477,0.664699077606201,-0.814844727516174,0.180536165833473,0.550849080085754,-0.695951998233795,0.176925107836723,0.695951402187347,-0.827433586120605,0.0457738786935806,0.559694766998291,-0.919776856899261,0.047683872282505,0.389533966779709,-0.919776797294617,-0.0476843602955341,0.389534175395966,-0.919776856899261,0.047683872282505,0.389533966779709,-0.978383362293243,-0.0497424378991127,0.200727894902229,-0.919776797294617,-0.0476843602955341,0.389534175395966,-0.814844727516174,0.180536165833473,0.550849080085754, +-0.919776856899261,0.047683872282505,0.389533966779709,-0.827433586120605,0.0457738786935806,0.559694766998291,-0.978383362293243,0.0497421100735664,0.200727969408035,-0.998712539672852,-0.0507280826568604,6.79353688610718e-05,-0.978383362293243,-0.0497424378991127,0.200727894902229,-0.919776856899261,0.047683872282505,0.389533966779709,-0.978383362293243,0.0497421100735664,0.200727969408035,-0.978383362293243,-0.0497424378991127,0.200727894902229,-0.978383362293243,0.0497421100735664,0.200727969408035,-0.998710751533508,0.0507621206343174,3.39903526764829e-05,-0.998712539672852,-0.0507280826568604,6.79353688610718e-05,-0.664699673652649,0.341100364923477,0.664699077606201,-0.774616837501526,0.349236637353897,0.527259290218353,-0.814844727516174,0.180536165833473,0.550849080085754,-0.620110034942627,0.480548828840256,0.620109915733337,-0.774616837501526,0.349236637353897,0.527259290218353,-0.664699673652649,0.341100364923477,0.664699077606201,-0.814844727516174,0.180536165833473,0.550849080085754,-0.904340386390686,0.188727587461472,0.382818996906281,-0.919776856899261,0.047683872282505,0.389533966779709,-0.904340386390686,0.188727587461472,0.382818996906281,-0.978383362293243,0.0497421100735664,0.200727969408035,-0.919776856899261,0.047683872282505,0.389533966779709,-0.774616837501526,0.349236637353897,0.527259290218353,-0.904340386390686,0.188727587461472,0.382818996906281,-0.814844727516174,0.180536165833473,0.550849080085754,-0.960550904273987,0.196649327874184,0.196649640798569,-0.998710751533508,0.0507621206343174,3.39903526764829e-05,-0.978383362293243,0.0497421100735664,0.200727969408035,-0.904340386390686,0.188727587461472,0.382818996906281,-0.960550904273987,0.196649327874184,0.196649640798569,-0.978383362293243,0.0497421100735664,0.200727969408035,-0.960550904273987,0.196649327874184,0.196649640798569,-0.979788243770599,0.20003767311573,3.41038721671794e-05,-0.998710751533508,0.0507621206343174,3.39903526764829e-05,-0.620110034942627,0.480548828840256,0.620109915733337,-0.712221086025238,0.496357530355453,0.49635711312294, +-0.774616837501526,0.349236637353897,0.527259290218353,-0.577350318431854,0.577350199222565,0.577350318431854,-0.712221086025238,0.496357530355453,0.49635711312294,-0.620110034942627,0.480548828840256,0.620109915733337,-0.577350318431854,0.577350199222565,0.577350318431854,-0.620110392570496,0.620109736919403,0.480548620223999,-0.712221086025238,0.496357530355453,0.49635711312294,-0.774616837501526,0.349236637353897,0.527259290218353,-0.85475081205368,0.36701574921608,0.367015659809113,-0.904340386390686,0.188727587461472,0.382818996906281,-0.85475081205368,0.36701574921608,0.367015659809113,-0.960550904273987,0.196649327874184,0.196649640798569,-0.904340386390686,0.188727587461472,0.382818996906281,-0.712221086025238,0.496357530355453,0.49635711312294,-0.85475081205368,0.36701574921608,0.367015659809113,-0.774616837501526,0.349236637353897,0.527259290218353,-0.904340267181396,0.382818996906281,0.188727900385857,-0.979788243770599,0.20003767311573,3.41038721671794e-05,-0.960550904273987,0.196649327874184,0.196649640798569,-0.85475081205368,0.36701574921608,0.367015659809113,-0.904340267181396,0.382818996906281,0.188727900385857,-0.960550904273987,0.196649327874184,0.196649640798569,-0.904340267181396,0.382818996906281,0.188727900385857,-0.921247601509094,0.388976573944092,0,-0.979788243770599,0.20003767311573,3.41038721671794e-05,-0.620110392570496,0.620109736919403,0.480548620223999,-0.774616777896881,0.527259469032288,0.349236667156219,-0.712221086025238,0.496357530355453,0.49635711312294,-0.712221086025238,0.496357530355453,0.49635711312294,-0.774616777896881,0.527259469032288,0.349236667156219,-0.85475081205368,0.36701574921608,0.367015659809113,-0.774616777896881,0.527259469032288,0.349236667156219,-0.904340267181396,0.382818996906281,0.188727900385857,-0.85475081205368,0.36701574921608,0.367015659809113,-0.620110392570496,0.620109736919403,0.480548620223999,-0.664700031280518,0.664698660373688,0.341100633144379,-0.774616777896881,0.527259469032288,0.349236667156219,-0.81484466791153,0.550849080085754,0.180536657571793, +-0.921247601509094,0.388976573944092,0,-0.904340267181396,0.382818996906281,0.188727900385857,-0.774616777896881,0.527259469032288,0.349236667156219,-0.81484466791153,0.550849080085754,0.180536657571793,-0.904340267181396,0.382818996906281,0.188727900385857,-0.664700031280518,0.664698660373688,0.341100633144379,-0.81484466791153,0.550849080085754,0.180536657571793,-0.774616777896881,0.527259469032288,0.349236667156219,-0.81484466791153,0.550849080085754,0.180536657571793,-0.828754901885986,0.559611856937408,0,-0.921247601509094,0.388976573944092,0,-0.664700031280518,0.664698660373688,0.341100633144379,-0.695952177047729,0.695951104164124,0.176925718784332,-0.81484466791153,0.550849080085754,0.180536657571793,-0.695952177047729,0.695951104164124,0.176925718784332,-0.828754901885986,0.559611856937408,0,-0.81484466791153,0.550849080085754,0.180536657571793,-0.695952177047729,0.695951104164124,0.176925718784332,-0.707107067108154,0.707106411457062,0,-0.828754901885986,0.559611856937408,0,0.480548977851868,-0.620109796524048,0.620110154151917,0.577350378036499,-0.577349960803986,0.577350437641144,0.620109677314758,-0.480549246072769,0.620109975337982,0.480548977851868,-0.620109796524048,0.620110154151917,0.620109677314758,-0.480549246072769,0.620109975337982,0.496357589960098,-0.496357798576355,0.71222048997879,0.341100066900253,-0.664699375629425,0.664699614048004,0.480548977851868,-0.620109796524048,0.620110154151917,0.496357589960098,-0.496357798576355,0.71222048997879,0.496357589960098,-0.496357798576355,0.71222048997879,0.620109677314758,-0.480549246072769,0.620109975337982,0.664699077606201,-0.341100484132767,0.664699673652649,0.341100066900253,-0.664699375629425,0.664699614048004,0.496357589960098,-0.496357798576355,0.71222048997879,0.349236339330673,-0.527259886264801,0.774616718292236,0.17692556977272,-0.695951223373413,0.695951998233795,0.341100066900253,-0.664699375629425,0.664699614048004,0.349236339330673,-0.527259886264801,0.774616718292236,0.496357589960098,-0.496357798576355,0.71222048997879,0.664699077606201,-0.341100484132767,0.664699673652649, +0.527259469032288,-0.34923654794693,0.774616777896881,0.349236339330673,-0.527259886264801,0.774616718292236,0.496357589960098,-0.496357798576355,0.71222048997879,0.527259469032288,-0.34923654794693,0.774616777896881,0.527259469032288,-0.34923654794693,0.774616777896881,0.664699077606201,-0.341100484132767,0.664699673652649,0.695951402187347,-0.17692519724369,0.69595193862915,0.17692556977272,-0.695951223373413,0.695951998233795,0.349236339330673,-0.527259886264801,0.774616718292236,0.180536046624184,-0.550849497318268,0.81484454870224,-0,-0.707106113433838,0.707107424736023,0.17692556977272,-0.695951223373413,0.695951998233795,0.180536046624184,-0.550849497318268,0.81484454870224,0.527259469032288,-0.34923654794693,0.774616777896881,0.695951402187347,-0.17692519724369,0.69595193862915,0.550849139690399,-0.180536285042763,0.814844727516174,0.550849139690399,-0.180536285042763,0.814844727516174,0.695951402187347,-0.17692519724369,0.69595193862915,0.706392109394073,-0.0449478439986706,0.706392168998718,0.349236339330673,-0.527259886264801,0.774616718292236,0.527259469032288,-0.34923654794693,0.774616777896881,0.367015510797501,-0.367015510797501,0.85475105047226,0.180536046624184,-0.550849497318268,0.81484454870224,0.349236339330673,-0.527259886264801,0.774616718292236,0.367015510797501,-0.367015510797501,0.85475105047226,0.367015510797501,-0.367015510797501,0.85475105047226,0.527259469032288,-0.34923654794693,0.774616777896881,0.550849139690399,-0.180536285042763,0.814844727516174,-0,-0.707106113433838,0.707107424736023,0.180536046624184,-0.550849497318268,0.81484454870224,-0,-0.559612214565277,0.828754663467407,-0.176925629377365,-0.695951282978058,0.695951998233795,-0,-0.707106113433838,0.707107424736023,-0,-0.559612214565277,0.828754663467407,0.550849139690399,-0.180536285042763,0.814844727516174,0.706392109394073,-0.0449478439986706,0.706392168998718,0.559695184230804,-0.0457745045423508,0.827433466911316,0.706391930580139,0.0449474081397057,0.706392407417297,0.559695184230804,-0.0457745045423508,0.827433466911316, +0.706392109394073,-0.0449478439986706,0.706392168998718,0.367015510797501,-0.367015510797501,0.85475105047226,0.550849139690399,-0.180536285042763,0.814844727516174,0.382818937301636,-0.188727870583534,0.904340267181396,0.382818937301636,-0.188727870583534,0.904340267181396,0.550849139690399,-0.180536285042763,0.814844727516174,0.559695184230804,-0.0457745045423508,0.827433466911316,0.180536046624184,-0.550849497318268,0.81484454870224,0.367015510797501,-0.367015510797501,0.85475105047226,0.188727542757988,-0.382819026708603,0.904340386390686,-0,-0.559612214565277,0.828754663467407,0.180536046624184,-0.550849497318268,0.81484454870224,0.188727542757988,-0.382819026708603,0.904340386390686,0.188727542757988,-0.382819026708603,0.904340386390686,0.367015510797501,-0.367015510797501,0.85475105047226,0.382818937301636,-0.188727870583534,0.904340267181396,-0.176925629377365,-0.695951282978058,0.695951998233795,-0,-0.559612214565277,0.828754663467407,-0.180536106228828,-0.550849497318268,0.81484454870224,-0.341100245714188,-0.664699375629425,0.66469943523407,-0.176925629377365,-0.695951282978058,0.695951998233795,-0.180536106228828,-0.550849497318268,0.81484454870224,0.706391930580139,0.0449474081397057,0.706392407417297,0.559695243835449,0.0457740761339664,0.827433466911316,0.559695184230804,-0.0457745045423508,0.827433466911316,0.695951342582703,0.176924973726273,0.695952177047729,0.559695243835449,0.0457740761339664,0.827433466911316,0.706391930580139,0.0449474081397057,0.706392407417297,-0,-0.559612214565277,0.828754663467407,0.188727542757988,-0.382819026708603,0.904340386390686,-0,-0.388976752758026,0.921247601509094,-0.180536106228828,-0.550849497318268,0.81484454870224,-0,-0.559612214565277,0.828754663467407,-0,-0.388976752758026,0.921247601509094,0.382818937301636,-0.188727870583534,0.904340267181396,0.559695184230804,-0.0457745045423508,0.827433466911316,0.389533787965775,-0.0476843751966953,0.919776976108551,0.559695243835449,0.0457740761339664,0.827433466911316,0.389533787965775,-0.0476843751966953,0.919776976108551, +0.559695184230804,-0.0457745045423508,0.827433466911316,0.188727542757988,-0.382819026708603,0.904340386390686,0.382818937301636,-0.188727870583534,0.904340267181396,0.196649238467216,-0.196649447083473,0.960550904273987,-0,-0.388976752758026,0.921247601509094,0.188727542757988,-0.382819026708603,0.904340386390686,0.196649238467216,-0.196649447083473,0.960550904273987,0.196649238467216,-0.196649447083473,0.960550904273987,0.382818937301636,-0.188727870583534,0.904340267181396,0.389533787965775,-0.0476843751966953,0.919776976108551,-0.341100245714188,-0.664699375629425,0.66469943523407,-0.180536106228828,-0.550849497318268,0.81484454870224,-0.34923654794693,-0.527259886264801,0.774616599082947,-0.480549067258835,-0.620109915733337,0.620109915733337,-0.341100245714188,-0.664699375629425,0.66469943523407,-0.34923654794693,-0.527259886264801,0.774616599082947,0.695951342582703,0.176924973726273,0.695952177047729,0.550849258899689,0.180536016821861,0.814844727516174,0.559695243835449,0.0457740761339664,0.827433466911316,0.664698958396912,0.341100782155991,0.664699554443359,0.550849258899689,0.180536016821861,0.814844727516174,0.695951342582703,0.176924973726273,0.695952177047729,-0.180536106228828,-0.550849497318268,0.81484454870224,-0,-0.388976752758026,0.921247601509094,-0.188727602362633,-0.382819086313248,0.904340267181396,-0.34923654794693,-0.527259886264801,0.774616599082947,-0.180536106228828,-0.550849497318268,0.81484454870224,-0.188727602362633,-0.382819086313248,0.904340267181396,-0,-0.388976752758026,0.921247601509094,0.196649238467216,-0.196649447083473,0.960550904273987,-0,-0.200004711747169,0.979794979095459,-0.188727602362633,-0.382819086313248,0.904340267181396,-0,-0.388976752758026,0.921247601509094,-0,-0.200004711747169,0.979794979095459,0.196649238467216,-0.196649447083473,0.960550904273987,0.389533787965775,-0.0476843751966953,0.919776976108551,0.200727298855782,-0.0497420653700829,0.978383481502533,-0,-0.200004711747169,0.979794979095459,0.196649238467216,-0.196649447083473,0.960550904273987,0.200727298855782,-0.0497420653700829,0.978383481502533, +0.559695243835449,0.0457740761339664,0.827433466911316,0.389533787965775,0.0476840473711491,0.919776976108551,0.389533787965775,-0.0476843751966953,0.919776976108551,0.550849258899689,0.180536016821861,0.814844727516174,0.389533787965775,0.0476840473711491,0.919776976108551,0.559695243835449,0.0457740761339664,0.827433466911316,0.389533787965775,0.0476840473711491,0.919776976108551,0.200727298855782,-0.0497420653700829,0.978383481502533,0.389533787965775,-0.0476843751966953,0.919776976108551,-0.480549067258835,-0.620109915733337,0.620109915733337,-0.34923654794693,-0.527259886264801,0.774616599082947,-0.496357798576355,-0.496357560157776,0.712220430374146,-0.577350318431854,-0.577350199222565,0.577350378036499,-0.480549067258835,-0.620109915733337,0.620109915733337,-0.496357798576355,-0.496357560157776,0.712220430374146,-0.577350318431854,-0.577350199222565,0.577350378036499,-0.496357798576355,-0.496357560157776,0.712220430374146,-0.620110094547272,-0.480548888444901,0.620109856128693,-0.34923654794693,-0.527259886264801,0.774616599082947,-0.188727602362633,-0.382819086313248,0.904340267181396,-0.367015779018402,-0.367015451192856,0.854750871658325,-0.496357798576355,-0.496357560157776,0.712220430374146,-0.34923654794693,-0.527259886264801,0.774616599082947,-0.367015779018402,-0.367015451192856,0.854750871658325,-0.620110094547272,-0.480548888444901,0.620109856128693,-0.496357798576355,-0.496357560157776,0.712220430374146,-0.527259647846222,-0.349236369132996,0.774616777896881,-0.496357798576355,-0.496357560157776,0.712220430374146,-0.367015779018402,-0.367015451192856,0.854750871658325,-0.527259647846222,-0.349236369132996,0.774616777896881,-0.620110094547272,-0.480548888444901,0.620109856128693,-0.527259647846222,-0.349236369132996,0.774616777896881,-0.664699554443359,-0.341100424528122,0.664699137210846,-0.188727602362633,-0.382819086313248,0.904340267181396,-0,-0.200004711747169,0.979794979095459,-0.196649357676506,-0.196649327874184,0.960550904273987,-0.367015779018402,-0.367015451192856,0.854750871658325,-0.188727602362633,-0.382819086313248,0.904340267181396, +-0.196649357676506,-0.196649327874184,0.960550904273987,-0,-0.200004711747169,0.979794979095459,0.200727298855782,-0.0497420653700829,0.978383481502533,-0,-0.0507278963923454,0.998712539672852,-0.196649357676506,-0.196649327874184,0.960550904273987,-0,-0.200004711747169,0.979794979095459,-0,-0.0507278963923454,0.998712539672852,0.389533787965775,0.0476840473711491,0.919776976108551,0.200727358460426,0.0497418306767941,0.978383481502533,0.200727298855782,-0.0497420653700829,0.978383481502533,0.200727358460426,0.0497418306767941,0.978383481502533,-0,-0.0507278963923454,0.998712539672852,0.200727298855782,-0.0497420653700829,0.978383481502533,-0.664699554443359,-0.341100424528122,0.664699137210846,-0.527259647846222,-0.349236369132996,0.774616777896881,-0.550849199295044,-0.18053637444973,0.81484454870224,-0.664699554443359,-0.341100424528122,0.664699137210846,-0.550849199295044,-0.18053637444973,0.81484454870224,-0.695951759815216,-0.17692556977272,0.695951461791992,-0.527259647846222,-0.349236369132996,0.774616777896881,-0.367015779018402,-0.367015451192856,0.854750871658325,-0.382819175720215,-0.188727766275406,0.904340267181396,-0.367015779018402,-0.367015451192856,0.854750871658325,-0.196649357676506,-0.196649327874184,0.960550904273987,-0.382819175720215,-0.188727766275406,0.904340267181396,-0.527259647846222,-0.349236369132996,0.774616777896881,-0.382819175720215,-0.188727766275406,0.904340267181396,-0.550849199295044,-0.18053637444973,0.81484454870224,-0.196649357676506,-0.196649327874184,0.960550904273987,-0,-0.0507278963923454,0.998712539672852,-0.200727418065071,-0.0497420690953732,0.978383481502533,-0.382819175720215,-0.188727766275406,0.904340267181396,-0.196649357676506,-0.196649327874184,0.960550904273987,-0.200727418065071,-0.0497420690953732,0.978383481502533,-0.695951759815216,-0.17692556977272,0.695951461791992,-0.550849199295044,-0.18053637444973,0.81484454870224,-0.559695184230804,-0.0457744747400284,0.827433347702026,-0.695951759815216,-0.17692556977272,0.695951461791992,-0.559695184230804,-0.0457744747400284,0.827433347702026, +-0.706392347812653,-0.0449479557573795,0.706392049789429,-0.550849199295044,-0.18053637444973,0.81484454870224,-0.382819175720215,-0.188727766275406,0.904340267181396,-0.389533847570419,-0.047684371471405,0.919776856899261,-0.382819175720215,-0.188727766275406,0.904340267181396,-0.200727418065071,-0.0497420690953732,0.978383481502533,-0.389533847570419,-0.047684371471405,0.919776856899261,-0.550849199295044,-0.18053637444973,0.81484454870224,-0.389533847570419,-0.047684371471405,0.919776856899261,-0.559695184230804,-0.0457744747400284,0.827433347702026,-0,0.0507276840507984,0.998712539672852,-0.200727418065071,-0.0497420690953732,0.978383481502533,-0,-0.0507278963923454,0.998712539672852,0.200727358460426,0.0497418306767941,0.978383481502533,-0,0.0507276840507984,0.998712539672852,-0,-0.0507278963923454,0.998712539672852,0.382819026708603,0.188727647066116,0.904340386390686,0.200727358460426,0.0497418306767941,0.978383481502533,0.389533787965775,0.0476840473711491,0.919776976108551,0.550849258899689,0.180536016821861,0.814844727516174,0.382819026708603,0.188727647066116,0.904340386390686,0.389533787965775,0.0476840473711491,0.919776976108551,-0.559695303440094,0.0457739010453224,0.827433288097382,-0.706392347812653,-0.0449479557573795,0.706392049789429,-0.559695184230804,-0.0457744747400284,0.827433347702026,-0.559695303440094,0.0457739010453224,0.827433288097382,-0.706392347812653,0.044947475194931,0.706392049789429,-0.706392347812653,-0.0449479557573795,0.706392049789429,-0.200727358460426,0.0497418791055679,0.978383481502533,-0.389533847570419,-0.047684371471405,0.919776856899261,-0.200727418065071,-0.0497420690953732,0.978383481502533,-0,0.0507276840507984,0.998712539672852,-0.200727358460426,0.0497418791055679,0.978383481502533,-0.200727418065071,-0.0497420690953732,0.978383481502533,-0.389533787965775,0.0476840101182461,0.919776976108551,-0.559695184230804,-0.0457744747400284,0.827433347702026,-0.389533847570419,-0.047684371471405,0.919776856899261,-0.389533787965775,0.0476840101182461,0.919776976108551,-0.559695303440094,0.0457739010453224,0.827433288097382, +-0.559695184230804,-0.0457744747400284,0.827433347702026,-0.200727358460426,0.0497418791055679,0.978383481502533,-0.389533787965775,0.0476840101182461,0.919776976108551,-0.389533847570419,-0.047684371471405,0.919776856899261,0.196649268269539,0.196649223566055,0.960550904273987,-0,0.0507276840507984,0.998712539672852,0.200727358460426,0.0497418306767941,0.978383481502533,0.382819026708603,0.188727647066116,0.904340386390686,0.196649268269539,0.196649223566055,0.960550904273987,0.200727358460426,0.0497418306767941,0.978383481502533,0.527259469032288,0.349236935377121,0.774616718292236,0.382819026708603,0.188727647066116,0.904340386390686,0.550849258899689,0.180536016821861,0.814844727516174,0.664698958396912,0.341100782155991,0.664699554443359,0.527259469032288,0.349236935377121,0.774616718292236,0.550849258899689,0.180536016821861,0.814844727516174,0.620109617710114,0.480549246072769,0.620109975337982,0.527259469032288,0.349236935377121,0.774616718292236,0.664698958396912,0.341100782155991,0.664699554443359,-0.550849378108978,0.180535972118378,0.81484466791153,-0.706392347812653,0.044947475194931,0.706392049789429,-0.559695303440094,0.0457739010453224,0.827433288097382,-0.550849378108978,0.180535972118378,0.81484466791153,-0.695951998233795,0.176925107836723,0.695951402187347,-0.706392347812653,0.044947475194931,0.706392049789429,-0,0.20000459253788,0.979794979095459,-0.200727358460426,0.0497418791055679,0.978383481502533,-0,0.0507276840507984,0.998712539672852,0.196649268269539,0.196649223566055,0.960550904273987,-0,0.20000459253788,0.979794979095459,-0,0.0507276840507984,0.998712539672852,-0.382818847894669,0.188727602362633,0.904340386390686,-0.559695303440094,0.0457739010453224,0.827433288097382,-0.389533787965775,0.0476840101182461,0.919776976108551,-0.382818847894669,0.188727602362633,0.904340386390686,-0.550849378108978,0.180535972118378,0.81484466791153,-0.559695303440094,0.0457739010453224,0.827433288097382,-0.196649268269539,0.196649223566055,0.960550904273987,-0.389533787965775,0.0476840101182461,0.919776976108551, +-0.200727358460426,0.0497418791055679,0.978383481502533,-0,0.20000459253788,0.979794979095459,-0.196649268269539,0.196649223566055,0.960550904273987,-0.200727358460426,0.0497418791055679,0.978383481502533,-0.196649268269539,0.196649223566055,0.960550904273987,-0.382818847894669,0.188727602362633,0.904340386390686,-0.389533787965775,0.0476840101182461,0.919776976108551,0.527259469032288,0.349236935377121,0.774616718292236,0.367015659809113,0.367015719413757,0.85475081205368,0.382819026708603,0.188727647066116,0.904340386390686,0.367015659809113,0.367015719413757,0.85475081205368,0.196649268269539,0.196649223566055,0.960550904273987,0.382819026708603,0.188727647066116,0.904340386390686,0.620109617710114,0.480549246072769,0.620109975337982,0.496357321739197,0.496357768774033,0.712220728397369,0.527259469032288,0.349236935377121,0.774616718292236,0.496357321739197,0.496357768774033,0.712220728397369,0.367015659809113,0.367015719413757,0.85475081205368,0.527259469032288,0.349236935377121,0.774616718292236,0.577350378036499,0.577350258827209,0.577350199222565,0.496357321739197,0.496357768774033,0.712220728397369,0.620109617710114,0.480549246072769,0.620109975337982,0.577350378036499,0.577350258827209,0.577350199222565,0.480548918247223,0.620109736919403,0.620110154151917,0.496357321739197,0.496357768774033,0.712220728397369,0.480548918247223,0.620109736919403,0.620110154151917,0.349236816167831,0.527259707450867,0.774616599082947,0.496357321739197,0.496357768774033,0.712220728397369,0.496357321739197,0.496357768774033,0.712220728397369,0.349236816167831,0.527259707450867,0.774616599082947,0.367015659809113,0.367015719413757,0.85475081205368,0.480548918247223,0.620109736919403,0.620110154151917,0.341100752353668,0.664698898792267,0.664699733257294,0.349236816167831,0.527259707450867,0.774616599082947,0.367015659809113,0.367015719413757,0.85475081205368,0.188727557659149,0.382819056510925,0.904340267181396,0.196649268269539,0.196649223566055,0.960550904273987,0.188727557659149,0.382819056510925,0.904340267181396,-0,0.20000459253788,0.979794979095459, +0.196649268269539,0.196649223566055,0.960550904273987,0.349236816167831,0.527259707450867,0.774616599082947,0.188727557659149,0.382819056510925,0.904340267181396,0.367015659809113,0.367015719413757,0.85475081205368,0.341100752353668,0.664698898792267,0.664699733257294,0.18053637444973,0.550849139690399,0.814844727516174,0.349236816167831,0.527259707450867,0.774616599082947,0.349236816167831,0.527259707450867,0.774616599082947,0.18053637444973,0.550849139690399,0.814844727516174,0.188727557659149,0.382819056510925,0.904340267181396,0.341100752353668,0.664698898792267,0.664699733257294,0.176925644278526,0.695951342582703,0.695951879024506,0.18053637444973,0.550849139690399,0.814844727516174,0.188727557659149,0.382819056510925,0.904340267181396,-0,0.388976633548737,0.921247601509094,-0,0.20000459253788,0.979794979095459,0.18053637444973,0.550849139690399,0.814844727516174,-0,0.388976633548737,0.921247601509094,0.188727557659149,0.382819056510925,0.904340267181396,-0,0.388976633548737,0.921247601509094,-0.196649268269539,0.196649223566055,0.960550904273987,-0,0.20000459253788,0.979794979095459,0.176925644278526,0.695951342582703,0.695951879024506,-0,0.559611737728119,0.828754901885986,0.18053637444973,0.550849139690399,0.814844727516174,0.18053637444973,0.550849139690399,0.814844727516174,-0,0.559611737728119,0.828754901885986,-0,0.388976633548737,0.921247601509094,0.176925644278526,0.695951342582703,0.695951879024506,-0,0.707106649875641,0.70710688829422,-0,0.559611737728119,0.828754901885986,-0,0.388976633548737,0.921247601509094,-0.188727602362633,0.382819026708603,0.904340386390686,-0.196649268269539,0.196649223566055,0.960550904273987,-0,0.559611737728119,0.828754901885986,-0.188727602362633,0.382819026708603,0.904340386390686,-0,0.388976633548737,0.921247601509094,-0.188727602362633,0.382819026708603,0.904340386390686,-0.382818847894669,0.188727602362633,0.904340386390686,-0.196649268269539,0.196649223566055,0.960550904273987,-0,0.707106649875641,0.70710688829422,-0.180536225438118,0.55084902048111,0.814844787120819, +-0,0.559611737728119,0.828754901885986,-0,0.559611737728119,0.828754901885986,-0.180536225438118,0.55084902048111,0.814844787120819,-0.188727602362633,0.382819026708603,0.904340386390686,-0,0.707106649875641,0.70710688829422,-0.176925331354141,0.695951461791992,0.695951819419861,-0.180536225438118,0.55084902048111,0.814844787120819,-0.188727602362633,0.382819026708603,0.904340386390686,-0.367015451192856,0.367015570402145,0.854750990867615,-0.382818847894669,0.188727602362633,0.904340386390686,-0.180536225438118,0.55084902048111,0.814844787120819,-0.367015451192856,0.367015570402145,0.854750990867615,-0.188727602362633,0.382819026708603,0.904340386390686,-0.367015451192856,0.367015570402145,0.854750990867615,-0.550849378108978,0.180535972118378,0.81484466791153,-0.382818847894669,0.188727602362633,0.904340386390686,-0.176925331354141,0.695951461791992,0.695951819419861,-0.349236637353897,0.527259647846222,0.774616718292236,-0.180536225438118,0.55084902048111,0.814844787120819,-0.180536225438118,0.55084902048111,0.814844787120819,-0.349236637353897,0.527259647846222,0.774616718292236,-0.367015451192856,0.367015570402145,0.854750990867615,-0.176925331354141,0.695951461791992,0.695951819419861,-0.341100484132767,0.664699077606201,0.664699614048004,-0.349236637353897,0.527259647846222,0.774616718292236,-0.367015451192856,0.367015570402145,0.854750990867615,-0.527259528636932,0.349236816167831,0.774616718292236,-0.550849378108978,0.180535972118378,0.81484466791153,-0.349236637353897,0.527259647846222,0.774616718292236,-0.527259528636932,0.349236816167831,0.774616718292236,-0.367015451192856,0.367015570402145,0.854750990867615,-0.527259528636932,0.349236816167831,0.774616718292236,-0.695951998233795,0.176925107836723,0.695951402187347,-0.550849378108978,0.180535972118378,0.81484466791153,-0.527259528636932,0.349236816167831,0.774616718292236,-0.664699673652649,0.341100364923477,0.664699077606201,-0.695951998233795,0.176925107836723,0.695951402187347,-0.341100484132767,0.664699077606201,0.664699614048004,-0.496357589960098,0.496357619762421,0.71222060918808, +-0.349236637353897,0.527259647846222,0.774616718292236,-0.349236637353897,0.527259647846222,0.774616718292236,-0.496357589960098,0.496357619762421,0.71222060918808,-0.527259528636932,0.349236816167831,0.774616718292236,-0.496357589960098,0.496357619762421,0.71222060918808,-0.664699673652649,0.341100364923477,0.664699077606201,-0.527259528636932,0.349236816167831,0.774616718292236,-0.341100484132767,0.664699077606201,0.664699614048004,-0.480549067258835,0.620109796524048,0.620110034942627,-0.496357589960098,0.496357619762421,0.71222060918808,-0.496357589960098,0.496357619762421,0.71222060918808,-0.620110034942627,0.480548828840256,0.620109915733337,-0.664699673652649,0.341100364923477,0.664699077606201,-0.480549067258835,0.620109796524048,0.620110034942627,-0.620110034942627,0.480548828840256,0.620109915733337,-0.496357589960098,0.496357619762421,0.71222060918808,-0.480549067258835,0.620109796524048,0.620110034942627,-0.577350318431854,0.577350199222565,0.577350318431854,-0.620110034942627,0.480548828840256,0.620109915733337 + } + NormalsW: *2496 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *7488 { + a: 0.701887428760529,0.277701497077942,0.65592360496521,-0.977728545665741,0.000281262036878616,0.209873646497726,0.977992594242096,0.19913823902607,-0.0622444488108158,0.820403575897217,0.426714092493057,0.380595415830612,0.701887428760529,0.277701497077942,0.65592360496521,0.977992594242096,0.19913823902607,-0.0622444488108158,0.60440069437027,0.519038140773773,0.604399800300598,0.701887428760529,0.277701497077942,0.65592360496521,0.820403575897217,0.426714092493057,0.380595415830612,0.60440069437027,0.519038140773773,0.604399800300598,0.380595088005066,0.426714301109314,0.820403754711151,0.701887428760529,0.277701497077942,0.65592360496521,0.380595088005066,0.426714301109314,0.820403754711151,-0.147885590791702,0.197432726621628,0.96909761428833,0.701887428760529,0.277701497077942,0.65592360496521,0.701887428760529,0.277701497077942,0.65592360496521,-0.147885590791702,0.197432726621628,0.96909761428833,-0.165804222226143,0.00132159888744354,0.986157834529877,0.820403575897217,0.426714092493057,0.380595415830612,0.977992594242096,0.19913823902607,-0.0622444488108158,0.920718789100647,0.388671368360519,-0.0348047502338886,0.652066111564636,0.632389187812805,0.418202966451645,0.60440069437027,0.519038140773773,0.604399800300598,0.820403575897217,0.426714092493057,0.380595415830612,0.779260873794556,0.579603135585785,0.238354414701462,0.820403575897217,0.426714092493057,0.380595415830612,0.920718789100647,0.388671368360519,-0.0348047502338886,0.652066111564636,0.632389187812805,0.418202966451645,0.820403575897217,0.426714092493057,0.380595415830612,0.779260873794556,0.579603135585785,0.238354414701462,0.418202579021454,0.632389426231384,0.652066171169281,0.380595088005066,0.426714301109314,0.820403754711151,0.60440069437027,0.519038140773773,0.604399800300598,0.503616154193878,0.701955437660217,0.503616213798523,0.60440069437027,0.519038140773773,0.604399800300598,0.652066111564636,0.632389187812805,0.418202966451645,0.503616154193878,0.701955437660217,0.503616213798523,0.418202579021454,0.632389426231384,0.652066171169281, +0.60440069437027,0.519038140773773,0.604399800300598,0.596795260906219,0.747057497501373,0.292814761400223,0.652066111564636,0.632389187812805,0.418202966451645,0.779260873794556,0.579603135585785,0.238354414701462,0.5015789270401,0.784376621246338,0.364927440881729,0.652066111564636,0.632389187812805,0.418202966451645,0.596795260906219,0.747057497501373,0.292814761400223,0.5015789270401,0.784376621246338,0.364927440881729,0.503616154193878,0.701955437660217,0.503616213798523,0.652066111564636,0.632389187812805,0.418202966451645,0.409504741430283,0.816495478153229,0.406990110874176,0.503616154193878,0.701955437660217,0.503616213798523,0.5015789270401,0.784376621246338,0.364927440881729,0.409504741430283,0.816495478153229,0.406990110874176,0.365799486637115,0.784392297267914,0.500918686389923,0.503616154193878,0.701955437660217,0.503616213798523,0.365799486637115,0.784392297267914,0.500918686389923,0.418202579021454,0.632389426231384,0.652066171169281,0.503616154193878,0.701955437660217,0.503616213798523,0.596795260906219,0.747057497501373,0.292814761400223,0.779260873794556,0.579603135585785,0.238354414701462,0.676422595977783,0.718066513538361,0.163807451725006,0.365799486637115,0.784392297267914,0.500918686389923,0.291429191827774,0.747042834758759,0.597491562366486,0.418202579021454,0.632389426231384,0.652066171169281,0.676422595977783,0.718066513538361,0.163807451725006,0.779260873794556,0.579603135585785,0.238354414701462,0.82869827747345,0.559526920318604,-0.0137446187436581,0.779260873794556,0.579603135585785,0.238354414701462,0.920718789100647,0.388671368360519,-0.0348047502338886,0.82869827747345,0.559526920318604,-0.0137446187436581,0.676422595977783,0.718066513538361,0.163807451725006,0.82869827747345,0.559526920318604,-0.0137446187436581,0.707106113433838,0.707099437713623,-0.00334813562221825,0.291429191827774,0.747042834758759,0.597491562366486,0.238352999091148,0.579603374004364,0.779261112213135,0.418202579021454,0.632389426231384,0.652066171169281,0.418202579021454,0.632389426231384,0.652066171169281, +0.238352999091148,0.579603374004364,0.779261112213135,0.380595088005066,0.426714301109314,0.820403754711151,0.291429191827774,0.747042834758759,0.597491562366486,0.161575391888618,0.718051612377167,0.676975011825562,0.238352999091148,0.579603374004364,0.779261112213135,0.774272382259369,0.579404175281525,-0.254544824361801,0.707106113433838,0.707099437713623,-0.00334813562221825,0.82869827747345,0.559526920318604,-0.0137446187436581,0.774272382259369,0.579404175281525,-0.254544824361801,0.675663471221924,0.717955410480499,-0.167388737201691,0.707106113433838,0.707099437713623,-0.00334813562221825,0.811717748641968,0.426308155059814,-0.399218767881393,0.82869827747345,0.559526920318604,-0.0137446187436581,0.920718789100647,0.388671368360519,-0.0348047502338886,0.811717748641968,0.426308155059814,-0.399218767881393,0.774272382259369,0.579404175281525,-0.254544824361801,0.82869827747345,0.559526920318604,-0.0137446187436581,0.238352999091148,0.579603374004364,0.779261112213135,-0.0284083504229784,0.388819187879562,0.92087596654892,0.380595088005066,0.426714301109314,0.820403754711151,0.380595088005066,0.426714301109314,0.820403754711151,-0.0284083504229784,0.388819187879562,0.92087596654892,-0.147885590791702,0.197432726621628,0.96909761428833,0.161575391888618,0.718051612377167,0.676975011825562,-0.0128551963716745,0.559565842151642,0.828686237335205,0.238352999091148,0.579603374004364,0.779261112213135,0.238352999091148,0.579603374004364,0.779261112213135,-0.0128551963716745,0.559565842151642,0.828686237335205,-0.0284083504229784,0.388819187879562,0.92087596654892,0.161575391888618,0.718051612377167,0.676975011825562,-0.00448658969253302,0.70710027217865,0.707098960876465,-0.0128551963716745,0.559565842151642,0.828686237335205,0.648952484130859,0.632420063018799,-0.422972232103348,0.675663471221924,0.717955410480499,-0.167388737201691,0.774272382259369,0.579404175281525,-0.254544824361801,0.648952484130859,0.632420063018799,-0.422972232103348,0.596534132957458,0.747062504291534,-0.293333441019058,0.675663471221924,0.717955410480499,-0.167388737201691, +-0.00448658969253302,0.70710027217865,0.707098960876465,-0.253642082214355,0.579679608345032,0.774362444877625,-0.0128551963716745,0.559565842151642,0.828686237335205,-0.00448658969253302,0.70710027217865,0.707098960876465,-0.168478816747665,0.718085646629333,0.675254046916962,-0.253642082214355,0.579679608345032,0.774362444877625,-0.0128551963716745,0.559565842151642,0.828686237335205,-0.398277014493942,0.426811069250107,0.81191611289978,-0.0284083504229784,0.388819187879562,0.92087596654892,-0.0128551963716745,0.559565842151642,0.828686237335205,-0.253642082214355,0.579679608345032,0.774362444877625,-0.398277014493942,0.426811069250107,0.81191611289978,-0.0284083504229784,0.388819187879562,0.92087596654892,-0.686433672904968,0.277833521366119,0.672024726867676,-0.147885590791702,0.197432726621628,0.96909761428833,-0.0284083504229784,0.388819187879562,0.92087596654892,-0.398277014493942,0.426811069250107,0.81191611289978,-0.686433672904968,0.277833521366119,0.672024726867676,-0.168478816747665,0.718085646629333,0.675254046916962,-0.422971397638321,0.632420897483826,0.64895224571228,-0.253642082214355,0.579679608345032,0.774362444877625,-0.168478816747665,0.718085646629333,0.675254046916962,-0.294741541147232,0.747075021266937,0.595824062824249,-0.422971397638321,0.632420897483826,0.64895224571228,-0.147885590791702,0.197432726621628,0.96909761428833,-0.686433672904968,0.277833521366119,0.672024726867676,-0.97760808467865,0.19923722743988,0.0677265524864197,-0.147885590791702,0.197432726621628,0.96909761428833,-0.97760808467865,0.19923722743988,0.0677265524864197,-0.800258100032806,0.000803627597633749,0.599655270576477,-0.686433672904968,0.277833521366119,0.672024726867676,-0.92060786485672,0.38872629404068,0.0370522066950798,-0.97760808467865,0.19923722743988,0.0677265524864197,-0.686433672904968,0.277833521366119,0.672024726867676,-0.812530040740967,0.426809430122375,0.397024720907211,-0.92060786485672,0.38872629404068,0.0370522066950798,-0.398277014493942,0.426811069250107,0.81191611289978,-0.812530040740967,0.426809430122375,0.397024720907211, +-0.686433672904968,0.277833521366119,0.672024726867676,-0.812530040740967,0.426809430122375,0.397024720907211,-0.828660190105438,0.559543967247009,0.0152615290135145,-0.92060786485672,0.38872629404068,0.0370522066950798,-0.253642082214355,0.579679608345032,0.774362444877625,-0.60440057516098,0.519038200378418,0.604399979114532,-0.398277014493942,0.426811069250107,0.81191611289978,-0.398277014493942,0.426811069250107,0.81191611289978,-0.60440057516098,0.519038200378418,0.604399979114532,-0.812530040740967,0.426809430122375,0.397024720907211,-0.253642082214355,0.579679608345032,0.774362444877625,-0.422971397638321,0.632420897483826,0.64895224571228,-0.60440057516098,0.519038200378418,0.604399979114532,-0.812530040740967,0.426809430122375,0.397024720907211,-0.774362444877625,0.579679429531097,0.253642499446869,-0.828660190105438,0.559543967247009,0.0152615290135145,-0.60440057516098,0.519038200378418,0.604399979114532,-0.774362444877625,0.579679429531097,0.253642499446869,-0.812530040740967,0.426809430122375,0.397024720907211,-0.774362444877625,0.579679429531097,0.253642499446869,-0.707099795341492,0.707103669643402,0.0037718613166362,-0.828660190105438,0.559543967247009,0.0152615290135145,-0.774362444877625,0.579679429531097,0.253642499446869,-0.675821602344513,0.718078672885895,0.166217222809792,-0.707099795341492,0.707103669643402,0.0037718613166362,-0.60440057516098,0.519038200378418,0.604399979114532,-0.64895236492157,0.632420718669891,0.422971546649933,-0.774362444877625,0.579679429531097,0.253642499446869,-0.64895236492157,0.632420718669891,0.422971546649933,-0.675821602344513,0.718078672885895,0.166217222809792,-0.774362444877625,0.579679429531097,0.253642499446869,-0.422971397638321,0.632420897483826,0.64895224571228,-0.64895236492157,0.632420718669891,0.422971546649933,-0.60440057516098,0.519038200378418,0.604399979114532,-0.64895236492157,0.632420718669891,0.422971546649933,-0.596533954143524,0.747062802314758,0.293333292007446,-0.675821602344513,0.718078672885895,0.166217222809792,-0.422971397638321,0.632420897483826,0.64895224571228, +-0.503615736961365,0.701955735683441,0.503616034984589,-0.64895236492157,0.632420718669891,0.422971546649933,-0.503615736961365,0.701955735683441,0.503616034984589,-0.596533954143524,0.747062802314758,0.293333292007446,-0.64895236492157,0.632420718669891,0.422971546649933,-0.294741541147232,0.747075021266937,0.595824062824249,-0.503615736961365,0.701955735683441,0.503616034984589,-0.422971397638321,0.632420897483826,0.64895224571228,-0.503615736961365,0.701955735683441,0.503616034984589,-0.498913437128067,0.784433960914612,0.368441045284271,-0.596533954143524,0.747062802314758,0.293333292007446,-0.294741541147232,0.747075021266937,0.595824062824249,-0.367534935474396,0.784420549869537,0.499602377414703,-0.503615736961365,0.701955735683441,0.503616034984589,-0.367534935474396,0.784420549869537,0.499602377414703,-0.498913437128067,0.784433960914612,0.368441045284271,-0.503615736961365,0.701955735683441,0.503616034984589,-0.367534935474396,0.784420549869537,0.499602377414703,-0.406800627708435,0.816494941711426,0.409694105386734,-0.498913437128067,0.784433960914612,0.368441045284271,-0.67572146654129,0.717955052852631,-0.16715595126152,-0.828660190105438,0.559543967247009,0.0152615290135145,-0.707099795341492,0.707103669643402,0.0037718613166362,-0.67572146654129,0.717955052852631,-0.16715595126152,-0.77843701839447,0.5793696641922,-0.241591677069664,-0.828660190105438,0.559543967247009,0.0152615290135145,-0.596795558929443,0.747057676315308,-0.29281359910965,-0.77843701839447,0.5793696641922,-0.241591677069664,-0.67572146654129,0.717955052852631,-0.16715595126152,-0.77843701839447,0.5793696641922,-0.241591677069664,-0.92060786485672,0.38872629404068,0.0370522066950798,-0.828660190105438,0.559543967247009,0.0152615290135145,-0.596795558929443,0.747057676315308,-0.29281359910965,-0.65206640958786,0.632389783859253,-0.41820153594017,-0.77843701839447,0.5793696641922,-0.241591677069664,-0.501579225063324,0.784376502037048,-0.364927172660828,-0.65206640958786,0.632389783859253,-0.41820153594017,-0.596795558929443,0.747057676315308,-0.29281359910965, +-0.77843701839447,0.5793696641922,-0.241591677069664,-0.819310903549194,0.42625480890274,-0.383453458547592,-0.92060786485672,0.38872629404068,0.0370522066950798,-0.65206640958786,0.632389783859253,-0.41820153594017,-0.819310903549194,0.42625480890274,-0.383453458547592,-0.77843701839447,0.5793696641922,-0.241591677069664,-0.819310903549194,0.42625480890274,-0.383453458547592,-0.97760808467865,0.19923722743988,0.0677265524864197,-0.92060786485672,0.38872629404068,0.0370522066950798,-0.501579225063324,0.784376502037048,-0.364927172660828,-0.50361567735672,0.701955556869507,-0.503616333007812,-0.65206640958786,0.632389783859253,-0.41820153594017,-0.409504324197769,0.816495478153229,-0.406990706920624,-0.50361567735672,0.701955556869507,-0.503616333007812,-0.501579225063324,0.784376502037048,-0.364927172660828,-0.409504324197769,0.816495478153229,-0.406990706920624,-0.365799427032471,0.784392237663269,-0.500918865203857,-0.50361567735672,0.701955556869507,-0.503616333007812,-0.65206640958786,0.632389783859253,-0.41820153594017,-0.604400813579559,0.519038259983063,-0.604399681091309,-0.819310903549194,0.42625480890274,-0.383453458547592,-0.50361567735672,0.701955556869507,-0.503616333007812,-0.604400813579559,0.519038259983063,-0.604399681091309,-0.65206640958786,0.632389783859253,-0.41820153594017,-0.819310903549194,0.42625480890274,-0.383453458547592,-0.698427855968475,0.276867240667343,-0.659956812858582,-0.97760808467865,0.19923722743988,0.0677265524864197,-0.604400813579559,0.519038259983063,-0.604399681091309,-0.698427855968475,0.276867240667343,-0.659956812858582,-0.819310903549194,0.42625480890274,-0.383453458547592,-0.698427855968475,0.276867240667343,-0.659956812858582,0.968590319156647,-0.000333244475768879,-0.248662173748016,-0.97760808467865,0.19923722743988,0.0677265524864197,-0.365799427032471,0.784392237663269,-0.500918865203857,-0.418201446533203,0.632389903068542,-0.65206640958786,-0.50361567735672,0.701955556869507,-0.503616333007812,-0.50361567735672,0.701955556869507,-0.503616333007812,-0.418201446533203,0.632389903068542,-0.65206640958786, +-0.604400813579559,0.519038259983063,-0.604399681091309,-0.365799427032471,0.784392237663269,-0.500918865203857,-0.291429609060287,0.747042715549469,-0.597491323947906,-0.418201446533203,0.632389903068542,-0.65206640958786,-0.604400813579559,0.519038259983063,-0.604399681091309,-0.380550563335419,0.426713585853577,-0.820424795150757,-0.698427855968475,0.276867240667343,-0.659956812858582,-0.418201446533203,0.632389903068542,-0.65206640958786,-0.380550563335419,0.426713585853577,-0.820424795150757,-0.604400813579559,0.519038259983063,-0.604399681091309,-0.291429609060287,0.747042715549469,-0.597491323947906,-0.238352820277214,0.579603314399719,-0.779260993003845,-0.418201446533203,0.632389903068542,-0.65206640958786,-0.418201446533203,0.632389903068542,-0.65206640958786,-0.238352820277214,0.579603314399719,-0.779260993003845,-0.380550563335419,0.426713585853577,-0.820424795150757,-0.291429609060287,0.747042715549469,-0.597491323947906,-0.161575704813004,0.718051373958588,-0.676975309848785,-0.238352820277214,0.579603314399719,-0.779260993003845,-0.380550563335419,0.426713585853577,-0.820424795150757,0.152835637331009,0.195984676480293,-0.968623399734497,-0.698427855968475,0.276867240667343,-0.659956812858582,-0.698427855968475,0.276867240667343,-0.659956812858582,0.152835637331009,0.195984676480293,-0.968623399734497,0.159701898694038,-0.00132294779177755,-0.987164437770844,-0.161575704813004,0.718051373958588,-0.676975309848785,0.0128547074273229,0.559565544128418,-0.82868629693985,-0.238352820277214,0.579603314399719,-0.779260993003845,-0.161575704813004,0.718051373958588,-0.676975309848785,0.00448640435934067,0.707099795341492,-0.707099437713623,0.0128547074273229,0.559565544128418,-0.82868629693985,-0.238352820277214,0.579603314399719,-0.779260993003845,0.0341410599648952,0.388749420642853,-0.920710682868958,-0.380550563335419,0.426713585853577,-0.820424795150757,-0.380550563335419,0.426713585853577,-0.820424795150757,0.0341410599648952,0.388749420642853,-0.920710682868958,0.152835637331009,0.195984676480293,-0.968623399734497, +-0.238352820277214,0.579603314399719,-0.779260993003845,0.0128547074273229,0.559565544128418,-0.82868629693985,0.0341410599648952,0.388749420642853,-0.920710682868958,0.00448640435934067,0.707099795341492,-0.707099437713623,0.253642559051514,0.579679250717163,-0.774362564086914,0.0128547074273229,0.559565544128418,-0.82868629693985,0.00448640435934067,0.707099795341492,-0.707099437713623,0.168479025363922,0.718085289001465,-0.675254285335541,0.253642559051514,0.579679250717163,-0.774362564086914,0.0128547074273229,0.559565544128418,-0.82868629693985,0.398544937372208,0.42681160569191,-0.811784386634827,0.0341410599648952,0.388749420642853,-0.920710682868958,0.0128547074273229,0.559565544128418,-0.82868629693985,0.253642559051514,0.579679250717163,-0.774362564086914,0.398544937372208,0.42681160569191,-0.811784386634827,0.0341410599648952,0.388749420642853,-0.920710682868958,0.679076671600342,0.276944786310196,-0.679820835590363,0.152835637331009,0.195984676480293,-0.968623399734497,0.0341410599648952,0.388749420642853,-0.920710682868958,0.398544937372208,0.42681160569191,-0.811784386634827,0.679076671600342,0.276944786310196,-0.679820835590363,0.168479025363922,0.718085289001465,-0.675254285335541,0.422971963882446,0.632420122623444,-0.648952603340149,0.253642559051514,0.579679250717163,-0.774362564086914,0.168479025363922,0.718085289001465,-0.675254285335541,0.294741183519363,0.747074842453003,-0.595824480056763,0.422971963882446,0.632420122623444,-0.648952603340149,0.152835637331009,0.195984676480293,-0.968623399734497,0.679076671600342,0.276944786310196,-0.679820835590363,0.977992594242096,0.19913823902607,-0.0622444488108158,0.152835637331009,0.195984676480293,-0.968623399734497,0.977992594242096,0.19913823902607,-0.0622444488108158,0.816691219806671,-0.000773366075009108,-0.577074527740479,0.679076671600342,0.276944786310196,-0.679820835590363,0.920718789100647,0.388671368360519,-0.0348047502338886,0.977992594242096,0.19913823902607,-0.0622444488108158,0.679076671600342,0.276944786310196,-0.679820835590363,0.811717748641968,0.426308155059814,-0.399218767881393, +0.920718789100647,0.388671368360519,-0.0348047502338886,0.398544937372208,0.42681160569191,-0.811784386634827,0.811717748641968,0.426308155059814,-0.399218767881393,0.679076671600342,0.276944786310196,-0.679820835590363,0.253642559051514,0.579679250717163,-0.774362564086914,0.604400455951691,0.519038140773773,-0.604400098323822,0.398544937372208,0.42681160569191,-0.811784386634827,0.398544937372208,0.42681160569191,-0.811784386634827,0.604400455951691,0.519038140773773,-0.604400098323822,0.811717748641968,0.426308155059814,-0.399218767881393,0.253642559051514,0.579679250717163,-0.774362564086914,0.422971963882446,0.632420122623444,-0.648952603340149,0.604400455951691,0.519038140773773,-0.604400098323822,0.604400455951691,0.519038140773773,-0.604400098323822,0.774272382259369,0.579404175281525,-0.254544824361801,0.811717748641968,0.426308155059814,-0.399218767881393,0.604400455951691,0.519038140773773,-0.604400098323822,0.648952484130859,0.632420063018799,-0.422972232103348,0.774272382259369,0.579404175281525,-0.254544824361801,0.422971963882446,0.632420122623444,-0.648952603340149,0.648952484130859,0.632420063018799,-0.422972232103348,0.604400455951691,0.519038140773773,-0.604400098323822,0.294741183519363,0.747074842453003,-0.595824480056763,0.503616154193878,0.701955378055573,-0.503616392612457,0.422971963882446,0.632420122623444,-0.648952603340149,0.422971963882446,0.632420122623444,-0.648952603340149,0.503616154193878,0.701955378055573,-0.503616392612457,0.648952484130859,0.632420063018799,-0.422972232103348,0.503616154193878,0.701955378055573,-0.503616392612457,0.596534132957458,0.747062504291534,-0.293333441019058,0.648952484130859,0.632420063018799,-0.422972232103348,0.294741183519363,0.747074842453003,-0.595824480056763,0.367534965276718,0.784420371055603,-0.499602645635605,0.503616154193878,0.701955378055573,-0.503616392612457,0.503616154193878,0.701955378055573,-0.503616392612457,0.498913466930389,0.784433901309967,-0.368441134691238,0.596534132957458,0.747062504291534,-0.293333441019058,0.367534965276718,0.784420371055603,-0.499602645635605, +0.498913466930389,0.784433901309967,-0.368441134691238,0.503616154193878,0.701955378055573,-0.503616392612457,0.367534965276718,0.784420371055603,-0.499602645635605,0.406800538301468,0.816494882106781,-0.409694135189056,0.498913466930389,0.784433901309967,-0.368441134691238,-0.689247965812683,0.277819722890854,-0.669143855571747,0.154265478253365,0,-0.988029420375824,0.156949728727341,0.197153359651566,-0.967727959156036,-0.38059401512146,0.42671412229538,-0.820404231548309,-0.689247965812683,0.277819722890854,-0.669143855571747,0.156949728727341,0.197153359651566,-0.967727959156036,-0.604400932788849,0.519038140773773,-0.604399621486664,-0.689247965812683,0.277819722890854,-0.669143855571747,-0.38059401512146,0.42671412229538,-0.820404231548309,-0.604400932788849,0.519038140773773,-0.604399621486664,-0.818481981754303,0.426751136779785,-0.384669691324234,-0.689247965812683,0.277819722890854,-0.669143855571747,-0.818481981754303,0.426751136779785,-0.384669691324234,-0.979111969470978,0.199472695589066,0.0393735654652119,-0.689247965812683,0.277819722890854,-0.669143855571747,-0.689247965812683,0.277819722890854,-0.669143855571747,-0.979111969470978,0.199472695589066,0.0393735654652119,0.969123780727386,0,-0.246574819087982,-0.38059401512146,0.42671412229538,-0.820404231548309,0.156949728727341,0.197153359651566,-0.967727959156036,0.0340682007372379,0.388750970363617,-0.920712828636169,-0.418201714754105,0.632390081882477,-0.652066051959991,-0.604400932788849,0.519038140773773,-0.604399621486664,-0.38059401512146,0.42671412229538,-0.820404231548309,-0.238350689411163,0.579603314399719,-0.779261767864227,-0.38059401512146,0.42671412229538,-0.820404231548309,0.0340682007372379,0.388750970363617,-0.920712828636169,-0.418201714754105,0.632390081882477,-0.652066051959991,-0.38059401512146,0.42671412229538,-0.820404231548309,-0.238350689411163,0.579603314399719,-0.779261767864227,-0.65206640958786,0.632389903068542,-0.418201327323914,-0.818481981754303,0.426751136779785,-0.384669691324234,-0.604400932788849,0.519038140773773,-0.604399621486664, +-0.503615736961365,0.70195597410202,-0.503615915775299,-0.604400932788849,0.519038140773773,-0.604399621486664,-0.418201714754105,0.632390081882477,-0.652066051959991,-0.503615736961365,0.70195597410202,-0.503615915775299,-0.65206640958786,0.632389903068542,-0.418201327323914,-0.604400932788849,0.519038140773773,-0.604399621486664,-0.292814314365387,0.747057974338531,-0.596794962882996,-0.418201714754105,0.632390081882477,-0.652066051959991,-0.238350689411163,0.579603314399719,-0.779261767864227,-0.364927560091019,0.784376561641693,-0.501578688621521,-0.418201714754105,0.632390081882477,-0.652066051959991,-0.292814314365387,0.747057974338531,-0.596794962882996,-0.364927560091019,0.784376561641693,-0.501578688621521,-0.503615736961365,0.70195597410202,-0.503615915775299,-0.418201714754105,0.632390081882477,-0.652066051959991,-0.406990051269531,0.816495299339294,-0.409505188465118,-0.503615736961365,0.70195597410202,-0.503615915775299,-0.364927560091019,0.784376561641693,-0.501578688621521,-0.406990051269531,0.816495299339294,-0.409505188465118,-0.500918865203857,0.784392118453979,-0.365799397230148,-0.503615736961365,0.70195597410202,-0.503615915775299,-0.500918865203857,0.784392118453979,-0.365799397230148,-0.65206640958786,0.632389903068542,-0.418201327323914,-0.503615736961365,0.70195597410202,-0.503615915775299,-0.292814314365387,0.747057974338531,-0.596794962882996,-0.238350689411163,0.579603314399719,-0.779261767864227,-0.163807645440102,0.718066513538361,-0.676422595977783,-0.500918865203857,0.784392118453979,-0.365799397230148,-0.597491264343262,0.747042834758759,-0.291429460048676,-0.65206640958786,0.632389903068542,-0.418201327323914,-0.163807645440102,0.718066513538361,-0.676422595977783,-0.238350689411163,0.579603314399719,-0.779261767864227,0.0128099890425801,0.559565842151642,-0.828686773777008,-0.238350689411163,0.579603314399719,-0.779261767864227,0.0340682007372379,0.388750970363617,-0.920712828636169,0.0128099890425801,0.559565842151642,-0.828686773777008,-0.163807645440102,0.718066513538361,-0.676422595977783, +0.0128099890425801,0.559565842151642,-0.828686773777008,0.00226237624883652,0.707105100154877,-0.707104861736298,-0.597491264343262,0.747042834758759,-0.291429460048676,-0.779261767864227,0.57960319519043,-0.238351076841354,-0.65206640958786,0.632389903068542,-0.418201327323914,-0.65206640958786,0.632389903068542,-0.418201327323914,-0.779261767864227,0.57960319519043,-0.238351076841354,-0.818481981754303,0.426751136779785,-0.384669691324234,-0.597491264343262,0.747042834758759,-0.291429460048676,-0.67697548866272,0.718051075935364,-0.161576226353645,-0.779261767864227,0.57960319519043,-0.238351076841354,0.253652036190033,0.579679131507874,-0.77435964345932,0.00226237624883652,0.707105100154877,-0.707104861736298,0.0128099890425801,0.559565842151642,-0.828686773777008,0.253652036190033,0.579679131507874,-0.77435964345932,0.166216611862183,0.718078255653381,-0.675822198390961,0.00226237624883652,0.707105100154877,-0.707104861736298,0.398589432239532,0.426811426877975,-0.811762630939484,0.0128099890425801,0.559565842151642,-0.828686773777008,0.0340682007372379,0.388750970363617,-0.920712828636169,0.398589432239532,0.426811426877975,-0.811762630939484,0.253652036190033,0.579679131507874,-0.77435964345932,0.0128099890425801,0.559565842151642,-0.828686773777008,-0.779261767864227,0.57960319519043,-0.238351076841354,-0.920755505561829,0.388769268989563,0.0326780565083027,-0.818481981754303,0.426751136779785,-0.384669691324234,-0.818481981754303,0.426751136779785,-0.384669691324234,-0.920755505561829,0.388769268989563,0.0326780565083027,-0.979111969470978,0.199472695589066,0.0393735654652119,-0.67697548866272,0.718051075935364,-0.161576226353645,-0.828681409358978,0.559562206268311,0.0133175970986485,-0.779261767864227,0.57960319519043,-0.238351076841354,-0.779261767864227,0.57960319519043,-0.238351076841354,-0.828681409358978,0.559562206268311,0.0133175970986485,-0.920755505561829,0.388769268989563,0.0326780565083027,-0.67697548866272,0.718051075935364,-0.161576226353645,-0.707099914550781,0.707099258899689,0.00448642997071147, +-0.828681409358978,0.559562206268311,0.0133175970986485,0.422971308231354,0.632420599460602,-0.648952603340149,0.166216611862183,0.718078255653381,-0.675822198390961,0.253652036190033,0.579679131507874,-0.77435964345932,0.422971308231354,0.632420599460602,-0.648952603340149,0.293334782123566,0.747062861919403,-0.596533179283142,0.166216611862183,0.718078255653381,-0.675822198390961,-0.707099914550781,0.707099258899689,0.00448642997071147,-0.77438086271286,0.579679191112518,0.253586858510971,-0.828681409358978,0.559562206268311,0.0133175970986485,-0.707099914550781,0.707099258899689,0.00448642997071147,-0.67525440454483,0.718085110187531,0.168479174375534,-0.77438086271286,0.579679191112518,0.253586858510971,-0.828681409358978,0.559562206268311,0.0133175970986485,-0.812828481197357,0.426808804273605,0.39641410112381,-0.920755505561829,0.388769268989563,0.0326780565083027,-0.828681409358978,0.559562206268311,0.0133175970986485,-0.77438086271286,0.579679191112518,0.253586858510971,-0.812828481197357,0.426808804273605,0.39641410112381,-0.920755505561829,0.388769268989563,0.0326780565083027,-0.678987562656403,0.277847766876221,0.679541349411011,-0.979111969470978,0.199472695589066,0.0393735654652119,-0.920755505561829,0.388769268989563,0.0326780565083027,-0.812828481197357,0.426808804273605,0.39641410112381,-0.678987562656403,0.277847766876221,0.679541349411011,-0.67525440454483,0.718085110187531,0.168479174375534,-0.64895236492157,0.632420837879181,0.422971278429031,-0.77438086271286,0.579679191112518,0.253586858510971,-0.67525440454483,0.718085110187531,0.168479174375534,-0.595823705196381,0.747075140476227,0.294741690158844,-0.64895236492157,0.632420837879181,0.422971278429031,-0.77438086271286,0.579679191112518,0.253586858510971,-0.604879140853882,0.519038021564484,0.603921115398407,-0.812828481197357,0.426808804273605,0.39641410112381,-0.77438086271286,0.579679191112518,0.253586858510971,-0.64895236492157,0.632420837879181,0.422971278429031,-0.604879140853882,0.519038021564484,0.603921115398407,-0.595823705196381,0.747075140476227,0.294741690158844, +-0.50361579656601,0.701955914497375,0.503615856170654,-0.64895236492157,0.632420837879181,0.422971278429031,-0.595823705196381,0.747075140476227,0.294741690158844,-0.499602377414703,0.784420490264893,0.367534846067429,-0.50361579656601,0.701955914497375,0.503615856170654,-0.499602377414703,0.784420490264893,0.367534846067429,-0.368441134691238,0.784433901309967,0.498913437128067,-0.50361579656601,0.701955914497375,0.503615856170654,-0.499602377414703,0.784420490264893,0.367534846067429,-0.409694314002991,0.816494882106781,0.406800597906113,-0.368441134691238,0.784433901309967,0.498913437128067,-0.50361579656601,0.701955914497375,0.503615856170654,-0.368441134691238,0.784433901309967,0.498913437128067,-0.293334722518921,0.747063040733337,0.596533119678497,-0.64895236492157,0.632420837879181,0.422971278429031,-0.50361579656601,0.701955914497375,0.503615856170654,-0.422971427440643,0.632420897483826,0.64895224571228,-0.50361579656601,0.701955914497375,0.503615856170654,-0.293334722518921,0.747063040733337,0.596533119678497,-0.422971427440643,0.632420897483826,0.64895224571228,-0.64895236492157,0.632420837879181,0.422971278429031,-0.422971427440643,0.632420897483826,0.64895224571228,-0.604879140853882,0.519038021564484,0.603921115398407,-0.422971427440643,0.632420897483826,0.64895224571228,-0.293334722518921,0.747063040733337,0.596533119678497,-0.166216373443604,0.718078255653381,0.675822257995605,-0.422971427440643,0.632420897483826,0.64895224571228,-0.166216373443604,0.718078255653381,0.675822257995605,-0.253640115261078,0.579679369926453,0.774363338947296,-0.604879140853882,0.519038021564484,0.603921115398407,-0.422971427440643,0.632420897483826,0.64895224571228,-0.253640115261078,0.579679369926453,0.774363338947296,-0.253640115261078,0.579679369926453,0.774363338947296,-0.166216373443604,0.718078255653381,0.675822257995605,-0.00226269965060055,0.707104861736298,0.707105100154877,-0.812828481197357,0.426808804273605,0.39641410112381,-0.604879140853882,0.519038021564484,0.603921115398407,-0.398721754550934,0.426811635494232,0.811697483062744, +-0.604879140853882,0.519038021564484,0.603921115398407,-0.253640115261078,0.579679369926453,0.774363338947296,-0.398721754550934,0.426811635494232,0.811697483062744,-0.812828481197357,0.426808804273605,0.39641410112381,-0.398721754550934,0.426811635494232,0.811697483062744,-0.678987562656403,0.277847766876221,0.679541349411011,-0.253640115261078,0.579679369926453,0.774363338947296,-0.00226269965060055,0.707104861736298,0.707105100154877,-0.013301158323884,0.5595623254776,0.828681468963623,-0.398721754550934,0.426811635494232,0.811697483062744,-0.253640115261078,0.579679369926453,0.774363338947296,-0.013301158323884,0.5595623254776,0.828681468963623,0.163807988166809,0.718066215515137,0.676422834396362,-0.013301158323884,0.5595623254776,0.828681468963623,-0.00226269965060055,0.707104861736298,0.707105100154877,-0.678987562656403,0.277847766876221,0.679541349411011,-0.398721754550934,0.426811635494232,0.811697483062744,-0.0283855646848679,0.388820022344589,0.920876383781433,-0.398721754550934,0.426811635494232,0.811697483062744,-0.013301158323884,0.5595623254776,0.828681468963623,-0.0283855646848679,0.388820022344589,0.920876383781433,0.163807988166809,0.718066215515137,0.676422834396362,0.238739013671875,0.579606890678406,0.77914035320282,-0.013301158323884,0.5595623254776,0.828681468963623,0.238739013671875,0.579606890678406,0.77914035320282,-0.0283855646848679,0.388820022344589,0.920876383781433,-0.013301158323884,0.5595623254776,0.828681468963623,0.292814195156097,0.747057795524597,0.596795201301575,0.238739013671875,0.579606890678406,0.77914035320282,0.163807988166809,0.718066215515137,0.676422834396362,-0.678987562656403,0.277847766876221,0.679541349411011,-0.0283855646848679,0.388820022344589,0.920876383781433,-0.141187250614166,0.197627753019333,0.970056474208832,-0.979111969470978,0.199472695589066,0.0393735654652119,-0.678987562656403,0.277847766876221,0.679541349411011,-0.141187250614166,0.197627753019333,0.970056474208832,-0.979111969470978,0.199472695589066,0.0393735654652119,-0.141187250614166,0.197627753019333,0.970056474208832, +-0.802713990211487,-0,0.596364200115204,0.292814195156097,0.747057795524597,0.596795201301575,0.418201565742493,0.632389843463898,0.652066349983215,0.238739013671875,0.579606890678406,0.77914035320282,0.364927053451538,0.784376561641693,0.501579284667969,0.418201565742493,0.632389843463898,0.652066349983215,0.292814195156097,0.747057795524597,0.596795201301575,0.238739013671875,0.579606890678406,0.77914035320282,0.38033053278923,0.426711231470108,0.820528030395508,-0.0283855646848679,0.388820022344589,0.920876383781433,0.38033053278923,0.426711231470108,0.820528030395508,-0.141187250614166,0.197627753019333,0.970056474208832,-0.0283855646848679,0.388820022344589,0.920876383781433,0.418201565742493,0.632389843463898,0.652066349983215,0.38033053278923,0.426711231470108,0.820528030395508,0.238739013671875,0.579606890678406,0.77914035320282,0.364927053451538,0.784376561641693,0.501579284667969,0.503615975379944,0.701955914497375,0.50361567735672,0.418201565742493,0.632389843463898,0.652066349983215,0.406990706920624,0.816495418548584,0.409504503011703,0.503615975379944,0.701955914497375,0.50361567735672,0.364927053451538,0.784376561641693,0.501579284667969,0.406990706920624,0.816495418548584,0.409504503011703,0.500918507575989,0.784392297267914,0.365799695253372,0.503615975379944,0.701955914497375,0.50361567735672,0.38033053278923,0.426711231470108,0.820528030395508,0.717324614524841,0.277422726154327,0.639126062393188,-0.141187250614166,0.197627753019333,0.970056474208832,0.717324614524841,0.277422726154327,0.639126062393188,-0.148334518074989,-0,0.988937258720398,-0.141187250614166,0.197627753019333,0.970056474208832,0.418201565742493,0.632389843463898,0.652066349983215,0.604570150375366,0.519037842750549,0.604230582714081,0.38033053278923,0.426711231470108,0.820528030395508,0.503615975379944,0.701955914497375,0.50361567735672,0.604570150375366,0.519037842750549,0.604230582714081,0.418201565742493,0.632389843463898,0.652066349983215,0.604570150375366,0.519037842750549,0.604230582714081,0.717324614524841,0.277422726154327,0.639126062393188, +0.38033053278923,0.426711231470108,0.820528030395508,0.500918507575989,0.784392297267914,0.365799695253372,0.652066290378571,0.632389903068542,0.41820165514946,0.503615975379944,0.701955914497375,0.50361567735672,0.503615975379944,0.701955914497375,0.50361567735672,0.652066290378571,0.632389903068542,0.41820165514946,0.604570150375366,0.519037842750549,0.604230582714081,0.500918507575989,0.784392297267914,0.365799695253372,0.597490966320038,0.747043371200562,0.291428804397583,0.652066290378571,0.632389903068542,0.41820165514946,0.604570150375366,0.519037842750549,0.604230582714081,0.818549931049347,0.426749587059021,0.384526759386063,0.717324614524841,0.277422726154327,0.639126062393188,0.652066290378571,0.632389903068542,0.41820165514946,0.818549931049347,0.426749587059021,0.384526759386063,0.604570150375366,0.519037842750549,0.604230582714081,0.597490966320038,0.747043371200562,0.291428804397583,0.778547704219818,0.579623937606812,0.240623235702515,0.652066290378571,0.632389903068542,0.41820165514946,0.652066290378571,0.632389903068542,0.41820165514946,0.778547704219818,0.579623937606812,0.240623235702515,0.818549931049347,0.426749587059021,0.384526759386063,0.597490966320038,0.747043371200562,0.291428804397583,0.676442980766296,0.718066334724426,0.163724645972252,0.778547704219818,0.579623937606812,0.240623235702515,0.818549931049347,0.426749587059021,0.384526759386063,0.97786557674408,0.199218615889549,-0.0639602616429329,0.717324614524841,0.277422726154327,0.639126062393188,0.717324614524841,0.277422726154327,0.639126062393188,0.97786557674408,0.199218615889549,-0.0639602616429329,-0.979460000991821,-0,0.201638430356979,0.818549931049347,0.426749587059021,0.384526759386063,0.920585095882416,0.388696700334549,-0.037919957190752,0.97786557674408,0.199218615889549,-0.0639602616429329,0.778547704219818,0.579623937606812,0.240623235702515,0.920585095882416,0.388696700334549,-0.037919957190752,0.818549931049347,0.426749587059021,0.384526759386063,0.778547704219818,0.579623937606812,0.240623235702515,0.828648388385773,0.559540092945099,-0.0160230491310358, +0.920585095882416,0.388696700334549,-0.037919957190752,0.676442980766296,0.718066334724426,0.163724645972252,0.828648388385773,0.559540092945099,-0.0160230491310358,0.778547704219818,0.579623937606812,0.240623235702515,0.676442980766296,0.718066334724426,0.163724645972252,0.707088530063629,0.707089185714722,-0.00710760708898306,0.828648388385773,0.559540092945099,-0.0160230491310358,0.499602526426315,0.784420609474182,-0.367534399032593,0.409694254398346,0.816494941711426,-0.406800478696823,0.368440628051758,0.784433960914612,-0.498913675546646,0.499602526426315,0.784420609474182,-0.367534399032593,0.368440628051758,0.784433960914612,-0.498913675546646,0.50361579656601,0.701955914497375,-0.503615856170654,0.50361579656601,0.701955914497375,-0.503615856170654,0.368440628051758,0.784433960914612,-0.498913675546646,0.293334782123566,0.747062861919403,-0.596533179283142,0.595823168754578,0.747075736522675,-0.294741660356522,0.499602526426315,0.784420609474182,-0.367534399032593,0.50361579656601,0.701955914497375,-0.503615856170654,0.50361579656601,0.701955914497375,-0.503615856170654,0.293334782123566,0.747062861919403,-0.596533179283142,0.422971308231354,0.632420599460602,-0.648952603340149,0.595823168754578,0.747075736522675,-0.294741660356522,0.50361579656601,0.701955914497375,-0.503615856170654,0.648952126502991,0.632420897483826,-0.422971457242966,0.648952126502991,0.632420897483826,-0.422971457242966,0.50361579656601,0.701955914497375,-0.503615856170654,0.422971308231354,0.632420599460602,-0.648952603340149,0.675253927707672,0.718085825443268,-0.168478474020958,0.595823168754578,0.747075736522675,-0.294741660356522,0.648952126502991,0.632420897483826,-0.422971457242966,0.648952126502991,0.632420897483826,-0.422971457242966,0.422971308231354,0.632420599460602,-0.648952603340149,0.604429483413696,0.519037902355194,-0.60437136888504,0.604429483413696,0.519037902355194,-0.60437136888504,0.422971308231354,0.632420599460602,-0.648952603340149,0.253652036190033,0.579679131507874,-0.77435964345932,0.604429483413696,0.519037902355194,-0.60437136888504, +0.253652036190033,0.579679131507874,-0.77435964345932,0.398589432239532,0.426811426877975,-0.811762630939484,0.675253927707672,0.718085825443268,-0.168478474020958,0.648952126502991,0.632420897483826,-0.422971457242966,0.774363279342651,0.579679369926453,-0.253640234470367,0.774363279342651,0.579679369926453,-0.253640234470367,0.648952126502991,0.632420897483826,-0.422971457242966,0.604429483413696,0.519037902355194,-0.60437136888504,0.707088530063629,0.707089185714722,-0.00710760708898306,0.675253927707672,0.718085825443268,-0.168478474020958,0.774363279342651,0.579679369926453,-0.253640234470367,0.707088530063629,0.707089185714722,-0.00710760708898306,0.774363279342651,0.579679369926453,-0.253640234470367,0.828648388385773,0.559540092945099,-0.0160230491310358,0.774363279342651,0.579679369926453,-0.253640234470367,0.604429483413696,0.519037902355194,-0.60437136888504,0.811791837215424,0.426811099052429,-0.398530095815659,0.828648388385773,0.559540092945099,-0.0160230491310358,0.774363279342651,0.579679369926453,-0.253640234470367,0.811791837215424,0.426811099052429,-0.398530095815659,0.811791837215424,0.426811099052429,-0.398530095815659,0.604429483413696,0.519037902355194,-0.60437136888504,0.398589432239532,0.426811426877975,-0.811762630939484,0.828648388385773,0.559540092945099,-0.0160230491310358,0.811791837215424,0.426811099052429,-0.398530095815659,0.920585095882416,0.388696700334549,-0.037919957190752,0.811791837215424,0.426811099052429,-0.398530095815659,0.398589432239532,0.426811426877975,-0.811762630939484,0.679307579994202,0.277847766876221,-0.679221510887146,0.920585095882416,0.388696700334549,-0.037919957190752,0.811791837215424,0.426811099052429,-0.398530095815659,0.679307579994202,0.277847766876221,-0.679221510887146,0.679307579994202,0.277847766876221,-0.679221510887146,0.398589432239532,0.426811426877975,-0.811762630939484,0.0340682007372379,0.388750970363617,-0.920712828636169,0.920585095882416,0.388696700334549,-0.037919957190752,0.679307579994202,0.277847766876221,-0.679221510887146,0.97786557674408,0.199218615889549,-0.0639602616429329, +0.679307579994202,0.277847766876221,-0.679221510887146,0.0340682007372379,0.388750970363617,-0.920712828636169,0.156949728727341,0.197153359651566,-0.967727959156036,0.97786557674408,0.199218615889549,-0.0639602616429329,0.679307579994202,0.277847766876221,-0.679221510887146,0.156949728727341,0.197153359651566,-0.967727959156036,0.97786557674408,0.199218615889549,-0.0639602616429329,0.156949728727341,0.197153359651566,-0.967727959156036,0.824685096740723,0,-0.565592169761658,0.498913466930389,0.784433901309967,-0.368441134691238,0.406800538301468,0.816494882106781,-0.409694135189056,0.34064382314682,0.876967132091522,-0.33895480632782,0.498913466930389,0.784433901309967,-0.368441134691238,0.34064382314682,0.876967132091522,-0.33895480632782,0.410676091909409,0.868102073669434,-0.278825998306274,0.596534132957458,0.747062504291534,-0.293333441019058,0.498913466930389,0.784433901309967,-0.368441134691238,0.410676091909409,0.868102073669434,-0.278825998306274,0.410676091909409,0.868102073669434,-0.278825998306274,0.34064382314682,0.876967132091522,-0.33895480632782,0.241450533270836,0.940026760101318,-0.240938380360603,0.596534132957458,0.747062504291534,-0.293333441019058,0.410676091909409,0.868102073669434,-0.278825998306274,0.483311176300049,0.84968626499176,-0.210816323757172,0.675663471221924,0.717955410480499,-0.167388737201691,0.596534132957458,0.747062504291534,-0.293333441019058,0.483311176300049,0.84968626499176,-0.210816323757172,0.410676091909409,0.868102073669434,-0.278825998306274,0.241450533270836,0.940026760101318,-0.240938380360603,0.289730042219162,0.93703293800354,-0.195001915097237,0.483311176300049,0.84968626499176,-0.210816323757172,0.410676091909409,0.868102073669434,-0.278825998306274,0.289730042219162,0.93703293800354,-0.195001915097237,0.289730042219162,0.93703293800354,-0.195001915097237,0.241450533270836,0.940026760101318,-0.240938380360603,0.125202551484108,0.984224319458008,-0.125007778406143,0.675663471221924,0.717955410480499,-0.167388737201691,0.483311176300049,0.84968626499176,-0.210816323757172, +0.538500666618347,0.834553897380829,-0.116347767412663,0.707106113433838,0.707099437713623,-0.00334813562221825,0.675663471221924,0.717955410480499,-0.167388737201691,0.538500666618347,0.834553897380829,-0.116347767412663,0.289730042219162,0.93703293800354,-0.195001915097237,0.125202551484108,0.984224319458008,-0.125007778406143,0.149850577116013,0.98356819152832,-0.10068878531456,0.149850577116013,0.98356819152832,-0.10068878531456,0.125202551484108,0.984224319458008,-0.125007778406143,0.0317858532071114,0.998989343643188,-0.0317799746990204,0.483311176300049,0.84968626499176,-0.210816323757172,0.289730042219162,0.93703293800354,-0.195001915097237,0.338062673807144,0.930212736129761,-0.142891362309456,0.538500666618347,0.834553897380829,-0.116347767412663,0.483311176300049,0.84968626499176,-0.210816323757172,0.338062673807144,0.930212736129761,-0.142891362309456,0.338062673807144,0.930212736129761,-0.142891362309456,0.289730042219162,0.93703293800354,-0.195001915097237,0.149850577116013,0.98356819152832,-0.10068878531456,0.707106113433838,0.707099437713623,-0.00334813562221825,0.538500666618347,0.834553897380829,-0.116347767412663,0.55960214138031,0.828761398792267,-0.000288711948087439,0.676422595977783,0.718066513538361,0.163807451725006,0.707106113433838,0.707099437713623,-0.00334813562221825,0.55960214138031,0.828761398792267,-0.000288711948087439,0.149850577116013,0.98356819152832,-0.10068878531456,0.0317858532071114,0.998989343643188,-0.0317799746990204,0.0379303470253944,0.998951852321625,-0.0256229266524315,-0.0318746492266655,0.998983323574066,0.0318825729191303,0.0379303470253944,0.998951852321625,-0.0256229266524315,0.0317858532071114,0.998989343643188,-0.0317799746990204,0.338062673807144,0.930212736129761,-0.142891362309456,0.149850577116013,0.98356819152832,-0.10068878531456,0.17401959002018,0.982029378414154,-0.0730440691113472,0.17401959002018,0.982029378414154,-0.0730440691113472,0.149850577116013,0.98356819152832,-0.10068878531456,0.0379303470253944,0.998951852321625,-0.0256229266524315,0.538500666618347,0.834553897380829,-0.116347767412663, +0.338062673807144,0.930212736129761,-0.142891362309456,0.374772071838379,0.923810660839081,-0.0782288163900375,0.55960214138031,0.828761398792267,-0.000288711948087439,0.538500666618347,0.834553897380829,-0.116347767412663,0.374772071838379,0.923810660839081,-0.0782288163900375,0.374772071838379,0.923810660839081,-0.0782288163900375,0.338062673807144,0.930212736129761,-0.142891362309456,0.17401959002018,0.982029378414154,-0.0730440691113472,0.676422595977783,0.718066513538361,0.163807451725006,0.55960214138031,0.828761398792267,-0.000288711948087439,0.538384139537811,0.834601581096649,0.116545341908932,0.596795260906219,0.747057497501373,0.292814761400223,0.676422595977783,0.718066513538361,0.163807451725006,0.538384139537811,0.834601581096649,0.116545341908932,-0.0318746492266655,0.998983323574066,0.0318825729191303,-0.0380408614873886,0.998945593833923,0.0257013291120529,0.0379303470253944,0.998951852321625,-0.0256229266524315,-0.1250951141119,0.984200179576874,0.125303953886032,-0.0380408614873886,0.998945593833923,0.0257013291120529,-0.0318746492266655,0.998983323574066,0.0318825729191303,0.55960214138031,0.828761398792267,-0.000288711948087439,0.374772071838379,0.923810660839081,-0.0782288163900375,0.388966917991638,0.921250760555267,-0.0013745945179835,0.538384139537811,0.834601581096649,0.116545341908932,0.55960214138031,0.828761398792267,-0.000288711948087439,0.388966917991638,0.921250760555267,-0.0013745945179835,0.17401959002018,0.982029378414154,-0.0730440691113472,0.0379303470253944,0.998951852321625,-0.0256229266524315,0.0439198091626167,0.998862504959106,-0.018568055704236,-0.0380408614873886,0.998945593833923,0.0257013291120529,0.0439198091626167,0.998862504959106,-0.018568055704236,0.0379303470253944,0.998951852321625,-0.0256229266524315,0.374772071838379,0.923810660839081,-0.0782288163900375,0.17401959002018,0.982029378414154,-0.0730440691113472,0.19245545566082,0.980472028255463,-0.0404427573084831,0.388966917991638,0.921250760555267,-0.0013745945179835,0.374772071838379,0.923810660839081,-0.0782288163900375, +0.19245545566082,0.980472028255463,-0.0404427573084831,0.19245545566082,0.980472028255463,-0.0404427573084831,0.17401959002018,0.982029378414154,-0.0730440691113472,0.0439198091626167,0.998862504959106,-0.018568055704236,0.596795260906219,0.747057497501373,0.292814761400223,0.538384139537811,0.834601581096649,0.116545341908932,0.483281642198563,0.849686682224274,0.210882499814034,0.5015789270401,0.784376621246338,0.364927440881729,0.596795260906219,0.747057497501373,0.292814761400223,0.483281642198563,0.849686682224274,0.210882499814034,-0.1250951141119,0.984200179576874,0.125303953886032,-0.149932473897934,0.983543813228607,0.100806333124638,-0.0380408614873886,0.998945593833923,0.0257013291120529,-0.240938752889633,0.940026581287384,0.241450771689415,-0.149932473897934,0.983543813228607,0.100806333124638,-0.1250951141119,0.984200179576874,0.125303953886032,0.538384139537811,0.834601581096649,0.116545341908932,0.388966917991638,0.921250760555267,-0.0013745945179835,0.375029146671295,0.923822283744812,0.0768460929393768,0.483281642198563,0.849686682224274,0.210882499814034,0.538384139537811,0.834601581096649,0.116545341908932,0.375029146671295,0.923822283744812,0.0768460929393768,0.388966917991638,0.921250760555267,-0.0013745945179835,0.19245545566082,0.980472028255463,-0.0404427573084831,0.200001046061516,0.979794561862946,-0.00148678210098296,0.375029146671295,0.923822283744812,0.0768460929393768,0.388966917991638,0.921250760555267,-0.0013745945179835,0.200001046061516,0.979794561862946,-0.00148678210098296,0.19245545566082,0.980472028255463,-0.0404427573084831,0.0439198091626167,0.998862504959106,-0.018568055704236,0.0484561286866665,0.998761177062988,-0.0113180745393038,0.200001046061516,0.979794561862946,-0.00148678210098296,0.19245545566082,0.980472028255463,-0.0404427573084831,0.0484561286866665,0.998761177062988,-0.0113180745393038,-0.0380408614873886,0.998945593833923,0.0257013291120529,-0.0440459586679935,0.998855888843536,0.0186186172068119,0.0439198091626167,0.998862504959106,-0.018568055704236,-0.149932473897934,0.983543813228607,0.100806333124638, +-0.0440459586679935,0.998855888843536,0.0186186172068119,-0.0380408614873886,0.998945593833923,0.0257013291120529,-0.0440459586679935,0.998855888843536,0.0186186172068119,0.0484561286866665,0.998761177062988,-0.0113180745393038,0.0439198091626167,0.998862504959106,-0.018568055704236,0.5015789270401,0.784376621246338,0.364927440881729,0.483281642198563,0.849686682224274,0.210882499814034,0.412074416875839,0.868086457252502,0.276804029941559,0.409504741430283,0.816495478153229,0.406990110874176,0.5015789270401,0.784376621246338,0.364927440881729,0.412074416875839,0.868086457252502,0.276804029941559,0.409504741430283,0.816495478153229,0.406990110874176,0.412074416875839,0.868086457252502,0.276804029941559,0.338955163955688,0.876967072486877,0.340643614530563,0.483281642198563,0.849686682224274,0.210882499814034,0.375029146671295,0.923822283744812,0.0768460929393768,0.338193625211716,0.930212080478668,0.14258573949337,0.412074416875839,0.868086457252502,0.276804029941559,0.483281642198563,0.849686682224274,0.210882499814034,0.338193625211716,0.930212080478668,0.14258573949337,0.338955163955688,0.876967072486877,0.340643614530563,0.412074416875839,0.868086457252502,0.276804029941559,0.289741724729538,0.937032878398895,0.194984763860703,0.412074416875839,0.868086457252502,0.276804029941559,0.338193625211716,0.930212080478668,0.14258573949337,0.289741724729538,0.937032878398895,0.194984763860703,0.338955163955688,0.876967072486877,0.340643614530563,0.289741724729538,0.937032878398895,0.194984763860703,0.240938305854797,0.940026819705963,0.241450592875481,0.375029146671295,0.923822283744812,0.0768460929393768,0.200001046061516,0.979794561862946,-0.00148678210098296,0.19274440407753,0.980473756790161,0.0389952063560486,0.338193625211716,0.930212080478668,0.14258573949337,0.375029146671295,0.923822283744812,0.0768460929393768,0.19274440407753,0.980473756790161,0.0389952063560486,0.200001046061516,0.979794561862946,-0.00148678210098296,0.0484561286866665,0.998761177062988,-0.0113180745393038,0.0507275015115738,0.998711824417114,-0.00119289208669215, +0.19274440407753,0.980473756790161,0.0389952063560486,0.200001046061516,0.979794561862946,-0.00148678210098296,0.0507275015115738,0.998711824417114,-0.00119289208669215,-0.0440459586679935,0.998855888843536,0.0186186172068119,-0.0485891625285149,0.998756349086761,0.0111768674105406,0.0484561286866665,0.998761177062988,-0.0113180745393038,-0.0485891625285149,0.998756349086761,0.0111768674105406,0.0507275015115738,0.998711824417114,-0.00119289208669215,0.0484561286866665,0.998761177062988,-0.0113180745393038,0.240938305854797,0.940026819705963,0.241450592875481,0.289741724729538,0.937032878398895,0.194984763860703,0.149802014231682,0.983568370342255,0.100760579109192,0.240938305854797,0.940026819705963,0.241450592875481,0.149802014231682,0.983568370342255,0.100760579109192,0.125007599592209,0.984224319458008,0.125202417373657,0.289741724729538,0.937032878398895,0.194984763860703,0.338193625211716,0.930212080478668,0.14258573949337,0.174042135477066,0.982029378414154,0.0729907527565956,0.338193625211716,0.930212080478668,0.14258573949337,0.19274440407753,0.980473756790161,0.0389952063560486,0.174042135477066,0.982029378414154,0.0729907527565956,0.289741724729538,0.937032878398895,0.194984763860703,0.174042135477066,0.982029378414154,0.0729907527565956,0.149802014231682,0.983568370342255,0.100760579109192,0.19274440407753,0.980473756790161,0.0389952063560486,0.0507275015115738,0.998711824417114,-0.00119289208669215,0.0487287044525146,0.99876207113266,0.00998752750456333,0.174042135477066,0.982029378414154,0.0729907527565956,0.19274440407753,0.980473756790161,0.0389952063560486,0.0487287044525146,0.99876207113266,0.00998752750456333,0.125007599592209,0.984224319458008,0.125202417373657,0.149802014231682,0.983568370342255,0.100760579109192,0.0379278138279915,0.998951852321625,0.0256266705691814,0.125007599592209,0.984224319458008,0.125202417373657,0.0379278138279915,0.998951852321625,0.0256266705691814,0.0317800119519234,0.998989343643188,0.0317858420312405,0.149802014231682,0.983568370342255,0.100760579109192,0.174042135477066,0.982029378414154,0.0729907527565956, +0.0439196936786175,0.998862445354462,0.0185683257877827,0.174042135477066,0.982029378414154,0.0729907527565956,0.0487287044525146,0.99876207113266,0.00998752750456333,0.0439196936786175,0.998862445354462,0.0185683257877827,0.149802014231682,0.983568370342255,0.100760579109192,0.0439196936786175,0.998862445354462,0.0185683257877827,0.0379278138279915,0.998951852321625,0.0256266705691814,-0.0507617704570293,0.998709917068481,0.00127430562861264,0.0487287044525146,0.99876207113266,0.00998752750456333,0.0507275015115738,0.998711824417114,-0.00119289208669215,-0.0485891625285149,0.998756349086761,0.0111768674105406,-0.0507617704570293,0.998709917068481,0.00127430562861264,0.0507275015115738,0.998711824417114,-0.00119289208669215,-0.174184188246727,0.982003688812256,0.0729981362819672,-0.0485891625285149,0.998756349086761,0.0111768674105406,-0.0440459586679935,0.998855888843536,0.0186186172068119,-0.149932473897934,0.983543813228607,0.100806333124638,-0.174184188246727,0.982003688812256,0.0729981362819672,-0.0440459586679935,0.998855888843536,0.0186186172068119,-0.0379301458597183,0.998951852321625,-0.0256228148937225,0.0317800119519234,0.998989343643188,0.0317858420312405,0.0379278138279915,0.998951852321625,0.0256266705691814,-0.0379301458597183,0.998951852321625,-0.0256228148937225,-0.0317855216562748,0.998989343643188,-0.0317797102034092,0.0317800119519234,0.998989343643188,0.0317858420312405,-0.0487282425165176,0.99876207113266,-0.00999072287231684,0.0439196936786175,0.998862445354462,0.0185683257877827,0.0487287044525146,0.99876207113266,0.00998752750456333,-0.0507617704570293,0.998709917068481,0.00127430562861264,-0.0487282425165176,0.99876207113266,-0.00999072287231684,0.0487287044525146,0.99876207113266,0.00998752750456333,-0.0439199544489384,0.998862445354462,-0.0185681376606226,0.0379278138279915,0.998951852321625,0.0256266705691814,0.0439196936786175,0.998862445354462,0.0185683257877827,-0.0439199544489384,0.998862445354462,-0.0185681376606226,-0.0379301458597183,0.998951852321625,-0.0256228148937225,0.0379278138279915,0.998951852321625,0.0256266705691814, +-0.0487282425165176,0.99876207113266,-0.00999072287231684,-0.0439199544489384,0.998862445354462,-0.0185681376606226,0.0439196936786175,0.998862445354462,0.0185683257877827,-0.192779004573822,0.980453670024872,0.0393296033143997,-0.0507617704570293,0.998709917068481,0.00127430562861264,-0.0485891625285149,0.998756349086761,0.0111768674105406,-0.174184188246727,0.982003688812256,0.0729981362819672,-0.192779004573822,0.980453670024872,0.0393296033143997,-0.0485891625285149,0.998756349086761,0.0111768674105406,-0.289742022752762,0.937032699584961,0.194985285401344,-0.174184188246727,0.982003688812256,0.0729981362819672,-0.149932473897934,0.983543813228607,0.100806333124638,-0.240938752889633,0.940026581287384,0.241450771689415,-0.289742022752762,0.937032699584961,0.194985285401344,-0.149932473897934,0.983543813228607,0.100806333124638,-0.338955283164978,0.876967191696167,0.340643435716629,-0.289742022752762,0.937032699584961,0.194985285401344,-0.240938752889633,0.940026581287384,0.241450771689415,-0.149850651621819,0.98356831073761,-0.100688837468624,-0.0317855216562748,0.998989343643188,-0.0317797102034092,-0.0379301458597183,0.998951852321625,-0.0256228148937225,-0.149850651621819,0.98356831073761,-0.100688837468624,-0.125201880931854,0.984224379062653,-0.125007808208466,-0.0317855216562748,0.998989343643188,-0.0317797102034092,-0.200037494301796,0.979788243770599,-0.000156911541125737,-0.0487282425165176,0.99876207113266,-0.00999072287231684,-0.0507617704570293,0.998709917068481,0.00127430562861264,-0.192779004573822,0.980453670024872,0.0393296033143997,-0.200037494301796,0.979788243770599,-0.000156911541125737,-0.0507617704570293,0.998709917068481,0.00127430562861264,-0.174019917845726,0.982029378414154,-0.0730441510677338,-0.0379301458597183,0.998951852321625,-0.0256228148937225,-0.0439199544489384,0.998862445354462,-0.0185681376606226,-0.174019917845726,0.982029378414154,-0.0730441510677338,-0.149850651621819,0.98356831073761,-0.100688837468624,-0.0379301458597183,0.998951852321625,-0.0256228148937225,-0.192727342247963,0.980473816394806,-0.0390797592699528, +-0.0439199544489384,0.998862445354462,-0.0185681376606226,-0.0487282425165176,0.99876207113266,-0.00999072287231684,-0.200037494301796,0.979788243770599,-0.000156911541125737,-0.192727342247963,0.980473816394806,-0.0390797592699528,-0.0487282425165176,0.99876207113266,-0.00999072287231684,-0.192727342247963,0.980473816394806,-0.0390797592699528,-0.174019917845726,0.982029378414154,-0.0730441510677338,-0.0439199544489384,0.998862445354462,-0.0185681376606226,-0.289742022752762,0.937032699584961,0.194985285401344,-0.338193774223328,0.930212020874023,0.142585575580597,-0.174184188246727,0.982003688812256,0.0729981362819672,-0.338193774223328,0.930212020874023,0.142585575580597,-0.192779004573822,0.980453670024872,0.0393296033143997,-0.174184188246727,0.982003688812256,0.0729981362819672,-0.338955283164978,0.876967191696167,0.340643435716629,-0.412074506282806,0.868086397647858,0.276804089546204,-0.289742022752762,0.937032699584961,0.194985285401344,-0.412074506282806,0.868086397647858,0.276804089546204,-0.338193774223328,0.930212020874023,0.142585575580597,-0.289742022752762,0.937032699584961,0.194985285401344,-0.409694314002991,0.816494882106781,0.406800597906113,-0.412074506282806,0.868086397647858,0.276804089546204,-0.338955283164978,0.876967191696167,0.340643435716629,-0.409694314002991,0.816494882106781,0.406800597906113,-0.499602377414703,0.784420490264893,0.367534846067429,-0.412074506282806,0.868086397647858,0.276804089546204,-0.499602377414703,0.784420490264893,0.367534846067429,-0.483281850814819,0.849686682224274,0.210882291197777,-0.412074506282806,0.868086397647858,0.276804089546204,-0.412074506282806,0.868086397647858,0.276804089546204,-0.483281850814819,0.849686682224274,0.210882291197777,-0.338193774223328,0.930212020874023,0.142585575580597,-0.499602377414703,0.784420490264893,0.367534846067429,-0.595823705196381,0.747075140476227,0.294741690158844,-0.483281850814819,0.849686682224274,0.210882291197777,-0.338193774223328,0.930212020874023,0.142585575580597,-0.375028967857361,0.923822462558746,0.0768459290266037, +-0.192779004573822,0.980453670024872,0.0393296033143997,-0.375028967857361,0.923822462558746,0.0768459290266037,-0.200037494301796,0.979788243770599,-0.000156911541125737,-0.192779004573822,0.980453670024872,0.0393296033143997,-0.483281850814819,0.849686682224274,0.210882291197777,-0.375028967857361,0.923822462558746,0.0768459290266037,-0.338193774223328,0.930212020874023,0.142585575580597,-0.595823705196381,0.747075140476227,0.294741690158844,-0.538383960723877,0.834601640701294,0.116545654833317,-0.483281850814819,0.849686682224274,0.210882291197777,-0.483281850814819,0.849686682224274,0.210882291197777,-0.538383960723877,0.834601640701294,0.116545654833317,-0.375028967857361,0.923822462558746,0.0768459290266037,-0.595823705196381,0.747075140476227,0.294741690158844,-0.67525440454483,0.718085110187531,0.168479174375534,-0.538383960723877,0.834601640701294,0.116545654833317,-0.375028967857361,0.923822462558746,0.0768459290266037,-0.388976514339447,0.921247720718384,-8.32332298159599e-05,-0.200037494301796,0.979788243770599,-0.000156911541125737,-0.538383960723877,0.834601640701294,0.116545654833317,-0.388976514339447,0.921247720718384,-8.32332298159599e-05,-0.375028967857361,0.923822462558746,0.0768459290266037,-0.388976514339447,0.921247720718384,-8.32332298159599e-05,-0.192727342247963,0.980473816394806,-0.0390797592699528,-0.200037494301796,0.979788243770599,-0.000156911541125737,-0.67525440454483,0.718085110187531,0.168479174375534,-0.559611976146698,0.828754305839539,0.000913448981009424,-0.538383960723877,0.834601640701294,0.116545654833317,-0.538383960723877,0.834601640701294,0.116545654833317,-0.559611976146698,0.828754305839539,0.000913448981009424,-0.388976514339447,0.921247720718384,-8.32332298159599e-05,-0.67525440454483,0.718085110187531,0.168479174375534,-0.707099914550781,0.707099258899689,0.00448642997071147,-0.559611976146698,0.828754305839539,0.000913448981009424,-0.388976514339447,0.921247720718384,-8.32332298159599e-05,-0.375026077032089,0.923822581768036,-0.0768593177199364,-0.192727342247963,0.980473816394806,-0.0390797592699528, +-0.559611976146698,0.828754305839539,0.000913448981009424,-0.375026077032089,0.923822581768036,-0.0768593177199364,-0.388976514339447,0.921247720718384,-8.32332298159599e-05,-0.375026077032089,0.923822581768036,-0.0768593177199364,-0.174019917845726,0.982029378414154,-0.0730441510677338,-0.192727342247963,0.980473816394806,-0.0390797592699528,-0.707099914550781,0.707099258899689,0.00448642997071147,-0.538720190525055,0.834597170352936,-0.115014083683491,-0.559611976146698,0.828754305839539,0.000913448981009424,-0.559611976146698,0.828754305839539,0.000913448981009424,-0.538720190525055,0.834597170352936,-0.115014083683491,-0.375026077032089,0.923822581768036,-0.0768593177199364,-0.707099914550781,0.707099258899689,0.00448642997071147,-0.67697548866272,0.718051075935364,-0.161576226353645,-0.538720190525055,0.834597170352936,-0.115014083683491,-0.375026077032089,0.923822581768036,-0.0768593177199364,-0.338062763214111,0.930212736129761,-0.142891123890877,-0.174019917845726,0.982029378414154,-0.0730441510677338,-0.538720190525055,0.834597170352936,-0.115014083683491,-0.338062763214111,0.930212736129761,-0.142891123890877,-0.375026077032089,0.923822581768036,-0.0768593177199364,-0.338062763214111,0.930212736129761,-0.142891123890877,-0.149850651621819,0.98356831073761,-0.100688837468624,-0.174019917845726,0.982029378414154,-0.0730441510677338,-0.67697548866272,0.718051075935364,-0.161576226353645,-0.483310908079147,0.84968626499176,-0.210817128419876,-0.538720190525055,0.834597170352936,-0.115014083683491,-0.538720190525055,0.834597170352936,-0.115014083683491,-0.483310908079147,0.84968626499176,-0.210817128419876,-0.338062763214111,0.930212736129761,-0.142891123890877,-0.67697548866272,0.718051075935364,-0.161576226353645,-0.597491264343262,0.747042834758759,-0.291429460048676,-0.483310908079147,0.84968626499176,-0.210817128419876,-0.338062763214111,0.930212736129761,-0.142891123890877,-0.289730101823807,0.937032759189606,-0.195002615451813,-0.149850651621819,0.98356831073761,-0.100688837468624,-0.483310908079147,0.84968626499176,-0.210817128419876, +-0.289730101823807,0.937032759189606,-0.195002615451813,-0.338062763214111,0.930212736129761,-0.142891123890877,-0.289730101823807,0.937032759189606,-0.195002615451813,-0.125201880931854,0.984224379062653,-0.125007808208466,-0.149850651621819,0.98356831073761,-0.100688837468624,-0.289730101823807,0.937032759189606,-0.195002615451813,-0.241450563073158,0.940026640892029,-0.240938767790794,-0.125201880931854,0.984224379062653,-0.125007808208466,-0.597491264343262,0.747042834758759,-0.291429460048676,-0.410675913095474,0.868101954460144,-0.278826624155045,-0.483310908079147,0.84968626499176,-0.210817128419876,-0.483310908079147,0.84968626499176,-0.210817128419876,-0.410675913095474,0.868101954460144,-0.278826624155045,-0.289730101823807,0.937032759189606,-0.195002615451813,-0.410675913095474,0.868101954460144,-0.278826624155045,-0.241450563073158,0.940026640892029,-0.240938767790794,-0.289730101823807,0.937032759189606,-0.195002615451813,-0.597491264343262,0.747042834758759,-0.291429460048676,-0.500918865203857,0.784392118453979,-0.365799397230148,-0.410675913095474,0.868101954460144,-0.278826624155045,-0.410675913095474,0.868101954460144,-0.278826624155045,-0.340643912553787,0.876967072486877,-0.338954865932465,-0.241450563073158,0.940026640892029,-0.240938767790794,-0.500918865203857,0.784392118453979,-0.365799397230148,-0.340643912553787,0.876967072486877,-0.338954865932465,-0.410675913095474,0.868101954460144,-0.278826624155045,-0.500918865203857,0.784392118453979,-0.365799397230148,-0.406990051269531,0.816495299339294,-0.409505188465118,-0.340643912553787,0.876967072486877,-0.338954865932465,-0.365799427032471,0.784392237663269,-0.500918865203857,-0.409504324197769,0.816495478153229,-0.406990706920624,-0.338954716920853,0.876967549324036,-0.340643227100372,-0.365799427032471,0.784392237663269,-0.500918865203857,-0.338954716920853,0.876967549324036,-0.340643227100372,-0.278825551271439,0.868102312088013,-0.410675883293152,-0.291429609060287,0.747042715549469,-0.597491323947906,-0.365799427032471,0.784392237663269,-0.500918865203857, +-0.278825551271439,0.868102312088013,-0.410675883293152,-0.278825551271439,0.868102312088013,-0.410675883293152,-0.338954716920853,0.876967549324036,-0.340643227100372,-0.240938454866409,0.940026700496674,-0.241450622677803,-0.291429609060287,0.747042715549469,-0.597491323947906,-0.278825551271439,0.868102312088013,-0.410675883293152,-0.210816740989685,0.849686324596405,-0.48331093788147,-0.161575704813004,0.718051373958588,-0.676975309848785,-0.291429609060287,0.747042715549469,-0.597491323947906,-0.210816740989685,0.849686324596405,-0.48331093788147,-0.278825551271439,0.868102312088013,-0.410675883293152,-0.240938454866409,0.940026700496674,-0.241450622677803,-0.195002168416977,0.937032878398895,-0.289730221033096,-0.210816740989685,0.849686324596405,-0.48331093788147,-0.278825551271439,0.868102312088013,-0.410675883293152,-0.195002168416977,0.937032878398895,-0.289730221033096,-0.195002168416977,0.937032878398895,-0.289730221033096,-0.240938454866409,0.940026700496674,-0.241450622677803,-0.125008136034012,0.984224140644073,-0.125202745199203,-0.161575704813004,0.718051373958588,-0.676975309848785,-0.210816740989685,0.849686324596405,-0.48331093788147,-0.115014486014843,0.834597051143646,-0.5387202501297,0.00448640435934067,0.707099795341492,-0.707099437713623,-0.161575704813004,0.718051373958588,-0.676975309848785,-0.115014486014843,0.834597051143646,-0.5387202501297,-0.195002168416977,0.937032878398895,-0.289730221033096,-0.125008136034012,0.984224140644073,-0.125202745199203,-0.100689470767975,0.983568072319031,-0.149851053953171,-0.100689470767975,0.983568072319031,-0.149851053953171,-0.125008136034012,0.984224140644073,-0.125202745199203,-0.0317805297672749,0.998989343643188,-0.0317854471504688,-0.210816740989685,0.849686324596405,-0.48331093788147,-0.195002168416977,0.937032878398895,-0.289730221033096,-0.14289179444313,0.930212616920471,-0.338062584400177,-0.115014486014843,0.834597051143646,-0.5387202501297,-0.210816740989685,0.849686324596405,-0.48331093788147,-0.14289179444313,0.930212616920471,-0.338062584400177, +-0.14289179444313,0.930212616920471,-0.338062584400177,-0.195002168416977,0.937032878398895,-0.289730221033096,-0.100689470767975,0.983568072319031,-0.149851053953171,0.00448640435934067,0.707099795341492,-0.707099437713623,-0.115014486014843,0.834597051143646,-0.5387202501297,0.000912854506168514,0.828754186630249,-0.559611916542053,0.168479025363922,0.718085289001465,-0.675254285335541,0.00448640435934067,0.707099795341492,-0.707099437713623,0.000912854506168514,0.828754186630249,-0.559611916542053,-0.100689470767975,0.983568072319031,-0.149851053953171,-0.0317805297672749,0.998989343643188,-0.0317854471504688,-0.0256230924278498,0.998951852321625,-0.0379305779933929,0.0318826101720333,0.998983204364777,0.0318747200071812,-0.0256230924278498,0.998951852321625,-0.0379305779933929,-0.0317805297672749,0.998989343643188,-0.0317854471504688,-0.14289179444313,0.930212616920471,-0.338062584400177,-0.100689470767975,0.983568072319031,-0.149851053953171,-0.0730439871549606,0.982029259204865,-0.174020171165466,-0.0730439871549606,0.982029259204865,-0.174020171165466,-0.100689470767975,0.983568072319031,-0.149851053953171,-0.0256230924278498,0.998951852321625,-0.0379305779933929,-0.115014486014843,0.834597051143646,-0.5387202501297,-0.14289179444313,0.930212616920471,-0.338062584400177,-0.0768594443798065,0.923822462558746,-0.375026166439056,0.000912854506168514,0.828754186630249,-0.559611916542053,-0.115014486014843,0.834597051143646,-0.5387202501297,-0.0768594443798065,0.923822462558746,-0.375026166439056,-0.0768594443798065,0.923822462558746,-0.375026166439056,-0.14289179444313,0.930212616920471,-0.338062584400177,-0.0730439871549606,0.982029259204865,-0.174020171165466,0.168479025363922,0.718085289001465,-0.675254285335541,0.000912854506168514,0.828754186630249,-0.559611916542053,0.116545602679253,0.834601581096649,-0.538384079933167,0.294741183519363,0.747074842453003,-0.595824480056763,0.168479025363922,0.718085289001465,-0.675254285335541,0.116545602679253,0.834601581096649,-0.538384079933167,0.0318826101720333,0.998983204364777,0.0318747200071812, +0.0257014892995358,0.998945593833923,0.0380410552024841,-0.0256230924278498,0.998951852321625,-0.0379305779933929,0.125303909182549,0.984200179576874,0.125095352530479,0.0257014892995358,0.998945593833923,0.0380410552024841,0.0318826101720333,0.998983204364777,0.0318747200071812,0.000912854506168514,0.828754186630249,-0.559611916542053,-0.0768594443798065,0.923822462558746,-0.375026166439056,-8.36414910736494e-05,0.921247720718384,-0.388976484537125,0.116545602679253,0.834601581096649,-0.538384079933167,0.000912854506168514,0.828754186630249,-0.559611916542053,-8.36414910736494e-05,0.921247720718384,-0.388976484537125,-0.0730439871549606,0.982029259204865,-0.174020171165466,-0.0256230924278498,0.998951852321625,-0.0379305779933929,-0.0185676999390125,0.998862504959106,-0.0439204797148705,0.0257014892995358,0.998945593833923,0.0380410552024841,-0.0185676999390125,0.998862504959106,-0.0439204797148705,-0.0256230924278498,0.998951852321625,-0.0379305779933929,-0.0768594443798065,0.923822462558746,-0.375026166439056,-0.0730439871549606,0.982029259204865,-0.174020171165466,-0.0390797927975655,0.980473816394806,-0.192727416753769,-8.36414910736494e-05,0.921247720718384,-0.388976484537125,-0.0768594443798065,0.923822462558746,-0.375026166439056,-0.0390797927975655,0.980473816394806,-0.192727416753769,-0.0390797927975655,0.980473816394806,-0.192727416753769,-0.0730439871549606,0.982029259204865,-0.174020171165466,-0.0185676999390125,0.998862504959106,-0.0439204797148705,0.294741183519363,0.747074842453003,-0.595824480056763,0.116545602679253,0.834601581096649,-0.538384079933167,0.210882067680359,0.849686682224274,-0.483281821012497,0.367534965276718,0.784420371055603,-0.499602645635605,0.294741183519363,0.747074842453003,-0.595824480056763,0.210882067680359,0.849686682224274,-0.483281821012497,0.125303909182549,0.984200179576874,0.125095352530479,0.100806519389153,0.983543694019318,0.149932727217674,0.0257014892995358,0.998945593833923,0.0380410552024841,0.241450637578964,0.940026760101318,0.240938261151314,0.100806519389153,0.983543694019318,0.149932727217674, +0.125303909182549,0.984200179576874,0.125095352530479,0.116545602679253,0.834601581096649,-0.538384079933167,-8.36414910736494e-05,0.921247720718384,-0.388976484537125,0.0768459960818291,0.923822581768036,-0.375028908252716,0.210882067680359,0.849686682224274,-0.483281821012497,0.116545602679253,0.834601581096649,-0.538384079933167,0.0768459960818291,0.923822581768036,-0.375028908252716,-8.36414910736494e-05,0.921247720718384,-0.388976484537125,-0.0390797927975655,0.980473816394806,-0.192727416753769,-0.00015697636990808,0.979794859886169,-0.200004979968071,0.0768459960818291,0.923822581768036,-0.375028908252716,-8.36414910736494e-05,0.921247720718384,-0.388976484537125,-0.00015697636990808,0.979794859886169,-0.200004979968071,-0.0390797927975655,0.980473816394806,-0.192727416753769,-0.0185676999390125,0.998862504959106,-0.0439204797148705,-0.0099908085539937,0.998762011528015,-0.0487285181879997,-0.00015697636990808,0.979794859886169,-0.200004979968071,-0.0390797927975655,0.980473816394806,-0.192727416753769,-0.0099908085539937,0.998762011528015,-0.0487285181879997,0.0257014892995358,0.998945593833923,0.0380410552024841,0.0186186693608761,0.998856008052826,0.0440461151301861,-0.0185676999390125,0.998862504959106,-0.0439204797148705,0.100806519389153,0.983543694019318,0.149932727217674,0.0186186693608761,0.998856008052826,0.0440461151301861,0.0257014892995358,0.998945593833923,0.0380410552024841,0.0186186693608761,0.998856008052826,0.0440461151301861,-0.0099908085539937,0.998762011528015,-0.0487285181879997,-0.0185676999390125,0.998862504959106,-0.0439204797148705,0.367534965276718,0.784420371055603,-0.499602645635605,0.210882067680359,0.849686682224274,-0.483281821012497,0.27680367231369,0.868086576461792,-0.412074536085129,0.406800538301468,0.816494882106781,-0.409694135189056,0.367534965276718,0.784420371055603,-0.499602645635605,0.27680367231369,0.868086576461792,-0.412074536085129,0.406800538301468,0.816494882106781,-0.409694135189056,0.27680367231369,0.868086576461792,-0.412074536085129,0.34064382314682,0.876967132091522,-0.33895480632782, +0.210882067680359,0.849686682224274,-0.483281821012497,0.0768459960818291,0.923822581768036,-0.375028908252716,0.142585873603821,0.930212020874023,-0.338193506002426,0.27680367231369,0.868086576461792,-0.412074536085129,0.210882067680359,0.849686682224274,-0.483281821012497,0.142585873603821,0.930212020874023,-0.338193506002426,0.34064382314682,0.876967132091522,-0.33895480632782,0.27680367231369,0.868086576461792,-0.412074536085129,0.194984674453735,0.93703281879425,-0.289741694927216,0.27680367231369,0.868086576461792,-0.412074536085129,0.142585873603821,0.930212020874023,-0.338193506002426,0.194984674453735,0.93703281879425,-0.289741694927216,0.34064382314682,0.876967132091522,-0.33895480632782,0.194984674453735,0.93703281879425,-0.289741694927216,0.241450533270836,0.940026760101318,-0.240938380360603,0.0768459960818291,0.923822581768036,-0.375028908252716,-0.00015697636990808,0.979794859886169,-0.200004979968071,0.0389953404664993,0.980473697185516,-0.192744821310043,0.142585873603821,0.930212020874023,-0.338193506002426,0.0768459960818291,0.923822581768036,-0.375028908252716,0.0389953404664993,0.980473697185516,-0.192744821310043,-0.00015697636990808,0.979794859886169,-0.200004979968071,-0.0099908085539937,0.998762011528015,-0.0487285181879997,-6.64011486151139e-06,0.998712539672852,-0.0507281683385372,0.0389953404664993,0.980473697185516,-0.192744821310043,-0.00015697636990808,0.979794859886169,-0.200004979968071,-6.64011486151139e-06,0.998712539672852,-0.0507281683385372,0.0186186693608761,0.998856008052826,0.0440461151301861,0.0100123025476933,0.998755216598511,0.048863023519516,-0.0099908085539937,0.998762011528015,-0.0487285181879997,0.0100123025476933,0.998755216598511,0.048863023519516,-6.64011486151139e-06,0.998712539672852,-0.0507281683385372,-0.0099908085539937,0.998762011528015,-0.0487285181879997,0.241450533270836,0.940026760101318,-0.240938380360603,0.194984674453735,0.93703281879425,-0.289741694927216,0.100760899484158,0.983568251132965,-0.14980261027813,0.241450533270836,0.940026760101318,-0.240938380360603, +0.100760899484158,0.983568251132965,-0.14980261027813,0.125202551484108,0.984224319458008,-0.125007778406143,0.194984674453735,0.93703281879425,-0.289741694927216,0.142585873603821,0.930212020874023,-0.338193506002426,0.0729909613728523,0.98202919960022,-0.174042701721191,0.142585873603821,0.930212020874023,-0.338193506002426,0.0389953404664993,0.980473697185516,-0.192744821310043,0.0729909613728523,0.98202919960022,-0.174042701721191,0.194984674453735,0.93703281879425,-0.289741694927216,0.0729909613728523,0.98202919960022,-0.174042701721191,0.100760899484158,0.983568251132965,-0.14980261027813,0.0389953404664993,0.980473697185516,-0.192744821310043,-6.64011486151139e-06,0.998712539672852,-0.0507281683385372,0.00998761132359505,0.99876207113266,-0.0487291887402534,0.0729909613728523,0.98202919960022,-0.174042701721191,0.0389953404664993,0.980473697185516,-0.192744821310043,0.00998761132359505,0.99876207113266,-0.0487291887402534,0.125202551484108,0.984224319458008,-0.125007778406143,0.100760899484158,0.983568251132965,-0.14980261027813,0.0256268419325352,0.998951852321625,-0.0379280559718609,0.125202551484108,0.984224319458008,-0.125007778406143,0.0256268419325352,0.998951852321625,-0.0379280559718609,0.0317858532071114,0.998989343643188,-0.0317799746990204,0.100760899484158,0.983568251132965,-0.14980261027813,0.0729909613728523,0.98202919960022,-0.174042701721191,0.018568504601717,0.998862504959106,-0.0439201407134533,0.0729909613728523,0.98202919960022,-0.174042701721191,0.00998761132359505,0.99876207113266,-0.0487291887402534,0.018568504601717,0.998862504959106,-0.0439201407134533,0.100760899484158,0.983568251132965,-0.14980261027813,0.018568504601717,0.998862504959106,-0.0439201407134533,0.0256268419325352,0.998951852321625,-0.0379280559718609,-7.94342849985696e-06,0.998705506324768,0.0508647747337818,0.00998761132359505,0.99876207113266,-0.0487291887402534,-6.64011486151139e-06,0.998712539672852,-0.0507281683385372,0.0100123025476933,0.998755216598511,0.048863023519516,-7.94342849985696e-06,0.998705506324768,0.0508647747337818, +-6.64011486151139e-06,0.998712539672852,-0.0507281683385372,0.0729981809854507,0.982003688812256,0.174184411764145,0.0100123025476933,0.998755216598511,0.048863023519516,0.0186186693608761,0.998856008052826,0.0440461151301861,0.100806519389153,0.983543694019318,0.149932727217674,0.0729981809854507,0.982003688812256,0.174184411764145,0.0186186693608761,0.998856008052826,0.0440461151301861,-0.0256966464221478,0.998945593833923,0.0380445197224617,0.0317858532071114,0.998989343643188,-0.0317799746990204,0.0256268419325352,0.998951852321625,-0.0379280559718609,-0.0256966464221478,0.998945593833923,0.0380445197224617,-0.0318746492266655,0.998983323574066,0.0318825729191303,0.0317858532071114,0.998989343643188,-0.0317799746990204,-0.0100168781355023,0.998755276203156,0.0488620437681675,0.018568504601717,0.998862504959106,-0.0439201407134533,0.00998761132359505,0.99876207113266,-0.0487291887402534,-7.94342849985696e-06,0.998705506324768,0.0508647747337818,-0.0100168781355023,0.998755276203156,0.0488620437681675,0.00998761132359505,0.99876207113266,-0.0487291887402534,-0.0186185650527477,0.998856008052826,0.0440462008118629,0.0256268419325352,0.998951852321625,-0.0379280559718609,0.018568504601717,0.998862504959106,-0.0439201407134533,-0.0186185650527477,0.998856008052826,0.0440462008118629,-0.0256966464221478,0.998945593833923,0.0380445197224617,0.0256268419325352,0.998951852321625,-0.0379280559718609,-0.0100168781355023,0.998755276203156,0.0488620437681675,-0.0186185650527477,0.998856008052826,0.0440462008118629,0.018568504601717,0.998862504959106,-0.0439201407134533,0.0389859564602375,0.980446994304657,0.192882969975471,-7.94342849985696e-06,0.998705506324768,0.0508647747337818,0.0100123025476933,0.998755216598511,0.048863023519516,0.0729981809854507,0.982003688812256,0.174184411764145,0.0389859564602375,0.980446994304657,0.192882969975471,0.0100123025476933,0.998755216598511,0.048863023519516,0.194985002279282,0.937032878398895,0.289741784334183,0.0729981809854507,0.982003688812256,0.174184411764145,0.100806519389153,0.983543694019318,0.149932727217674, +0.241450637578964,0.940026760101318,0.240938261151314,0.194985002279282,0.937032878398895,0.289741784334183,0.100806519389153,0.983543694019318,0.149932727217674,0.340643525123596,0.876967370510101,0.338954508304596,0.194985002279282,0.937032878398895,0.289741784334183,0.241450637578964,0.940026760101318,0.240938261151314,-0.100726678967476,0.983543634414673,0.149986773729324,-0.0318746492266655,0.998983323574066,0.0318825729191303,-0.0256966464221478,0.998945593833923,0.0380445197224617,-0.100726678967476,0.983543634414673,0.149986773729324,-0.1250951141119,0.984200179576874,0.125303953886032,-0.0318746492266655,0.998983323574066,0.0318825729191303,-0.000164431126904674,0.979767560958862,0.200138852000237,-0.0100168781355023,0.998755276203156,0.0488620437681675,-7.94342849985696e-06,0.998705506324768,0.0508647747337818,0.0389859564602375,0.980446994304657,0.192882969975471,-0.000164431126904674,0.979767560958862,0.200138852000237,-7.94342849985696e-06,0.998705506324768,0.0508647747337818,-0.0730517655611038,0.982003569602966,0.174161791801453,-0.0256966464221478,0.998945593833923,0.0380445197224617,-0.0186185650527477,0.998856008052826,0.0440462008118629,-0.0730517655611038,0.982003569602966,0.174161791801453,-0.100726678967476,0.983543634414673,0.149986773729324,-0.0256966464221478,0.998945593833923,0.0380445197224617,-0.03907810151577,0.980447053909302,0.192864179611206,-0.0186185650527477,0.998856008052826,0.0440462008118629,-0.0100168781355023,0.998755276203156,0.0488620437681675,-0.000164431126904674,0.979767560958862,0.200138852000237,-0.03907810151577,0.980447053909302,0.192864179611206,-0.0100168781355023,0.998755276203156,0.0488620437681675,-0.03907810151577,0.980447053909302,0.192864179611206,-0.0730517655611038,0.982003569602966,0.174161791801453,-0.0186185650527477,0.998856008052826,0.0440462008118629,0.194985002279282,0.937032878398895,0.289741784334183,0.142585590481758,0.930212020874023,0.338193655014038,0.0729981809854507,0.982003688812256,0.174184411764145,0.142585590481758,0.930212020874023,0.338193655014038, +0.0389859564602375,0.980446994304657,0.192882969975471,0.0729981809854507,0.982003688812256,0.174184411764145,0.340643525123596,0.876967370510101,0.338954508304596,0.276803612709045,0.868086576461792,0.412074446678162,0.194985002279282,0.937032878398895,0.289741784334183,0.276803612709045,0.868086576461792,0.412074446678162,0.142585590481758,0.930212020874023,0.338193655014038,0.194985002279282,0.937032878398895,0.289741784334183,0.406990706920624,0.816495418548584,0.409504503011703,0.276803612709045,0.868086576461792,0.412074446678162,0.340643525123596,0.876967370510101,0.338954508304596,0.406990706920624,0.816495418548584,0.409504503011703,0.364927053451538,0.784376561641693,0.501579284667969,0.276803612709045,0.868086576461792,0.412074446678162,0.364927053451538,0.784376561641693,0.501579284667969,0.210882067680359,0.849686741828918,0.483281582593918,0.276803612709045,0.868086576461792,0.412074446678162,0.276803612709045,0.868086576461792,0.412074446678162,0.210882067680359,0.849686741828918,0.483281582593918,0.142585590481758,0.930212020874023,0.338193655014038,0.364927053451538,0.784376561641693,0.501579284667969,0.292814195156097,0.747057795524597,0.596795201301575,0.210882067680359,0.849686741828918,0.483281582593918,0.142585590481758,0.930212020874023,0.338193655014038,0.0768458545207977,0.923822581768036,0.375028759241104,0.0389859564602375,0.980446994304657,0.192882969975471,0.0768458545207977,0.923822581768036,0.375028759241104,-0.000164431126904674,0.979767560958862,0.200138852000237,0.0389859564602375,0.980446994304657,0.192882969975471,0.210882067680359,0.849686741828918,0.483281582593918,0.0768458545207977,0.923822581768036,0.375028759241104,0.142585590481758,0.930212020874023,0.338193655014038,0.292814195156097,0.747057795524597,0.596795201301575,0.116545788943768,0.834601700305939,0.538383722305298,0.210882067680359,0.849686741828918,0.483281582593918,0.210882067680359,0.849686741828918,0.483281582593918,0.116545788943768,0.834601700305939,0.538383722305298,0.0768458545207977,0.923822581768036,0.375028759241104, +0.292814195156097,0.747057795524597,0.596795201301575,0.163807988166809,0.718066215515137,0.676422834396362,0.116545788943768,0.834601700305939,0.538383722305298,0.0768458545207977,0.923822581768036,0.375028759241104,-8.32486693980172e-05,0.921247780323029,0.388976246118546,-0.000164431126904674,0.979767560958862,0.200138852000237,0.116545788943768,0.834601700305939,0.538383722305298,-8.32486693980172e-05,0.921247780323029,0.388976246118546,0.0768458545207977,0.923822581768036,0.375028759241104,-8.32486693980172e-05,0.921247780323029,0.388976246118546,-0.03907810151577,0.980447053909302,0.192864179611206,-0.000164431126904674,0.979767560958862,0.200138852000237,0.163807988166809,0.718066215515137,0.676422834396362,0.000912806193809956,0.828754425048828,0.559611558914185,0.116545788943768,0.834601700305939,0.538383722305298,0.116545788943768,0.834601700305939,0.538383722305298,0.000912806193809956,0.828754425048828,0.559611558914185,-8.32486693980172e-05,0.921247780323029,0.388976246118546,0.163807988166809,0.718066215515137,0.676422834396362,-0.00226269965060055,0.707104861736298,0.707105100154877,0.000912806193809956,0.828754425048828,0.559611558914185,-8.32486693980172e-05,0.921247780323029,0.388976246118546,-0.0768594145774841,0.923822522163391,0.375026136636734,-0.03907810151577,0.980447053909302,0.192864179611206,0.000912806193809956,0.828754425048828,0.559611558914185,-0.0768594145774841,0.923822522163391,0.375026136636734,-8.32486693980172e-05,0.921247780323029,0.388976246118546,-0.0768594145774841,0.923822522163391,0.375026136636734,-0.0730517655611038,0.982003569602966,0.174161791801453,-0.03907810151577,0.980447053909302,0.192864179611206,-0.00226269965060055,0.707104861736298,0.707105100154877,-0.115014307200909,0.834597229957581,0.538719832897186,0.000912806193809956,0.828754425048828,0.559611558914185,0.000912806193809956,0.828754425048828,0.559611558914185,-0.115014307200909,0.834597229957581,0.538719832897186,-0.0768594145774841,0.923822522163391,0.375026136636734,-0.00226269965060055,0.707104861736298,0.707105100154877, +-0.166216373443604,0.718078255653381,0.675822257995605,-0.115014307200909,0.834597229957581,0.538719832897186,-0.0768594145774841,0.923822522163391,0.375026136636734,-0.142891362309456,0.930212676525116,0.338062882423401,-0.0730517655611038,0.982003569602966,0.174161791801453,-0.115014307200909,0.834597229957581,0.538719832897186,-0.142891362309456,0.930212676525116,0.338062882423401,-0.0768594145774841,0.923822522163391,0.375026136636734,-0.142891362309456,0.930212676525116,0.338062882423401,-0.100726678967476,0.983543634414673,0.149986773729324,-0.0730517655611038,0.982003569602966,0.174161791801453,-0.166216373443604,0.718078255653381,0.675822257995605,-0.210816115140915,0.849686443805695,0.483311027288437,-0.115014307200909,0.834597229957581,0.538719832897186,-0.115014307200909,0.834597229957581,0.538719832897186,-0.210816115140915,0.849686443805695,0.483311027288437,-0.142891362309456,0.930212676525116,0.338062882423401,-0.166216373443604,0.718078255653381,0.675822257995605,-0.293334722518921,0.747063040733337,0.596533119678497,-0.210816115140915,0.849686443805695,0.483311027288437,-0.142891362309456,0.930212676525116,0.338062882423401,-0.195002257823944,0.937032878398895,0.289730250835419,-0.100726678967476,0.983543634414673,0.149986773729324,-0.210816115140915,0.849686443805695,0.483311027288437,-0.195002257823944,0.937032878398895,0.289730250835419,-0.142891362309456,0.930212676525116,0.338062882423401,-0.195002257823944,0.937032878398895,0.289730250835419,-0.1250951141119,0.984200179576874,0.125303953886032,-0.100726678967476,0.983543634414673,0.149986773729324,-0.195002257823944,0.937032878398895,0.289730250835419,-0.240938752889633,0.940026581287384,0.241450771689415,-0.1250951141119,0.984200179576874,0.125303953886032,-0.293334722518921,0.747063040733337,0.596533119678497,-0.278826028108597,0.868102133274078,0.410675853490829,-0.210816115140915,0.849686443805695,0.483311027288437,-0.210816115140915,0.849686443805695,0.483311027288437,-0.278826028108597,0.868102133274078,0.410675853490829,-0.195002257823944,0.937032878398895,0.289730250835419, +-0.278826028108597,0.868102133274078,0.410675853490829,-0.240938752889633,0.940026581287384,0.241450771689415,-0.195002257823944,0.937032878398895,0.289730250835419,-0.293334722518921,0.747063040733337,0.596533119678497,-0.368441134691238,0.784433901309967,0.498913437128067,-0.278826028108597,0.868102133274078,0.410675853490829,-0.278826028108597,0.868102133274078,0.410675853490829,-0.338955283164978,0.876967191696167,0.340643435716629,-0.240938752889633,0.940026581287384,0.241450771689415,-0.368441134691238,0.784433901309967,0.498913437128067,-0.338955283164978,0.876967191696167,0.340643435716629,-0.278826028108597,0.868102133274078,0.410675853490829,-0.368441134691238,0.784433901309967,0.498913437128067,-0.409694314002991,0.816494882106781,0.406800597906113,-0.338955283164978,0.876967191696167,0.340643435716629,-0.67572146654129,0.717955052852631,-0.16715595126152,-0.707099795341492,0.707103669643402,0.0037718613166362,-0.559602022171021,0.828761458396912,-0.000220210975385271,-0.67572146654129,0.717955052852631,-0.16715595126152,-0.559602022171021,0.828761458396912,-0.000220210975385271,-0.537776589393616,0.834555923938751,-0.119635760784149,-0.596795558929443,0.747057676315308,-0.29281359910965,-0.67572146654129,0.717955052852631,-0.16715595126152,-0.537776589393616,0.834555923938751,-0.119635760784149,-0.537776589393616,0.834555923938751,-0.119635760784149,-0.559602022171021,0.828761458396912,-0.000220210975385271,-0.388966053724289,0.921252131462097,0.000147596569149755,-0.596795558929443,0.747057676315308,-0.29281359910965,-0.537776589393616,0.834555923938751,-0.119635760784149,-0.483281493186951,0.849686920642853,-0.210881888866425,-0.501579225063324,0.784376502037048,-0.364927172660828,-0.596795558929443,0.747057676315308,-0.29281359910965,-0.483281493186951,0.849686920642853,-0.210881888866425,-0.537776589393616,0.834555923938751,-0.119635760784149,-0.388966053724289,0.921252131462097,0.000147596569149755,-0.374523162841797,0.923809766769409,-0.0794219076633453,-0.483281493186951,0.849686920642853,-0.210881888866425, +-0.537776589393616,0.834555923938751,-0.119635760784149,-0.374523162841797,0.923809766769409,-0.0794219076633453,-0.374523162841797,0.923809766769409,-0.0794219076633453,-0.388966053724289,0.921252131462097,0.000147596569149755,-0.200001552700996,0.979795515537262,-0.000445968005806208,-0.501579225063324,0.784376502037048,-0.364927172660828,-0.483281493186951,0.849686920642853,-0.210881888866425,-0.412074208259583,0.868086934089661,-0.276803135871887,-0.409504324197769,0.816495478153229,-0.406990706920624,-0.501579225063324,0.784376502037048,-0.364927172660828,-0.412074208259583,0.868086934089661,-0.276803135871887,-0.409504324197769,0.816495478153229,-0.406990706920624,-0.412074208259583,0.868086934089661,-0.276803135871887,-0.338954716920853,0.876967549324036,-0.340643227100372,-0.483281493186951,0.849686920642853,-0.210881888866425,-0.374523162841797,0.923809766769409,-0.0794219076633453,-0.338193476200104,0.930212080478668,-0.142585799098015,-0.412074208259583,0.868086934089661,-0.276803135871887,-0.483281493186951,0.849686920642853,-0.210881888866425,-0.338193476200104,0.930212080478668,-0.142585799098015,-0.374523162841797,0.923809766769409,-0.0794219076633453,-0.200001552700996,0.979795515537262,-0.000445968005806208,-0.192350998520851,0.980471134185791,-0.0409564562141895,-0.338193476200104,0.930212080478668,-0.142585799098015,-0.374523162841797,0.923809766769409,-0.0794219076633453,-0.192350998520851,0.980471134185791,-0.0409564562141895,-0.192350998520851,0.980471134185791,-0.0409564562141895,-0.200001552700996,0.979795515537262,-0.000445968005806208,-0.0507281273603439,0.998711943626404,-0.00110683671664447,-0.338954716920853,0.876967549324036,-0.340643227100372,-0.412074208259583,0.868086934089661,-0.276803135871887,-0.289741724729538,0.937032997608185,-0.194984436035156,-0.412074208259583,0.868086934089661,-0.276803135871887,-0.338193476200104,0.930212080478668,-0.142585799098015,-0.289741724729538,0.937032997608185,-0.194984436035156,-0.338954716920853,0.876967549324036,-0.340643227100372,-0.289741724729538,0.937032997608185,-0.194984436035156, +-0.240938454866409,0.940026700496674,-0.241450622677803,-0.338193476200104,0.930212080478668,-0.142585799098015,-0.192350998520851,0.980471134185791,-0.0409564562141895,-0.174042910337448,0.98202919960022,-0.072991169989109,-0.289741724729538,0.937032997608185,-0.194984436035156,-0.338193476200104,0.930212080478668,-0.142585799098015,-0.174042910337448,0.98202919960022,-0.072991169989109,-0.192350998520851,0.980471134185791,-0.0409564562141895,-0.0507281273603439,0.998711943626404,-0.00110683671664447,-0.0484627485275269,0.998761236667633,-0.0112895676866174,-0.174042910337448,0.98202919960022,-0.072991169989109,-0.192350998520851,0.980471134185791,-0.0409564562141895,-0.0484627485275269,0.998761236667633,-0.0112895676866174,0.050762128084898,0.99871027469635,0.000968540960457176,-0.0484627485275269,0.998761236667633,-0.0112895676866174,-0.0507281273603439,0.998711943626404,-0.00110683671664447,-0.240938454866409,0.940026700496674,-0.241450622677803,-0.289741724729538,0.937032997608185,-0.194984436035156,-0.149802714586258,0.98356819152832,-0.100760862231255,-0.289741724729538,0.937032997608185,-0.194984436035156,-0.174042910337448,0.98202919960022,-0.072991169989109,-0.149802714586258,0.98356819152832,-0.100760862231255,-0.240938454866409,0.940026700496674,-0.241450622677803,-0.149802714586258,0.98356819152832,-0.100760862231255,-0.125008136034012,0.984224140644073,-0.125202745199203,0.050762128084898,0.99871027469635,0.000968540960457176,0.0485424734652042,0.998756051063538,0.0114053729921579,-0.0484627485275269,0.998761236667633,-0.0112895676866174,0.20003767311573,0.979788243770599,-0.000229265613597818,0.0485424734652042,0.998756051063538,0.0114053729921579,0.050762128084898,0.99871027469635,0.000968540960457176,-0.174042910337448,0.98202919960022,-0.072991169989109,-0.0484627485275269,0.998761236667633,-0.0112895676866174,-0.0439204350113869,0.998862504959106,-0.0185686480253935,-0.149802714586258,0.98356819152832,-0.100760862231255,-0.174042910337448,0.98202919960022,-0.072991169989109,-0.0439204350113869,0.998862504959106,-0.0185686480253935, +0.0485424734652042,0.998756051063538,0.0114053729921579,-0.0439204350113869,0.998862504959106,-0.0185686480253935,-0.0484627485275269,0.998761236667633,-0.0112895676866174,-0.125008136034012,0.984224140644073,-0.125202745199203,-0.149802714586258,0.98356819152832,-0.100760862231255,-0.0379282347857952,0.998951852321625,-0.0256269536912441,-0.149802714586258,0.98356819152832,-0.100760862231255,-0.0439204350113869,0.998862504959106,-0.0185686480253935,-0.0379282347857952,0.998951852321625,-0.0256269536912441,-0.125008136034012,0.984224140644073,-0.125202745199203,-0.0379282347857952,0.998951852321625,-0.0256269536912441,-0.0317805297672749,0.998989343643188,-0.0317854471504688,0.20003767311573,0.979788243770599,-0.000229265613597818,0.192691490054131,0.980453550815582,0.0397576168179512,0.0485424734652042,0.998756051063538,0.0114053729921579,0.388976246118546,0.921246826648712,-0.00130779296159744,0.192691490054131,0.980453550815582,0.0397576168179512,0.20003767311573,0.979788243770599,-0.000229265613597818,0.0485424734652042,0.998756051063538,0.0114053729921579,0.0440461337566376,0.998855948448181,0.018618555739522,-0.0439204350113869,0.998862504959106,-0.0185686480253935,0.0440461337566376,0.998855948448181,0.018618555739522,-0.0379282347857952,0.998951852321625,-0.0256269536912441,-0.0439204350113869,0.998862504959106,-0.0185686480253935,0.192691490054131,0.980453550815582,0.0397576168179512,0.0440461337566376,0.998855948448181,0.018618555739522,0.0485424734652042,0.998756051063538,0.0114053729921579,0.0380444303154945,0.998945653438568,0.0256965439766645,-0.0317805297672749,0.998989343643188,-0.0317854471504688,-0.0379282347857952,0.998951852321625,-0.0256269536912441,0.0440461337566376,0.998855948448181,0.018618555739522,0.0380444303154945,0.998945653438568,0.0256965439766645,-0.0379282347857952,0.998951852321625,-0.0256269536912441,0.0380444303154945,0.998945653438568,0.0256965439766645,0.0318826101720333,0.998983204364777,0.0318747200071812,-0.0317805297672749,0.998989343643188,-0.0317854471504688,0.388976246118546,0.921246826648712,-0.00130779296159744, +0.374750286340714,0.923823297023773,0.0781836360692978,0.192691490054131,0.980453550815582,0.0397576168179512,0.559609413146973,0.8287513256073,-0.00294087105430663,0.374750286340714,0.923823297023773,0.0781836360692978,0.388976246118546,0.921246826648712,-0.00130779296159744,0.192691490054131,0.980453550815582,0.0397576168179512,0.174161821603775,0.982003629207611,0.0730515420436859,0.0440461337566376,0.998855948448181,0.018618555739522,0.174161821603775,0.982003629207611,0.0730515420436859,0.0380444303154945,0.998945653438568,0.0256965439766645,0.0440461337566376,0.998855948448181,0.018618555739522,0.374750286340714,0.923823297023773,0.0781836360692978,0.174161821603775,0.982003629207611,0.0730515420436859,0.192691490054131,0.980453550815582,0.0397576168179512,0.149986818432808,0.983543634414673,0.100726611912251,0.0318826101720333,0.998983204364777,0.0318747200071812,0.0380444303154945,0.998945653438568,0.0256965439766645,0.174161821603775,0.982003629207611,0.0730515420436859,0.149986818432808,0.983543634414673,0.100726611912251,0.0380444303154945,0.998945653438568,0.0256965439766645,0.149986818432808,0.983543634414673,0.100726611912251,0.125303909182549,0.984200179576874,0.125095352530479,0.0318826101720333,0.998983204364777,0.0318747200071812,0.559609413146973,0.8287513256073,-0.00294087105430663,0.538316428661346,0.83460259437561,0.116850130259991,0.374750286340714,0.923823297023773,0.0781836360692978,0.707088530063629,0.707089185714722,-0.00710760708898306,0.538316428661346,0.83460259437561,0.116850130259991,0.559609413146973,0.8287513256073,-0.00294087105430663,0.707088530063629,0.707089185714722,-0.00710760708898306,0.676442980766296,0.718066334724426,0.163724645972252,0.538316428661346,0.83460259437561,0.116850130259991,0.374750286340714,0.923823297023773,0.0781836360692978,0.338062673807144,0.930212736129761,0.142891347408295,0.174161821603775,0.982003629207611,0.0730515420436859,0.338062673807144,0.930212736129761,0.142891347408295,0.149986818432808,0.983543634414673,0.100726611912251,0.174161821603775,0.982003629207611,0.0730515420436859, +0.538316428661346,0.83460259437561,0.116850130259991,0.338062673807144,0.930212736129761,0.142891347408295,0.374750286340714,0.923823297023773,0.0781836360692978,0.28972989320755,0.937032878398895,0.195002108812332,0.125303909182549,0.984200179576874,0.125095352530479,0.149986818432808,0.983543634414673,0.100726611912251,0.338062673807144,0.930212736129761,0.142891347408295,0.28972989320755,0.937032878398895,0.195002108812332,0.149986818432808,0.983543634414673,0.100726611912251,0.28972989320755,0.937032878398895,0.195002108812332,0.241450637578964,0.940026760101318,0.240938261151314,0.125303909182549,0.984200179576874,0.125095352530479,0.676442980766296,0.718066334724426,0.163724645972252,0.483310520648956,0.849686682224274,0.21081617474556,0.538316428661346,0.83460259437561,0.116850130259991,0.538316428661346,0.83460259437561,0.116850130259991,0.483310520648956,0.849686682224274,0.21081617474556,0.338062673807144,0.930212736129761,0.142891347408295,0.483310520648956,0.849686682224274,0.21081617474556,0.28972989320755,0.937032878398895,0.195002108812332,0.338062673807144,0.930212736129761,0.142891347408295,0.676442980766296,0.718066334724426,0.163724645972252,0.597490966320038,0.747043371200562,0.291428804397583,0.483310520648956,0.849686682224274,0.21081617474556,0.410675793886185,0.868102371692657,0.278825581073761,0.241450637578964,0.940026760101318,0.240938261151314,0.28972989320755,0.937032878398895,0.195002108812332,0.483310520648956,0.849686682224274,0.21081617474556,0.410675793886185,0.868102371692657,0.278825581073761,0.28972989320755,0.937032878398895,0.195002108812332,0.597490966320038,0.747043371200562,0.291428804397583,0.410675793886185,0.868102371692657,0.278825581073761,0.483310520648956,0.849686682224274,0.21081617474556,0.410675793886185,0.868102371692657,0.278825581073761,0.340643525123596,0.876967370510101,0.338954508304596,0.241450637578964,0.940026760101318,0.240938261151314,0.597490966320038,0.747043371200562,0.291428804397583,0.500918507575989,0.784392297267914,0.365799695253372,0.410675793886185,0.868102371692657,0.278825581073761, +0.500918507575989,0.784392297267914,0.365799695253372,0.340643525123596,0.876967370510101,0.338954508304596,0.410675793886185,0.868102371692657,0.278825581073761,0.500918507575989,0.784392297267914,0.365799695253372,0.406990706920624,0.816495418548584,0.409504503011703,0.340643525123596,0.876967370510101,0.338954508304596,-0.498913437128067,0.784433960914612,0.368441045284271,-0.406800627708435,0.816494941711426,0.409694105386734,-0.340643316507339,0.876967310905457,0.338954955339432,-0.498913437128067,0.784433960914612,0.368441045284271,-0.340643316507339,0.876967310905457,0.338954955339432,-0.410675883293152,0.868102371692657,0.278825461864471,-0.596533954143524,0.747062802314758,0.293333292007446,-0.498913437128067,0.784433960914612,0.368441045284271,-0.410675883293152,0.868102371692657,0.278825461864471,-0.410675883293152,0.868102371692657,0.278825461864471,-0.340643316507339,0.876967310905457,0.338954955339432,-0.241450473666191,0.940026760101318,0.24093833565712,-0.596533954143524,0.747062802314758,0.293333292007446,-0.410675883293152,0.868102371692657,0.278825461864471,-0.48331093788147,0.849686503410339,0.210816040635109,-0.675821602344513,0.718078672885895,0.166217222809792,-0.596533954143524,0.747062802314758,0.293333292007446,-0.48331093788147,0.849686503410339,0.210816040635109,-0.410675883293152,0.868102371692657,0.278825461864471,-0.241450473666191,0.940026760101318,0.24093833565712,-0.28973001241684,0.93703293800354,0.195001617074013,-0.48331093788147,0.849686503410339,0.210816040635109,-0.410675883293152,0.868102371692657,0.278825461864471,-0.28973001241684,0.93703293800354,0.195001617074013,-0.28973001241684,0.93703293800354,0.195001617074013,-0.241450473666191,0.940026760101318,0.24093833565712,-0.125202804803848,0.984224200248718,0.125007718801498,-0.675821602344513,0.718078672885895,0.166217222809792,-0.48331093788147,0.849686503410339,0.210816040635109,-0.538719952106476,0.834597170352936,0.115014836192131,-0.707099795341492,0.707103669643402,0.0037718613166362,-0.675821602344513,0.718078672885895,0.166217222809792, +-0.538719952106476,0.834597170352936,0.115014836192131,-0.707099795341492,0.707103669643402,0.0037718613166362,-0.538719952106476,0.834597170352936,0.115014836192131,-0.559602022171021,0.828761458396912,-0.000220210975385271,-0.28973001241684,0.93703293800354,0.195001617074013,-0.125202804803848,0.984224200248718,0.125007718801498,-0.149851158261299,0.98356819152832,0.100689120590687,-0.149851158261299,0.98356819152832,0.100689120590687,-0.125202804803848,0.984224200248718,0.125007718801498,-0.0317863635718822,0.998989403247833,0.0317796431481838,-0.48331093788147,0.849686503410339,0.210816040635109,-0.28973001241684,0.93703293800354,0.195001617074013,-0.338062524795532,0.930212795734406,0.142891511321068,-0.538719952106476,0.834597170352936,0.115014836192131,-0.48331093788147,0.849686503410339,0.210816040635109,-0.338062524795532,0.930212795734406,0.142891511321068,-0.338062524795532,0.930212795734406,0.142891511321068,-0.28973001241684,0.93703293800354,0.195001617074013,-0.149851158261299,0.98356819152832,0.100689120590687,-0.559602022171021,0.828761458396912,-0.000220210975385271,-0.538719952106476,0.834597170352936,0.115014836192131,-0.375026047229767,0.923822402954102,0.076859675347805,-0.538719952106476,0.834597170352936,0.115014836192131,-0.338062524795532,0.930212795734406,0.142891511321068,-0.375026047229767,0.923822402954102,0.076859675347805,-0.559602022171021,0.828761458396912,-0.000220210975385271,-0.375026047229767,0.923822402954102,0.076859675347805,-0.388966053724289,0.921252131462097,0.000147596569149755,-0.149851158261299,0.98356819152832,0.100689120590687,-0.0317863635718822,0.998989403247833,0.0317796431481838,-0.0379307456314564,0.998951733112335,0.025623207911849,0.0317797549068928,0.998989462852478,-0.031785573810339,-0.0379307456314564,0.998951733112335,0.025623207911849,-0.0317863635718822,0.998989403247833,0.0317796431481838,-0.338062524795532,0.930212795734406,0.142891511321068,-0.149851158261299,0.98356819152832,0.100689120590687,-0.174020320177078,0.982029259204865,0.0730444639921188,-0.375026047229767,0.923822402954102,0.076859675347805, +-0.338062524795532,0.930212795734406,0.142891511321068,-0.174020320177078,0.982029259204865,0.0730444639921188,-0.174020320177078,0.982029259204865,0.0730444639921188,-0.149851158261299,0.98356819152832,0.100689120590687,-0.0379307456314564,0.998951733112335,0.025623207911849,-0.388966053724289,0.921252131462097,0.000147596569149755,-0.375026047229767,0.923822402954102,0.076859675347805,-0.192727819085121,0.980473697185516,0.0390798225998878,-0.375026047229767,0.923822402954102,0.076859675347805,-0.174020320177078,0.982029259204865,0.0730444639921188,-0.192727819085121,0.980473697185516,0.0390798225998878,-0.388966053724289,0.921252131462097,0.000147596569149755,-0.192727819085121,0.980473697185516,0.0390798225998878,-0.200001552700996,0.979795515537262,-0.000445968005806208,0.0317797549068928,0.998989462852478,-0.031785573810339,0.037927832454443,0.998951733112335,-0.025626702234149,-0.0379307456314564,0.998951733112335,0.025623207911849,0.125007763504982,0.984224379062653,-0.125202134251595,0.037927832454443,0.998951733112335,-0.025626702234149,0.0317797549068928,0.998989462852478,-0.031785573810339,-0.174020320177078,0.982029259204865,0.0730444639921188,-0.0379307456314564,0.998951733112335,0.025623207911849,-0.0439205467700958,0.998862445354462,0.018568379804492,-0.192727819085121,0.980473697185516,0.0390798225998878,-0.174020320177078,0.982029259204865,0.0730444639921188,-0.0439205467700958,0.998862445354462,0.018568379804492,0.037927832454443,0.998951733112335,-0.025626702234149,-0.0439205467700958,0.998862445354462,0.018568379804492,-0.0379307456314564,0.998951733112335,0.025623207911849,-0.200001552700996,0.979795515537262,-0.000445968005806208,-0.192727819085121,0.980473697185516,0.0390798225998878,-0.0487287677824497,0.99876207113266,0.00999085232615471,-0.192727819085121,0.980473697185516,0.0390798225998878,-0.0439205467700958,0.998862445354462,0.018568379804492,-0.0487287677824497,0.99876207113266,0.00999085232615471,-0.200001552700996,0.979795515537262,-0.000445968005806208,-0.0487287677824497,0.99876207113266,0.00999085232615471, +-0.0507281273603439,0.998711943626404,-0.00110683671664447,0.125007763504982,0.984224379062653,-0.125202134251595,0.149802282452583,0.983568251132965,-0.100760869681835,0.037927832454443,0.998951733112335,-0.025626702234149,0.240938410162926,0.940026760101318,-0.241450294852257,0.149802282452583,0.983568251132965,-0.100760869681835,0.125007763504982,0.984224379062653,-0.125202134251595,0.037927832454443,0.998951733112335,-0.025626702234149,0.0439199879765511,0.998862445354462,-0.0185684449970722,-0.0439205467700958,0.998862445354462,0.018568379804492,0.0439199879765511,0.998862445354462,-0.0185684449970722,-0.0487287677824497,0.99876207113266,0.00999085232615471,-0.0439205467700958,0.998862445354462,0.018568379804492,0.149802282452583,0.983568251132965,-0.100760869681835,0.0439199879765511,0.998862445354462,-0.0185684449970722,0.037927832454443,0.998951733112335,-0.025626702234149,0.0487290993332863,0.99876207113266,-0.00998761411756277,-0.0507281273603439,0.998711943626404,-0.00110683671664447,-0.0487287677824497,0.99876207113266,0.00999085232615471,0.0439199879765511,0.998862445354462,-0.0185684449970722,0.0487290993332863,0.99876207113266,-0.00998761411756277,-0.0487287677824497,0.99876207113266,0.00999085232615471,0.0487290993332863,0.99876207113266,-0.00998761411756277,0.050762128084898,0.99871027469635,0.000968540960457176,-0.0507281273603439,0.998711943626404,-0.00110683671664447,0.240938410162926,0.940026760101318,-0.241450294852257,0.289741545915604,0.937032878398895,-0.194984748959541,0.149802282452583,0.983568251132965,-0.100760869681835,0.33895468711853,0.876967310905457,-0.340643525123596,0.289741545915604,0.937032878398895,-0.194984748959541,0.240938410162926,0.940026760101318,-0.241450294852257,0.149802282452583,0.983568251132965,-0.100760869681835,0.174042567610741,0.982029318809509,-0.072990894317627,0.0439199879765511,0.998862445354462,-0.0185684449970722,0.174042567610741,0.982029318809509,-0.072990894317627,0.0487290993332863,0.99876207113266,-0.00998761411756277,0.0439199879765511,0.998862445354462,-0.0185684449970722, +0.289741545915604,0.937032878398895,-0.194984748959541,0.174042567610741,0.982029318809509,-0.072990894317627,0.149802282452583,0.983568251132965,-0.100760869681835,0.19274465739727,0.980473816394806,-0.0389955565333366,0.050762128084898,0.99871027469635,0.000968540960457176,0.0487290993332863,0.99876207113266,-0.00998761411756277,0.174042567610741,0.982029318809509,-0.072990894317627,0.19274465739727,0.980473816394806,-0.0389955565333366,0.0487290993332863,0.99876207113266,-0.00998761411756277,0.19274465739727,0.980473816394806,-0.0389955565333366,0.20003767311573,0.979788243770599,-0.000229265613597818,0.050762128084898,0.99871027469635,0.000968540960457176,0.33895468711853,0.876967310905457,-0.340643525123596,0.412074536085129,0.868086755275726,-0.276803195476532,0.289741545915604,0.937032878398895,-0.194984748959541,0.409694254398346,0.816494941711426,-0.406800478696823,0.412074536085129,0.868086755275726,-0.276803195476532,0.33895468711853,0.876967310905457,-0.340643525123596,0.409694254398346,0.816494941711426,-0.406800478696823,0.499602526426315,0.784420609474182,-0.367534399032593,0.412074536085129,0.868086755275726,-0.276803195476532,0.289741545915604,0.937032878398895,-0.194984748959541,0.33819368481636,0.930212020874023,-0.142585590481758,0.174042567610741,0.982029318809509,-0.072990894317627,0.33819368481636,0.930212020874023,-0.142585590481758,0.19274465739727,0.980473816394806,-0.0389955565333366,0.174042567610741,0.982029318809509,-0.072990894317627,0.412074536085129,0.868086755275726,-0.276803195476532,0.33819368481636,0.930212020874023,-0.142585590481758,0.289741545915604,0.937032878398895,-0.194984748959541,0.375028908252716,0.923822402954102,-0.0768462419509888,0.20003767311573,0.979788243770599,-0.000229265613597818,0.19274465739727,0.980473816394806,-0.0389955565333366,0.33819368481636,0.930212020874023,-0.142585590481758,0.375028908252716,0.923822402954102,-0.0768462419509888,0.19274465739727,0.980473816394806,-0.0389955565333366,0.375028908252716,0.923822402954102,-0.0768462419509888,0.388976246118546,0.921246826648712,-0.00130779296159744, +0.20003767311573,0.979788243770599,-0.000229265613597818,0.499602526426315,0.784420609474182,-0.367534399032593,0.483281403779984,0.849686980247498,-0.210881724953651,0.412074536085129,0.868086755275726,-0.276803195476532,0.412074536085129,0.868086755275726,-0.276803195476532,0.483281403779984,0.849686980247498,-0.210881724953651,0.33819368481636,0.930212020874023,-0.142585590481758,0.483281403779984,0.849686980247498,-0.210881724953651,0.375028908252716,0.923822402954102,-0.0768462419509888,0.33819368481636,0.930212020874023,-0.142585590481758,0.499602526426315,0.784420609474182,-0.367534399032593,0.595823168754578,0.747075736522675,-0.294741660356522,0.483281403779984,0.849686980247498,-0.210881724953651,0.538383483886719,0.834601879119873,-0.116545811295509,0.388976246118546,0.921246826648712,-0.00130779296159744,0.375028908252716,0.923822402954102,-0.0768462419509888,0.483281403779984,0.849686980247498,-0.210881724953651,0.538383483886719,0.834601879119873,-0.116545811295509,0.375028908252716,0.923822402954102,-0.0768462419509888,0.595823168754578,0.747075736522675,-0.294741660356522,0.538383483886719,0.834601879119873,-0.116545811295509,0.483281403779984,0.849686980247498,-0.210881724953651,0.538383483886719,0.834601879119873,-0.116545811295509,0.559609413146973,0.8287513256073,-0.00294087105430663,0.388976246118546,0.921246826648712,-0.00130779296159744,0.595823168754578,0.747075736522675,-0.294741660356522,0.675253927707672,0.718085825443268,-0.168478474020958,0.538383483886719,0.834601879119873,-0.116545811295509,0.675253927707672,0.718085825443268,-0.168478474020958,0.559609413146973,0.8287513256073,-0.00294087105430663,0.538383483886719,0.834601879119873,-0.116545811295509,0.675253927707672,0.718085825443268,-0.168478474020958,0.707088530063629,0.707089185714722,-0.00710760708898306,0.559609413146973,0.8287513256073,-0.00294087105430663,0.365799486637115,0.784392297267914,0.500918686389923,0.409504741430283,0.816495478153229,0.406990110874176,0.338955163955688,0.876967072486877,0.340643614530563,0.365799486637115,0.784392297267914,0.500918686389923, +0.338955163955688,0.876967072486877,0.340643614530563,0.278826087713242,0.868102073669434,0.410675913095474,0.291429191827774,0.747042834758759,0.597491562366486,0.365799486637115,0.784392297267914,0.500918686389923,0.278826087713242,0.868102073669434,0.410675913095474,0.278826087713242,0.868102073669434,0.410675913095474,0.338955163955688,0.876967072486877,0.340643614530563,0.240938305854797,0.940026819705963,0.241450592875481,0.291429191827774,0.747042834758759,0.597491562366486,0.278826087713242,0.868102073669434,0.410675913095474,0.210815995931625,0.84968638420105,0.483311206102371,0.161575391888618,0.718051612377167,0.676975011825562,0.291429191827774,0.747042834758759,0.597491562366486,0.210815995931625,0.84968638420105,0.483311206102371,0.278826087713242,0.868102073669434,0.410675913095474,0.240938305854797,0.940026819705963,0.241450592875481,0.195001572370529,0.937032997608185,0.289730042219162,0.210815995931625,0.84968638420105,0.483311206102371,0.278826087713242,0.868102073669434,0.410675913095474,0.195001572370529,0.937032997608185,0.289730042219162,0.195001572370529,0.937032997608185,0.289730042219162,0.240938305854797,0.940026819705963,0.241450592875481,0.125007599592209,0.984224319458008,0.125202417373657,0.161575391888618,0.718051612377167,0.676975011825562,0.210815995931625,0.84968638420105,0.483311206102371,0.115014180541039,0.834597110748291,0.538720190525055,-0.00448658969253302,0.70710027217865,0.707098960876465,0.161575391888618,0.718051612377167,0.676975011825562,0.115014180541039,0.834597110748291,0.538720190525055,0.195001572370529,0.937032997608185,0.289730042219162,0.125007599592209,0.984224319458008,0.125202417373657,0.100688986480236,0.98356819152832,0.149851009249687,0.100688986480236,0.98356819152832,0.149851009249687,0.125007599592209,0.984224319458008,0.125202417373657,0.0317800119519234,0.998989343643188,0.0317858420312405,0.210815995931625,0.84968638420105,0.483311206102371,0.195001572370529,0.937032997608185,0.289730042219162,0.142891138792038,0.93021285533905,0.33806249499321,0.115014180541039,0.834597110748291,0.538720190525055, +0.210815995931625,0.84968638420105,0.483311206102371,0.142891138792038,0.93021285533905,0.33806249499321,0.142891138792038,0.93021285533905,0.33806249499321,0.195001572370529,0.937032997608185,0.289730042219162,0.100688986480236,0.98356819152832,0.149851009249687,-0.00448658969253302,0.70710027217865,0.707098960876465,0.115014180541039,0.834597110748291,0.538720190525055,-0.000912977557163686,0.828754305839539,0.559611976146698,-0.168478816747665,0.718085646629333,0.675254046916962,-0.00448658969253302,0.70710027217865,0.707098960876465,-0.000912977557163686,0.828754305839539,0.559611976146698,0.100688986480236,0.98356819152832,0.149851009249687,0.0317800119519234,0.998989343643188,0.0317858420312405,0.0256233084946871,0.998951852321625,0.0379308871924877,-0.0317855216562748,0.998989343643188,-0.0317797102034092,0.0256233084946871,0.998951852321625,0.0379308871924877,0.0317800119519234,0.998989343643188,0.0317858420312405,0.142891138792038,0.93021285533905,0.33806249499321,0.100688986480236,0.98356819152832,0.149851009249687,0.0730444192886353,0.98202919960022,0.174020230770111,0.0730444192886353,0.98202919960022,0.174020230770111,0.100688986480236,0.98356819152832,0.149851009249687,0.0256233084946871,0.998951852321625,0.0379308871924877,0.115014180541039,0.834597110748291,0.538720190525055,0.142891138792038,0.93021285533905,0.33806249499321,0.076859712600708,0.923822522163391,0.375026136636734,-0.000912977557163686,0.828754305839539,0.559611976146698,0.115014180541039,0.834597110748291,0.538720190525055,0.076859712600708,0.923822522163391,0.375026136636734,0.076859712600708,0.923822522163391,0.375026136636734,0.142891138792038,0.93021285533905,0.33806249499321,0.0730444192886353,0.98202919960022,0.174020230770111,-0.168478816747665,0.718085646629333,0.675254046916962,-0.000912977557163686,0.828754305839539,0.559611976146698,-0.116545416414738,0.834601700305939,0.538384020328522,-0.294741541147232,0.747075021266937,0.595824062824249,-0.168478816747665,0.718085646629333,0.675254046916962,-0.116545416414738,0.834601700305939,0.538384020328522, +-0.0317855216562748,0.998989343643188,-0.0317797102034092,-0.0256268158555031,0.99895191192627,-0.0379279963672161,0.0256233084946871,0.998951852321625,0.0379308871924877,-0.125201880931854,0.984224379062653,-0.125007808208466,-0.0256268158555031,0.99895191192627,-0.0379279963672161,-0.0317855216562748,0.998989343643188,-0.0317797102034092,-0.000912977557163686,0.828754305839539,0.559611976146698,0.076859712600708,0.923822522163391,0.375026136636734,8.33049343782477e-05,0.921247601509094,0.388976752758026,-0.116545416414738,0.834601700305939,0.538384020328522,-0.000912977557163686,0.828754305839539,0.559611976146698,8.33049343782477e-05,0.921247601509094,0.388976752758026,0.0730444192886353,0.98202919960022,0.174020230770111,0.0256233084946871,0.998951852321625,0.0379308871924877,0.0185683630406857,0.998862504959106,0.0439205691218376,-0.0256268158555031,0.99895191192627,-0.0379279963672161,0.0185683630406857,0.998862504959106,0.0439205691218376,0.0256233084946871,0.998951852321625,0.0379308871924877,0.076859712600708,0.923822522163391,0.375026136636734,0.0730444192886353,0.98202919960022,0.174020230770111,0.0390794984996319,0.980473756790161,0.192727595567703,8.33049343782477e-05,0.921247601509094,0.388976752758026,0.076859712600708,0.923822522163391,0.375026136636734,0.0390794984996319,0.980473756790161,0.192727595567703,0.0390794984996319,0.980473756790161,0.192727595567703,0.0730444192886353,0.98202919960022,0.174020230770111,0.0185683630406857,0.998862504959106,0.0439205691218376,-0.294741541147232,0.747075021266937,0.595824062824249,-0.116545416414738,0.834601700305939,0.538384020328522,-0.210882186889648,0.849686741828918,0.483281642198563,-0.367534935474396,0.784420549869537,0.499602377414703,-0.294741541147232,0.747075021266937,0.595824062824249,-0.210882186889648,0.849686741828918,0.483281642198563,-0.125201880931854,0.984224379062653,-0.125007808208466,-0.100760787725449,0.983568370342255,-0.149802163243294,-0.0256268158555031,0.99895191192627,-0.0379279963672161,-0.241450563073158,0.940026640892029,-0.240938767790794, +-0.100760787725449,0.983568370342255,-0.149802163243294,-0.125201880931854,0.984224379062653,-0.125007808208466,-0.116545416414738,0.834601700305939,0.538384020328522,8.33049343782477e-05,0.921247601509094,0.388976752758026,-0.0768459364771843,0.923822343349457,0.375029057264328,-0.210882186889648,0.849686741828918,0.483281642198563,-0.116545416414738,0.834601700305939,0.538384020328522,-0.0768459364771843,0.923822343349457,0.375029057264328,8.33049343782477e-05,0.921247601509094,0.388976752758026,0.0390794984996319,0.980473756790161,0.192727595567703,0.000156912778038532,0.979794979095459,0.200004711747169,-0.0768459364771843,0.923822343349457,0.375029057264328,8.33049343782477e-05,0.921247601509094,0.388976752758026,0.000156912778038532,0.979794979095459,0.200004711747169,0.0390794984996319,0.980473756790161,0.192727595567703,0.0185683630406857,0.998862504959106,0.0439205691218376,0.00999074429273605,0.99876207113266,0.0487284101545811,0.000156912778038532,0.979794979095459,0.200004711747169,0.0390794984996319,0.980473756790161,0.192727595567703,0.00999074429273605,0.99876207113266,0.0487284101545811,-0.0256268158555031,0.99895191192627,-0.0379279963672161,-0.0185682456940413,0.998862504959106,-0.0439202636480331,0.0185683630406857,0.998862504959106,0.0439205691218376,-0.100760787725449,0.983568370342255,-0.149802163243294,-0.0185682456940413,0.998862504959106,-0.0439202636480331,-0.0256268158555031,0.99895191192627,-0.0379279963672161,-0.0185682456940413,0.998862504959106,-0.0439202636480331,0.00999074429273605,0.99876207113266,0.0487284101545811,0.0185683630406857,0.998862504959106,0.0439205691218376,-0.367534935474396,0.784420549869537,0.499602377414703,-0.210882186889648,0.849686741828918,0.483281642198563,-0.276803821325302,0.868086636066437,0.412074148654938,-0.406800627708435,0.816494941711426,0.409694105386734,-0.367534935474396,0.784420549869537,0.499602377414703,-0.276803821325302,0.868086636066437,0.412074148654938,-0.406800627708435,0.816494941711426,0.409694105386734,-0.276803821325302,0.868086636066437,0.412074148654938, +-0.340643316507339,0.876967310905457,0.338954955339432,-0.210882186889648,0.849686741828918,0.483281642198563,-0.0768459364771843,0.923822343349457,0.375029057264328,-0.142585724592209,0.930212140083313,0.338193297386169,-0.276803821325302,0.868086636066437,0.412074148654938,-0.210882186889648,0.849686741828918,0.483281642198563,-0.142585724592209,0.930212140083313,0.338193297386169,-0.340643316507339,0.876967310905457,0.338954955339432,-0.276803821325302,0.868086636066437,0.412074148654938,-0.194984510540962,0.93703305721283,0.289741396903992,-0.276803821325302,0.868086636066437,0.412074148654938,-0.142585724592209,0.930212140083313,0.338193297386169,-0.194984510540962,0.93703305721283,0.289741396903992,-0.340643316507339,0.876967310905457,0.338954955339432,-0.194984510540962,0.93703305721283,0.289741396903992,-0.241450473666191,0.940026760101318,0.24093833565712,-0.0768459364771843,0.923822343349457,0.375029057264328,0.000156912778038532,0.979794979095459,0.200004711747169,-0.0389950834214687,0.980473756790161,0.192744761705399,-0.142585724592209,0.930212140083313,0.338193297386169,-0.0768459364771843,0.923822343349457,0.375029057264328,-0.0389950834214687,0.980473756790161,0.192744761705399,0.000156912778038532,0.979794979095459,0.200004711747169,0.00999074429273605,0.99876207113266,0.0487284101545811,6.65184643366956e-06,0.998712539672852,0.0507278963923454,-0.0389950834214687,0.980473756790161,0.192744761705399,0.000156912778038532,0.979794979095459,0.200004711747169,6.65184643366956e-06,0.998712539672852,0.0507278963923454,-0.0185682456940413,0.998862504959106,-0.0439202636480331,-0.00998752564191818,0.998762130737305,-0.0487288348376751,0.00999074429273605,0.99876207113266,0.0487284101545811,-0.00998752564191818,0.998762130737305,-0.0487288348376751,6.65184643366956e-06,0.998712539672852,0.0507278963923454,0.00999074429273605,0.99876207113266,0.0487284101545811,-0.241450473666191,0.940026760101318,0.24093833565712,-0.194984510540962,0.93703305721283,0.289741396903992,-0.100760698318481,0.98356819152832,0.149802654981613, +-0.241450473666191,0.940026760101318,0.24093833565712,-0.100760698318481,0.98356819152832,0.149802654981613,-0.125202804803848,0.984224200248718,0.125007718801498,-0.194984510540962,0.93703305721283,0.289741396903992,-0.142585724592209,0.930212140083313,0.338193297386169,-0.0729910433292389,0.982029259204865,0.174042701721191,-0.142585724592209,0.930212140083313,0.338193297386169,-0.0389950834214687,0.980473756790161,0.192744761705399,-0.0729910433292389,0.982029259204865,0.174042701721191,-0.194984510540962,0.93703305721283,0.289741396903992,-0.0729910433292389,0.982029259204865,0.174042701721191,-0.100760698318481,0.98356819152832,0.149802654981613,-0.0389950834214687,0.980473756790161,0.192744761705399,6.65184643366956e-06,0.998712539672852,0.0507278963923454,-0.00998757407069206,0.99876207113266,0.0487290658056736,-0.0729910433292389,0.982029259204865,0.174042701721191,-0.0389950834214687,0.980473756790161,0.192744761705399,-0.00998757407069206,0.99876207113266,0.0487290658056736,-0.125202804803848,0.984224200248718,0.125007718801498,-0.100760698318481,0.98356819152832,0.149802654981613,-0.0256270505487919,0.99895179271698,0.0379283204674721,-0.125202804803848,0.984224200248718,0.125007718801498,-0.0256270505487919,0.99895179271698,0.0379283204674721,-0.0317863635718822,0.998989403247833,0.0317796431481838,-0.100760698318481,0.98356819152832,0.149802654981613,-0.0729910433292389,0.982029259204865,0.174042701721191,-0.0185680836439133,0.998862385749817,0.0439206846058369,-0.0729910433292389,0.982029259204865,0.174042701721191,-0.00998757407069206,0.99876207113266,0.0487290658056736,-0.0185680836439133,0.998862385749817,0.0439206846058369,-0.100760698318481,0.98356819152832,0.149802654981613,-0.0185680836439133,0.998862385749817,0.0439206846058369,-0.0256270505487919,0.99895179271698,0.0379283204674721,6.37362927591312e-06,0.998712539672852,-0.0507276840507984,-0.00998757407069206,0.99876207113266,0.0487290658056736,6.65184643366956e-06,0.998712539672852,0.0507278963923454,-0.00998752564191818,0.998762130737305,-0.0487288348376751, +6.37362927591312e-06,0.998712539672852,-0.0507276840507984,6.65184643366956e-06,0.998712539672852,0.0507278963923454,-0.0729910284280777,0.982029318809509,-0.174042567610741,-0.00998752564191818,0.998762130737305,-0.0487288348376751,-0.0185682456940413,0.998862504959106,-0.0439202636480331,-0.100760787725449,0.983568370342255,-0.149802163243294,-0.0729910284280777,0.982029318809509,-0.174042567610741,-0.0185682456940413,0.998862504959106,-0.0439202636480331,0.025622945278883,0.99895179271698,-0.0379304029047489,-0.0317863635718822,0.998989403247833,0.0317796431481838,-0.0256270505487919,0.99895179271698,0.0379283204674721,0.025622945278883,0.99895179271698,-0.0379304029047489,0.0317797549068928,0.998989462852478,-0.031785573810339,-0.0317863635718822,0.998989403247833,0.0317796431481838,0.00999070052057505,0.99876207113266,-0.0487282313406467,-0.0185680836439133,0.998862385749817,0.0439206846058369,-0.00998757407069206,0.99876207113266,0.0487290658056736,6.37362927591312e-06,0.998712539672852,-0.0507276840507984,0.00999070052057505,0.99876207113266,-0.0487282313406467,-0.00998757407069206,0.99876207113266,0.0487290658056736,0.0185682699084282,0.998862504959106,-0.043920211493969,-0.0256270505487919,0.99895179271698,0.0379283204674721,-0.0185680836439133,0.998862385749817,0.0439206846058369,0.0185682699084282,0.998862504959106,-0.043920211493969,0.025622945278883,0.99895179271698,-0.0379304029047489,-0.0256270505487919,0.99895179271698,0.0379283204674721,0.00999070052057505,0.99876207113266,-0.0487282313406467,0.0185682699084282,0.998862504959106,-0.043920211493969,-0.0185680836439133,0.998862385749817,0.0439206846058369,-0.0389953441917896,0.980473756790161,-0.192744597792625,6.37362927591312e-06,0.998712539672852,-0.0507276840507984,-0.00998752564191818,0.998762130737305,-0.0487288348376751,-0.0729910284280777,0.982029318809509,-0.174042567610741,-0.0389953441917896,0.980473756790161,-0.192744597792625,-0.00998752564191818,0.998762130737305,-0.0487288348376751,-0.194985017180443,0.937032878398895,-0.28974175453186, +-0.0729910284280777,0.982029318809509,-0.174042567610741,-0.100760787725449,0.983568370342255,-0.149802163243294,-0.241450563073158,0.940026640892029,-0.240938767790794,-0.194985017180443,0.937032878398895,-0.28974175453186,-0.100760787725449,0.983568370342255,-0.149802163243294,-0.340643912553787,0.876967072486877,-0.338954865932465,-0.194985017180443,0.937032878398895,-0.28974175453186,-0.241450563073158,0.940026640892029,-0.240938767790794,0.100688822567463,0.983568251132965,-0.149850741028786,0.0317797549068928,0.998989462852478,-0.031785573810339,0.025622945278883,0.99895179271698,-0.0379304029047489,0.100688822567463,0.983568251132965,-0.149850741028786,0.125007763504982,0.984224379062653,-0.125202134251595,0.0317797549068928,0.998989462852478,-0.031785573810339,0.000156899157445878,0.979794979095459,-0.20000459253788,0.00999070052057505,0.99876207113266,-0.0487282313406467,6.37362927591312e-06,0.998712539672852,-0.0507276840507984,-0.0389953441917896,0.980473756790161,-0.192744597792625,0.000156899157445878,0.979794979095459,-0.20000459253788,6.37362927591312e-06,0.998712539672852,-0.0507276840507984,0.0730442255735397,0.982029318809509,-0.174020022153854,0.025622945278883,0.99895179271698,-0.0379304029047489,0.0185682699084282,0.998862504959106,-0.043920211493969,0.0730442255735397,0.982029318809509,-0.174020022153854,0.100688822567463,0.983568251132965,-0.149850741028786,0.025622945278883,0.99895179271698,-0.0379304029047489,0.0390796773135662,0.980473816394806,-0.192727342247963,0.0185682699084282,0.998862504959106,-0.043920211493969,0.00999070052057505,0.99876207113266,-0.0487282313406467,0.000156899157445878,0.979794979095459,-0.20000459253788,0.0390796773135662,0.980473816394806,-0.192727342247963,0.00999070052057505,0.99876207113266,-0.0487282313406467,0.0390796773135662,0.980473816394806,-0.192727342247963,0.0730442255735397,0.982029318809509,-0.174020022153854,0.0185682699084282,0.998862504959106,-0.043920211493969,-0.194985017180443,0.937032878398895,-0.28974175453186,-0.142585411667824,0.930212020874023,-0.338193714618683, +-0.0729910284280777,0.982029318809509,-0.174042567610741,-0.142585411667824,0.930212020874023,-0.338193714618683,-0.0389953441917896,0.980473756790161,-0.192744597792625,-0.0729910284280777,0.982029318809509,-0.174042567610741,-0.340643912553787,0.876967072486877,-0.338954865932465,-0.276803761720657,0.868086636066437,-0.412074446678162,-0.194985017180443,0.937032878398895,-0.28974175453186,-0.276803761720657,0.868086636066437,-0.412074446678162,-0.142585411667824,0.930212020874023,-0.338193714618683,-0.194985017180443,0.937032878398895,-0.28974175453186,-0.406990051269531,0.816495299339294,-0.409505188465118,-0.276803761720657,0.868086636066437,-0.412074446678162,-0.340643912553787,0.876967072486877,-0.338954865932465,-0.406990051269531,0.816495299339294,-0.409505188465118,-0.364927560091019,0.784376561641693,-0.501578688621521,-0.276803761720657,0.868086636066437,-0.412074446678162,-0.364927560091019,0.784376561641693,-0.501578688621521,-0.210882216691971,0.849686861038208,-0.483281433582306,-0.276803761720657,0.868086636066437,-0.412074446678162,-0.276803761720657,0.868086636066437,-0.412074446678162,-0.210882216691971,0.849686861038208,-0.483281433582306,-0.142585411667824,0.930212020874023,-0.338193714618683,-0.364927560091019,0.784376561641693,-0.501578688621521,-0.292814314365387,0.747057974338531,-0.596794962882996,-0.210882216691971,0.849686861038208,-0.483281433582306,-0.142585411667824,0.930212020874023,-0.338193714618683,-0.0768460780382156,0.923822343349457,-0.375028997659683,-0.0389953441917896,0.980473756790161,-0.192744597792625,-0.0768460780382156,0.923822343349457,-0.375028997659683,0.000156899157445878,0.979794979095459,-0.20000459253788,-0.0389953441917896,0.980473756790161,-0.192744597792625,-0.210882216691971,0.849686861038208,-0.483281433582306,-0.0768460780382156,0.923822343349457,-0.375028997659683,-0.142585411667824,0.930212020874023,-0.338193714618683,-0.292814314365387,0.747057974338531,-0.596794962882996,-0.116545595228672,0.834601938724518,-0.538383603096008,-0.210882216691971,0.849686861038208,-0.483281433582306, +-0.210882216691971,0.849686861038208,-0.483281433582306,-0.116545595228672,0.834601938724518,-0.538383603096008,-0.0768460780382156,0.923822343349457,-0.375028997659683,-0.292814314365387,0.747057974338531,-0.596794962882996,-0.163807645440102,0.718066513538361,-0.676422595977783,-0.116545595228672,0.834601938724518,-0.538383603096008,-0.0768460780382156,0.923822343349457,-0.375028997659683,8.34070306154899e-05,0.921247601509094,-0.388976633548737,0.000156899157445878,0.979794979095459,-0.20000459253788,-0.116545595228672,0.834601938724518,-0.538383603096008,8.34070306154899e-05,0.921247601509094,-0.388976633548737,-0.0768460780382156,0.923822343349457,-0.375028997659683,8.34070306154899e-05,0.921247601509094,-0.388976633548737,0.0390796773135662,0.980473816394806,-0.192727342247963,0.000156899157445878,0.979794979095459,-0.20000459253788,-0.163807645440102,0.718066513538361,-0.676422595977783,-0.000912704796064645,0.828754544258118,-0.55961149930954,-0.116545595228672,0.834601938724518,-0.538383603096008,-0.116545595228672,0.834601938724518,-0.538383603096008,-0.000912704796064645,0.828754544258118,-0.55961149930954,8.34070306154899e-05,0.921247601509094,-0.388976633548737,-0.163807645440102,0.718066513538361,-0.676422595977783,0.00226237624883652,0.707105100154877,-0.707104861736298,-0.000912704796064645,0.828754544258118,-0.55961149930954,8.34070306154899e-05,0.921247601509094,-0.388976633548737,0.0768593922257423,0.923822522163391,-0.375026226043701,0.0390796773135662,0.980473816394806,-0.192727342247963,-0.000912704796064645,0.828754544258118,-0.55961149930954,0.0768593922257423,0.923822522163391,-0.375026226043701,8.34070306154899e-05,0.921247601509094,-0.388976633548737,0.0768593922257423,0.923822522163391,-0.375026226043701,0.0730442255735397,0.982029318809509,-0.174020022153854,0.0390796773135662,0.980473816394806,-0.192727342247963,0.00226237624883652,0.707105100154877,-0.707104861736298,0.115013785660267,0.834597408771515,-0.538719773292542,-0.000912704796064645,0.828754544258118,-0.55961149930954,-0.000912704796064645,0.828754544258118,-0.55961149930954, +0.115013785660267,0.834597408771515,-0.538719773292542,0.0768593922257423,0.923822522163391,-0.375026226043701,0.00226237624883652,0.707105100154877,-0.707104861736298,0.166216611862183,0.718078255653381,-0.675822198390961,0.115013785660267,0.834597408771515,-0.538719773292542,0.0768593922257423,0.923822522163391,-0.375026226043701,0.142890959978104,0.930212795734406,-0.338062644004822,0.0730442255735397,0.982029318809509,-0.174020022153854,0.115013785660267,0.834597408771515,-0.538719773292542,0.142890959978104,0.930212795734406,-0.338062644004822,0.0768593922257423,0.923822522163391,-0.375026226043701,0.142890959978104,0.930212795734406,-0.338062644004822,0.100688822567463,0.983568251132965,-0.149850741028786,0.0730442255735397,0.982029318809509,-0.174020022153854,0.166216611862183,0.718078255653381,-0.675822198390961,0.21081654727459,0.849686503410339,-0.483310699462891,0.115013785660267,0.834597408771515,-0.538719773292542,0.115013785660267,0.834597408771515,-0.538719773292542,0.21081654727459,0.849686503410339,-0.483310699462891,0.142890959978104,0.930212795734406,-0.338062644004822,0.166216611862183,0.718078255653381,-0.675822198390961,0.293334782123566,0.747062861919403,-0.596533179283142,0.21081654727459,0.849686503410339,-0.483310699462891,0.142890959978104,0.930212795734406,-0.338062644004822,0.195002317428589,0.93703293800354,-0.289729833602905,0.100688822567463,0.983568251132965,-0.149850741028786,0.21081654727459,0.849686503410339,-0.483310699462891,0.195002317428589,0.93703293800354,-0.289729833602905,0.142890959978104,0.930212795734406,-0.338062644004822,0.195002317428589,0.93703293800354,-0.289729833602905,0.125007763504982,0.984224379062653,-0.125202134251595,0.100688822567463,0.983568251132965,-0.149850741028786,0.195002317428589,0.93703293800354,-0.289729833602905,0.240938410162926,0.940026760101318,-0.241450294852257,0.125007763504982,0.984224379062653,-0.125202134251595,0.293334782123566,0.747062861919403,-0.596533179283142,0.278826266527176,0.868102192878723,-0.410675585269928,0.21081654727459,0.849686503410339,-0.483310699462891, +0.21081654727459,0.849686503410339,-0.483310699462891,0.278826266527176,0.868102192878723,-0.410675585269928,0.195002317428589,0.93703293800354,-0.289729833602905,0.278826266527176,0.868102192878723,-0.410675585269928,0.240938410162926,0.940026760101318,-0.241450294852257,0.195002317428589,0.93703293800354,-0.289729833602905,0.293334782123566,0.747062861919403,-0.596533179283142,0.368440628051758,0.784433960914612,-0.498913675546646,0.278826266527176,0.868102192878723,-0.410675585269928,0.278826266527176,0.868102192878723,-0.410675585269928,0.33895468711853,0.876967310905457,-0.340643525123596,0.240938410162926,0.940026760101318,-0.241450294852257,0.368440628051758,0.784433960914612,-0.498913675546646,0.33895468711853,0.876967310905457,-0.340643525123596,0.278826266527176,0.868102192878723,-0.410675585269928,0.368440628051758,0.784433960914612,-0.498913675546646,0.409694254398346,0.816494941711426,-0.406800478696823,0.33895468711853,0.876967310905457,-0.340643525123596 + } + BinormalsW: *2496 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *7488 { + a: 0.684656202793121,-0.00903038587421179,-0.72881019115448,-0.209873825311661,-0.00131029996555299,-0.977727591991425,-0.0607260391116142,-0.0137295480817556,-0.998060047626495,0.424720942974091,-0.00913458410650492,-0.905278205871582,0.684656202793121,-0.00903038587421179,-0.72881019115448,-0.0607260391116142,-0.0137295480817556,-0.998060047626495,0.707106351852417,-3.04547228324736e-07,-0.707107186317444,0.684656202793121,-0.00903038587421179,-0.72881019115448,0.424720942974091,-0.00913458410650492,-0.905278205871582,0.707106351852417,-3.04547228324736e-07,-0.707107186317444,0.905278384685516,0.00913459341973066,-0.424720585346222,0.684656202793121,-0.00903038587421179,-0.72881019115448,0.905278384685516,0.00913459341973066,-0.424720585346222,0.989004492759705,0.0295220669358969,0.144908919930458,0.684656202793121,-0.00903038587421179,-0.72881019115448,0.684656202793121,-0.00903038587421179,-0.72881019115448,0.989004492759705,0.0295220669358969,0.144908919930458,0.986158668994904,0.000222203409066424,0.16580405831337,0.424720942974091,-0.00913458410650492,-0.905278205871582,-0.0607260391116142,-0.0137295480817556,-0.998060047626495,-0.031557209789753,-0.0147382030263543,-0.999393284320831,0.544800758361816,-0.00722420262172818,-0.838534414768219,0.707106351852417,-3.04547228324736e-07,-0.707107186317444,0.424720942974091,-0.00913458410650492,-0.905278205871582,0.298861801624298,-0.00938842352479696,-0.95425021648407,0.424720942974091,-0.00913458410650492,-0.905278205871582,-0.031557209789753,-0.0147382030263543,-0.999393284320831,0.544800758361816,-0.00722420262172818,-0.838534414768219,0.424720942974091,-0.00913458410650492,-0.905278205871582,0.298861801624298,-0.00938842352479696,-0.95425021648407,0.838534712791443,0.00722413929179311,-0.544800281524658,0.905278384685516,0.00913459341973066,-0.424720585346222,0.707106351852417,-3.04547228324736e-07,-0.707107186317444,0.707106828689575,-4.14764009804003e-08,-0.707106709480286,0.707106351852417,-3.04547228324736e-07,-0.707107186317444,0.544800758361816,-0.00722420262172818,-0.838534414768219, +0.707106828689575,-4.14764009804003e-08,-0.707106709480286,0.838534712791443,0.00722413929179311,-0.544800281524658,0.707106351852417,-3.04547228324736e-07,-0.707107186317444,0.449455469846725,-0.00893337186425924,-0.893258035182953,0.544800758361816,-0.00722420262172818,-0.838534414768219,0.298861801624298,-0.00938842352479696,-0.95425021648407,0.603226542472839,-0.0147381583228707,-0.797433733940125,0.544800758361816,-0.00722420262172818,-0.838534414768219,0.449455469846725,-0.00893337186425924,-0.893258035182953,0.603226542472839,-0.0147381583228707,-0.797433733940125,0.707106828689575,-4.14764009804003e-08,-0.707106709480286,0.544800758361816,-0.00722420262172818,-0.838534414768219,0.706379771232605,-0.00145185436122119,-0.707831561565399,0.707106828689575,-4.14764009804003e-08,-0.707106709480286,0.603226542472839,-0.0147381583228707,-0.797433733940125,0.706379771232605,-0.00145185436122119,-0.707831561565399,0.79703414440155,0.0138799883425236,-0.603774726390839,0.707106828689575,-4.14764009804003e-08,-0.707106709480286,0.79703414440155,0.0138799883425236,-0.603774726390839,0.838534712791443,0.00722413929179311,-0.544800281524658,0.707106828689575,-4.14764009804003e-08,-0.707106709480286,0.449455469846725,-0.00893337186425924,-0.893258035182953,0.298861801624298,-0.00938842352479696,-0.95425021648407,0.24104642868042,-0.0056744241155684,-0.970497012138367,0.79703414440155,0.0138799883425236,-0.603774726390839,0.893711268901825,0.0100915348157287,-0.448529124259949,0.838534712791443,0.00722413929179311,-0.544800281524658,0.24104642868042,-0.0056744241155684,-0.970497012138367,0.298861801624298,-0.00938842352479696,-0.95425021648407,-0.0107072405517101,-0.00870420876890421,-0.999904811382294,0.298861801624298,-0.00938842352479696,-0.95425021648407,-0.031557209789753,-0.0147382030263543,-0.999393284320831,-0.0107072405517101,-0.00870420876890421,-0.999904811382294,0.24104642868042,-0.0056744241155684,-0.970497012138367,-0.0107072405517101,-0.00870420876890421,-0.999904811382294,-0.00161598657723516,-0.0031189969740808,-0.999993801116943, +0.893711268901825,0.0100915348157287,-0.448529124259949,0.954250633716583,0.00938891526311636,-0.298860490322113,0.838534712791443,0.00722413929179311,-0.544800281524658,0.838534712791443,0.00722413929179311,-0.544800281524658,0.954250633716583,0.00938891526311636,-0.298860490322113,0.905278384685516,0.00913459341973066,-0.424720585346222,0.893711268901825,0.0100915348157287,-0.448529124259949,0.970871090888977,0.00732546951621771,-0.239490300416946,0.954250633716583,0.00938891526311636,-0.298860490322113,-0.311371743679047,-0.00138786376919597,-0.950287163257599,-0.00161598657723516,-0.0031189969740808,-0.999993801116943,-0.0107072405517101,-0.00870420876890421,-0.999904811382294,-0.311371743679047,-0.00138786376919597,-0.950287163257599,-0.242790877819061,0.00231928937137127,-0.970075905323029,-0.00161598657723516,-0.0031189969740808,-0.999993801116943,-0.441034942865372,-0.000700948992744088,-0.897489666938782,-0.0107072405517101,-0.00870420876890421,-0.999904811382294,-0.031557209789753,-0.0147382030263543,-0.999393284320831,-0.441034942865372,-0.000700948992744088,-0.897489666938782,-0.311371743679047,-0.00138786376919597,-0.950287163257599,-0.0107072405517101,-0.00870420876890421,-0.999904811382294,0.954250633716583,0.00938891526311636,-0.298860490322113,0.999596416950226,0.0110501712188125,0.0261711310595274,0.905278384685516,0.00913459341973066,-0.424720585346222,0.905278384685516,0.00913459341973066,-0.424720585346222,0.999596416950226,0.0110501712188125,0.0261711310595274,0.989004492759705,0.0295220669358969,0.144908919930458,0.970871090888977,0.00732546951621771,-0.239490300416946,0.999917387962341,0.007193922996521,0.0106538031250238,0.954250633716583,0.00938891526311636,-0.298860490322113,0.954250633716583,0.00938891526311636,-0.298860490322113,0.999917387962341,0.007193922996521,0.0106538031250238,0.999596416950226,0.0110501712188125,0.0261711310595274,0.970871090888977,0.00732546951621771,-0.239490300416946,0.999989926815033,0.00317250075750053,0.00317249516956508,0.999917387962341,0.007193922996521,0.0106538031250238, +-0.548505842685699,0.00362211442552507,-0.836138904094696,-0.242790877819061,0.00231928937137127,-0.970075905323029,-0.311371743679047,-0.00138786376919597,-0.950287163257599,-0.548505842685699,0.00362211442552507,-0.836138904094696,-0.44980189204216,0.00849947892129421,-0.893087923526764,-0.242790877819061,0.00231928937137127,-0.970075905323029,0.999989926815033,0.00317250075750053,0.00317249516956508,0.950301110744476,-8.22301517473534e-05,0.311332255601883,0.999917387962341,0.007193922996521,0.0106538031250238,0.999989926815033,0.00317250075750053,0.00317249516956508,0.969696998596191,-0.00221657403744757,0.244300782680511,0.950301110744476,-8.22301517473534e-05,0.311332255601883,0.999917387962341,0.007193922996521,0.0106538031250238,0.897639811038971,-0.000763290270697325,0.440729141235352,0.999596416950226,0.0110501712188125,0.0261711310595274,0.999917387962341,0.007193922996521,0.0106538031250238,0.950301110744476,-8.22301517473534e-05,0.311332255601883,0.897639811038971,-0.000763290270697325,0.440729141235352,0.999596416950226,0.0110501712188125,0.0261711310595274,0.700149238109589,0.00283069862052798,0.713990926742554,0.989004492759705,0.0295220669358969,0.144908919930458,0.999596416950226,0.0110501712188125,0.0261711310595274,0.897639811038971,-0.000763290270697325,0.440729141235352,0.700149238109589,0.00283069862052798,0.713990926742554,0.969696998596191,-0.00221657403744757,0.244300782680511,0.836139321327209,-0.00362204993143678,0.548505187034607,0.950301110744476,-8.22301517473534e-05,0.311332255601883,0.969696998596191,-0.00221657403744757,0.244300782680511,0.892624258995056,-0.00732118869200349,0.45074200630188,0.836139321327209,-0.00362204993143678,0.548505187034607,0.989004492759705,0.0295220669358969,0.144908919930458,0.700149238109589,0.00283069862052798,0.713990926742554,0.0666294544935226,-0.0122140441089869,0.997703015804291,0.989004492759705,0.0295220669358969,0.144908919930458,0.0666294544935226,-0.0122140441089869,0.997703015804291,0.599655747413635,0.00107246520929039,0.800257325172424,0.700149238109589,0.00283069862052798,0.713990926742554, +0.0346417054533958,-0.0132105965167284,0.999312460422516,0.0666294544935226,-0.0122140441089869,0.997703015804291,0.700149238109589,0.00283069862052798,0.713990926742554,0.43959629535675,0.00135846738703549,0.898194432258606,0.0346417054533958,-0.0132105965167284,0.999312460422516,0.897639811038971,-0.000763290270697325,0.440729141235352,0.43959629535675,0.00135846738703549,0.898194432258606,0.700149238109589,0.00283069862052798,0.713990926742554,0.43959629535675,0.00135846738703549,0.898194432258606,0.0133321043103933,-0.0075274808332324,0.999882817268372,0.0346417054533958,-0.0132105965167284,0.999312460422516,0.950301110744476,-8.22301517473534e-05,0.311332255601883,0.707106471061707,1.24580765259452e-07,0.707107067108154,0.897639811038971,-0.000763290270697325,0.440729141235352,0.897639811038971,-0.000763290270697325,0.440729141235352,0.707106471061707,1.24580765259452e-07,0.707107067108154,0.43959629535675,0.00135846738703549,0.898194432258606,0.950301110744476,-8.22301517473534e-05,0.311332255601883,0.836139321327209,-0.00362204993143678,0.548505187034607,0.707106471061707,1.24580765259452e-07,0.707107067108154,0.43959629535675,0.00135846738703549,0.898194432258606,0.311332732439041,8.21825742605142e-05,0.950300991535187,0.0133321043103933,-0.0075274808332324,0.999882817268372,0.707106471061707,1.24580765259452e-07,0.707107067108154,0.311332732439041,8.21825742605142e-05,0.950300991535187,0.43959629535675,0.00135846738703549,0.898194432258606,0.311332732439041,8.21825742605142e-05,0.950300991535187,0.00341861741617322,-0.00191560119856149,0.999992311000824,0.0133321043103933,-0.0075274808332324,0.999882817268372,0.311332732439041,8.21825742605142e-05,0.950300991535187,0.242725923657417,0.00389127782545984,0.970087110996246,0.00341861741617322,-0.00191560119856149,0.999992311000824,0.707106471061707,1.24580765259452e-07,0.707107067108154,0.548505246639252,0.00362203549593687,0.836139261722565,0.311332732439041,8.21825742605142e-05,0.950300991535187,0.548505246639252,0.00362203549593687,0.836139261722565,0.242725923657417,0.00389127782545984,0.970087110996246, +0.311332732439041,8.21825742605142e-05,0.950300991535187,0.836139321327209,-0.00362204993143678,0.548505187034607,0.548505246639252,0.00362203549593687,0.836139261722565,0.707106471061707,1.24580765259452e-07,0.707107067108154,0.548505246639252,0.00362203549593687,0.836139261722565,0.449801683425903,0.00849930848926306,0.893088042736053,0.242725923657417,0.00389127782545984,0.970087110996246,0.836139321327209,-0.00362204993143678,0.548505187034607,0.70710688829422,-1.84015021886808e-07,0.707106649875641,0.548505246639252,0.00362203549593687,0.836139261722565,0.70710688829422,-1.84015021886808e-07,0.707106649875641,0.449801683425903,0.00849930848926306,0.893088042736053,0.548505246639252,0.00362203549593687,0.836139261722565,0.892624258995056,-0.00732118869200349,0.45074200630188,0.70710688829422,-1.84015021886808e-07,0.707106649875641,0.836139321327209,-0.00362204993143678,0.548505187034607,0.70710688829422,-1.84015021886808e-07,0.707106649875641,0.605432748794556,0.0112782791256905,0.795816540718079,0.449801683425903,0.00849930848926306,0.893088042736053,0.892624258995056,-0.00732118869200349,0.45074200630188,0.796235322952271,-0.0121713858097792,0.604864597320557,0.70710688829422,-1.84015021886808e-07,0.707106649875641,0.796235322952271,-0.0121713858097792,0.604864597320557,0.605432748794556,0.0112782791256905,0.795816540718079,0.70710688829422,-1.84015021886808e-07,0.707106649875641,0.796235322952271,-0.0121713858097792,0.604864597320557,0.707940578460693,-0.00167053542099893,0.706269979476929,0.605432748794556,0.0112782791256905,0.795816540718079,-0.242629006505013,-0.00249176658689976,0.970115959644318,0.0133321043103933,-0.0075274808332324,0.999882817268372,0.00341861741617322,-0.00191560119856149,0.999992311000824,-0.242629006505013,-0.00249176658689976,0.970115959644318,-0.300807952880859,-0.00649514235556126,0.953662633895874,0.0133321043103933,-0.0075274808332324,0.999882817268372,-0.449454456567764,-0.00893393252044916,0.893258571624756,-0.300807952880859,-0.00649514235556126,0.953662633895874,-0.242629006505013,-0.00249176658689976,0.970115959644318, +-0.300807952880859,-0.00649514235556126,0.953662633895874,0.0346417054533958,-0.0132105965167284,0.999312460422516,0.0133321043103933,-0.0075274808332324,0.999882817268372,-0.449454456567764,-0.00893393252044916,0.893258571624756,-0.544799506664276,-0.00722460029646754,0.838535189628601,-0.300807952880859,-0.00649514235556126,0.953662633895874,-0.603226065635681,-0.0147382421419024,0.797434031963348,-0.544799506664276,-0.00722460029646754,0.838535189628601,-0.449454456567764,-0.00893393252044916,0.893258571624756,-0.300807952880859,-0.00649514235556126,0.953662633895874,-0.42676368355751,-0.00675800396129489,0.90433794260025,0.0346417054533958,-0.0132105965167284,0.999312460422516,-0.544799506664276,-0.00722460029646754,0.838535189628601,-0.42676368355751,-0.00675800396129489,0.90433794260025,-0.300807952880859,-0.00649514235556126,0.953662633895874,-0.42676368355751,-0.00675800396129489,0.90433794260025,0.0666294544935226,-0.0122140441089869,0.997703015804291,0.0346417054533958,-0.0132105965167284,0.999312460422516,-0.603226065635681,-0.0147382421419024,0.797434031963348,-0.70710700750351,2.84531722627435e-07,0.707106530666351,-0.544799506664276,-0.00722460029646754,0.838535189628601,-0.706380188465118,-0.00145136343780905,0.707831144332886,-0.70710700750351,2.84531722627435e-07,0.707106530666351,-0.603226065635681,-0.0147382421419024,0.797434031963348,-0.706380188465118,-0.00145136343780905,0.707831144332886,-0.79703426361084,0.013880061917007,0.603774607181549,-0.70710700750351,2.84531722627435e-07,0.707106530666351,-0.544799506664276,-0.00722460029646754,0.838535189628601,-0.707106232643127,-2.95534817951193e-07,0.707107305526733,-0.42676368355751,-0.00675800396129489,0.90433794260025,-0.70710700750351,2.84531722627435e-07,0.707106530666351,-0.707106232643127,-2.95534817951193e-07,0.707107305526733,-0.544799506664276,-0.00722460029646754,0.838535189628601,-0.42676368355751,-0.00675800396129489,0.90433794260025,-0.688176155090332,-0.00662370724603534,0.725513398647308,0.0666294544935226,-0.0122140441089869,0.997703015804291, +-0.707106232643127,-2.95534817951193e-07,0.707107305526733,-0.688176155090332,-0.00662370724603534,0.725513398647308,-0.42676368355751,-0.00675800396129489,0.90433794260025,-0.688176155090332,-0.00662370724603534,0.725513398647308,0.248662382364273,0.00129805540200323,0.96858936548233,0.0666294544935226,-0.0122140441089869,0.997703015804291,-0.79703426361084,0.013880061917007,0.603774607181549,-0.838535189628601,0.00722472090274096,0.544799506664276,-0.70710700750351,2.84531722627435e-07,0.707106530666351,-0.70710700750351,2.84531722627435e-07,0.707106530666351,-0.838535189628601,0.00722472090274096,0.544799506664276,-0.707106232643127,-2.95534817951193e-07,0.707107305526733,-0.79703426361084,0.013880061917007,0.603774607181549,-0.893710911273956,0.0100916093215346,0.448529809713364,-0.838535189628601,0.00722472090274096,0.544799506664276,-0.707106232643127,-2.95534817951193e-07,0.707107305526733,-0.905297219753265,0.00915513560175896,0.42467999458313,-0.688176155090332,-0.00662370724603534,0.725513398647308,-0.838535189628601,0.00722472090274096,0.544799506664276,-0.905297219753265,0.00915513560175896,0.42467999458313,-0.707106232643127,-2.95534817951193e-07,0.707107305526733,-0.893710911273956,0.0100916093215346,0.448529809713364,-0.954250693321228,0.00938874203711748,0.298860192298889,-0.838535189628601,0.00722472090274096,0.544799506664276,-0.838535189628601,0.00722472090274096,0.544799506664276,-0.954250693321228,0.00938874203711748,0.298860192298889,-0.905297219753265,0.00915513560175896,0.42467999458313,-0.893710911273956,0.0100916093215346,0.448529809713364,-0.970871031284332,0.00732554262503982,0.239490687847137,-0.954250693321228,0.00938874203711748,0.298860192298889,-0.905297219753265,0.00915513560175896,0.42467999458313,-0.988251626491547,0.0303095281124115,-0.149800077080727,-0.688176155090332,-0.00662370724603534,0.725513398647308,-0.688176155090332,-0.00662370724603534,0.725513398647308,-0.988251626491547,0.0303095281124115,-0.149800077080727,-0.98716527223587,-0.000214023079024628,-0.159701749682426, +-0.970871031284332,0.00732554262503982,0.239490687847137,-0.999917387962341,0.00719364592805505,-0.0106534026563168,-0.954250693321228,0.00938874203711748,0.298860192298889,-0.970871031284332,0.00732554262503982,0.239490687847137,-0.999989926815033,0.00317236757837236,-0.0031723661813885,-0.999917387962341,0.00719364592805505,-0.0106534026563168,-0.954250693321228,0.00938874203711748,0.298860192298889,-0.999417006969452,0.0132800592109561,-0.0314523763954639,-0.905297219753265,0.00915513560175896,0.42467999458313,-0.905297219753265,0.00915513560175896,0.42467999458313,-0.999417006969452,0.0132800592109561,-0.0314523763954639,-0.988251626491547,0.0303095281124115,-0.149800077080727,-0.954250693321228,0.00938874203711748,0.298860192298889,-0.999917387962341,0.00719364592805505,-0.0106534026563168,-0.999417006969452,0.0132800592109561,-0.0314523763954639,-0.999989926815033,0.00317236757837236,-0.0031723661813885,-0.950300931930542,-8.2378915976733e-05,-0.311332851648331,-0.999917387962341,0.00719364592805505,-0.0106534026563168,-0.999989926815033,0.00317236757837236,-0.0031723661813885,-0.969696879386902,-0.00221665436401963,-0.244301065802574,-0.950300931930542,-8.2378915976733e-05,-0.311332851648331,-0.999917387962341,0.00719364592805505,-0.0106534026563168,-0.897520780563354,-0.000636288488749415,-0.440971702337265,-0.999417006969452,0.0132800592109561,-0.0314523763954639,-0.999917387962341,0.00719364592805505,-0.0106534026563168,-0.950300931930542,-8.2378915976733e-05,-0.311332851648331,-0.897520780563354,-0.000636288488749415,-0.440971702337265,-0.999417006969452,0.0132800592109561,-0.0314523763954639,-0.707278370857239,-0.00105592689942569,-0.706934332847595,-0.988251626491547,0.0303095281124115,-0.149800077080727,-0.999417006969452,0.0132800592109561,-0.0314523763954639,-0.897520780563354,-0.000636288488749415,-0.440971702337265,-0.707278370857239,-0.00105592689942569,-0.706934332847595,-0.969696879386902,-0.00221665436401963,-0.244301065802574,-0.83613908290863,-0.00362211256287992,-0.548505544662476,-0.950300931930542,-8.2378915976733e-05,-0.311332851648331, +-0.969696879386902,-0.00221665436401963,-0.244301065802574,-0.89262443780899,-0.00732150813564658,-0.450741618871689,-0.83613908290863,-0.00362211256287992,-0.548505544662476,-0.988251626491547,0.0303095281124115,-0.149800077080727,-0.707278370857239,-0.00105592689942569,-0.706934332847595,-0.0607260391116142,-0.0137295480817556,-0.998060047626495,-0.988251626491547,0.0303095281124115,-0.149800077080727,-0.0607260391116142,-0.0137295480817556,-0.998060047626495,-0.577075004577637,-0.00109448586590588,-0.816690444946289,-0.707278370857239,-0.00105592689942569,-0.706934332847595,-0.031557209789753,-0.0147382030263543,-0.999393284320831,-0.0607260391116142,-0.0137295480817556,-0.998060047626495,-0.707278370857239,-0.00105592689942569,-0.706934332847595,-0.441034942865372,-0.000700948992744088,-0.897489666938782,-0.031557209789753,-0.0147382030263543,-0.999393284320831,-0.897520780563354,-0.000636288488749415,-0.440971702337265,-0.441034942865372,-0.000700948992744088,-0.897489666938782,-0.707278370857239,-0.00105592689942569,-0.706934332847595,-0.950300931930542,-8.2378915976733e-05,-0.311332851648331,-0.707106649875641,1.31167809058752e-07,-0.707106947898865,-0.897520780563354,-0.000636288488749415,-0.440971702337265,-0.897520780563354,-0.000636288488749415,-0.440971702337265,-0.707106649875641,1.31167809058752e-07,-0.707106947898865,-0.441034942865372,-0.000700948992744088,-0.897489666938782,-0.950300931930542,-8.2378915976733e-05,-0.311332851648331,-0.83613908290863,-0.00362211256287992,-0.548505544662476,-0.707106649875641,1.31167809058752e-07,-0.707106947898865,-0.707106649875641,1.31167809058752e-07,-0.707106947898865,-0.311371743679047,-0.00138786376919597,-0.950287163257599,-0.441034942865372,-0.000700948992744088,-0.897489666938782,-0.707106649875641,1.31167809058752e-07,-0.707106947898865,-0.548505842685699,0.00362211442552507,-0.836138904094696,-0.311371743679047,-0.00138786376919597,-0.950287163257599,-0.83613908290863,-0.00362211256287992,-0.548505544662476,-0.548505842685699,0.00362211442552507,-0.836138904094696, +-0.707106649875641,1.31167809058752e-07,-0.707106947898865,-0.89262443780899,-0.00732150813564658,-0.450741618871689,-0.707106947898865,-2.6003714737044e-08,-0.707106590270996,-0.83613908290863,-0.00362211256287992,-0.548505544662476,-0.83613908290863,-0.00362211256287992,-0.548505544662476,-0.707106947898865,-2.6003714737044e-08,-0.707106590270996,-0.548505842685699,0.00362211442552507,-0.836138904094696,-0.707106947898865,-2.6003714737044e-08,-0.707106590270996,-0.44980189204216,0.00849947892129421,-0.893087923526764,-0.548505842685699,0.00362211442552507,-0.836138904094696,-0.89262443780899,-0.00732150813564658,-0.450741618871689,-0.79623544216156,-0.0121714379638433,-0.604864478111267,-0.707106947898865,-2.6003714737044e-08,-0.707106590270996,-0.707106947898865,-2.6003714737044e-08,-0.707106590270996,-0.60543292760849,0.0112783601507545,-0.795816421508789,-0.44980189204216,0.00849947892129421,-0.893087923526764,-0.79623544216156,-0.0121714379638433,-0.604864478111267,-0.60543292760849,0.0112783601507545,-0.795816421508789,-0.707106947898865,-2.6003714737044e-08,-0.707106590270996,-0.79623544216156,-0.0121714379638433,-0.604864478111267,-0.707940459251404,-0.0016707795439288,-0.706270158290863,-0.60543292760849,0.0112783601507545,-0.795816421508789,0.697379052639008,0.00394969154149294,-0.716691613197327,0.988029420375824,0,0.154265478253365,0.987606585025787,-0.0313314683735371,0.1537906229496,0.905278980731964,-0.0091343242675066,-0.424719303846359,0.697379052639008,0.00394969154149294,-0.716691613197327,0.987606585025787,-0.0313314683735371,0.1537906229496,0.707106113433838,2.44891225520405e-07,-0.707107424736023,0.697379052639008,0.00394969154149294,-0.716691613197327,0.905278980731964,-0.0091343242675066,-0.424719303846359,0.707106113433838,2.44891225520405e-07,-0.707107424736023,0.428411960601807,0.0072110746987164,-0.903554737567902,0.697379052639008,0.00394969154149294,-0.716691613197327,0.428411960601807,0.0072110746987164,-0.903554737567902,-0.0385810509324074,0.00786004774272442,-0.999224543571472,0.697379052639008,0.00394969154149294,-0.716691613197327, +0.697379052639008,0.00394969154149294,-0.716691613197327,-0.0385810509324074,0.00786004774272442,-0.999224543571472,-0.246574819087982,0,-0.969123780727386,0.905278980731964,-0.0091343242675066,-0.424719303846359,0.987606585025787,-0.0313314683735371,0.1537906229496,0.999419510364532,-0.0132517386227846,0.0313852466642857,0.838534951210022,-0.00722462451085448,-0.54479992389679,0.707106113433838,2.44891225520405e-07,-0.707107424736023,0.905278980731964,-0.0091343242675066,-0.424719303846359,0.954251348972321,-0.00938958302140236,-0.298858106136322,0.905278980731964,-0.0091343242675066,-0.424719303846359,0.999419510364532,-0.0132517386227846,0.0313852466642857,0.838534951210022,-0.00722462451085448,-0.54479992389679,0.905278980731964,-0.0091343242675066,-0.424719303846359,0.954251348972321,-0.00938958302140236,-0.298858106136322,0.544799506664276,0.00722482707351446,-0.838535249233246,0.428411960601807,0.0072110746987164,-0.903554737567902,0.707106113433838,2.44891225520405e-07,-0.707107424736023,0.707106828689575,-1.38615334321912e-07,-0.70710676908493,0.707106113433838,2.44891225520405e-07,-0.707107424736023,0.838534951210022,-0.00722462451085448,-0.54479992389679,0.707106828689575,-1.38615334321912e-07,-0.70710676908493,0.544799506664276,0.00722482707351446,-0.838535249233246,0.707106113433838,2.44891225520405e-07,-0.707107424736023,0.893258094787598,-0.00893361121416092,-0.449455350637436,0.838534951210022,-0.00722462451085448,-0.54479992389679,0.954251348972321,-0.00938958302140236,-0.298858106136322,0.797433733940125,-0.0147378044202924,-0.603226482868195,0.838534951210022,-0.00722462451085448,-0.54479992389679,0.893258094787598,-0.00893361121416092,-0.449455350637436,0.797433733940125,-0.0147378044202924,-0.603226482868195,0.707106828689575,-1.38615334321912e-07,-0.70710676908493,0.838534951210022,-0.00722462451085448,-0.54479992389679,0.707831621170044,-0.00145219243131578,-0.706379652023315,0.707106828689575,-1.38615334321912e-07,-0.70710676908493,0.797433733940125,-0.0147378044202924,-0.603226482868195,0.707831621170044,-0.00145219243131578,-0.706379652023315, +0.603774666786194,0.0138801708817482,-0.797034204006195,0.707106828689575,-1.38615334321912e-07,-0.70710676908493,0.603774666786194,0.0138801708817482,-0.797034204006195,0.544799506664276,0.00722482707351446,-0.838535249233246,0.707106828689575,-1.38615334321912e-07,-0.70710676908493,0.893258094787598,-0.00893361121416092,-0.449455350637436,0.954251348972321,-0.00938958302140236,-0.298858106136322,0.970496952533722,-0.00567426206544042,-0.241046532988548,0.603774666786194,0.0138801708817482,-0.797034204006195,0.448529869318008,0.0100917797535658,-0.893710851669312,0.544799506664276,0.00722482707351446,-0.838535249233246,0.970496952533722,-0.00567426206544042,-0.241046532988548,0.954251348972321,-0.00938958302140236,-0.298858106136322,0.999917924404144,-0.00716862082481384,0.0106163416057825,0.954251348972321,-0.00938958302140236,-0.298858106136322,0.999419510364532,-0.0132517386227846,0.0313852466642857,0.999917924404144,-0.00716862082481384,0.0106163416057825,0.970496952533722,-0.00567426206544042,-0.241046532988548,0.999917924404144,-0.00716862082481384,0.0106163416057825,0.999997437000275,-0.00159974186681211,0.00159974151756614,0.448529869318008,0.0100917797535658,-0.893710851669312,0.298858344554901,0.00938931107521057,-0.954251289367676,0.544799506664276,0.00722482707351446,-0.838535249233246,0.544799506664276,0.00722482707351446,-0.838535249233246,0.298858344554901,0.00938931107521057,-0.954251289367676,0.428411960601807,0.0072110746987164,-0.903554737567902,0.448529869318008,0.0100917797535658,-0.893710851669312,0.239490821957588,0.00732503505423665,-0.970870971679688,0.298858344554901,0.00938931107521057,-0.954251289367676,0.950298607349396,7.56894951337017e-05,0.311339914798737,0.999997437000275,-0.00159974186681211,0.00159974151756614,0.999917924404144,-0.00716862082481384,0.0106163416057825,0.950298607349396,7.56894951337017e-05,0.311339914798737,0.970087349414825,0.00389131112024188,0.242724940180779,0.999997437000275,-0.00159974186681211,0.00159974151756614,0.897501230239868,0.000614326796494424,0.441011548042297, +0.999917924404144,-0.00716862082481384,0.0106163416057825,0.999419510364532,-0.0132517386227846,0.0313852466642857,0.897501230239868,0.000614326796494424,0.441011548042297,0.950298607349396,7.56894951337017e-05,0.311339914798737,0.999917924404144,-0.00716862082481384,0.0106163416057825,0.298858344554901,0.00938931107521057,-0.954251289367676,-0.0301045775413513,0.0127110127359629,-0.999465942382812,0.428411960601807,0.0072110746987164,-0.903554737567902,0.428411960601807,0.0072110746987164,-0.903554737567902,-0.0301045775413513,0.0127110127359629,-0.999465942382812,-0.0385810509324074,0.00786004774272442,-0.999224543571472,0.239490821957588,0.00732503505423665,-0.970870971679688,-0.0110370218753815,0.00745268492028117,-0.999911308288574,0.298858344554901,0.00938931107521057,-0.954251289367676,0.298858344554901,0.00938931107521057,-0.954251289367676,-0.0110370218753815,0.00745268492028117,-0.999911308288574,-0.0301045775413513,0.0127110127359629,-0.999465942382812,0.239490821957588,0.00732503505423665,-0.970870971679688,-0.00317238713614643,0.00317238341085613,-0.999989926815033,-0.0110370218753815,0.00745268492028117,-0.999911308288574,0.836139380931854,0.00362231303006411,0.548505067825317,0.970087349414825,0.00389131112024188,0.242724940180779,0.950298607349396,7.56894951337017e-05,0.311339914798737,0.836139380931854,0.00362231303006411,0.548505067825317,0.893087446689606,0.00849822722375393,0.449802875518799,0.970087349414825,0.00389131112024188,0.242724940180779,-0.00317238713614643,0.00317238341085613,-0.999989926815033,-0.311286866664886,-0.000115511582407635,-0.950315952301025,-0.0110370218753815,0.00745268492028117,-0.999911308288574,-0.00317238713614643,0.00317238341085613,-0.999989926815033,-0.244300961494446,-0.00221640942618251,-0.969696938991547,-0.311286866664886,-0.000115511582407635,-0.950315952301025,-0.0110370218753815,0.00745268492028117,-0.999911308288574,-0.439043819904327,-0.00164816377218813,-0.898464143276215,-0.0301045775413513,0.0127110127359629,-0.999465942382812,-0.0110370218753815,0.00745268492028117,-0.999911308288574, +-0.311286866664886,-0.000115511582407635,-0.950315952301025,-0.439043819904327,-0.00164816377218813,-0.898464143276215,-0.0301045775413513,0.0127110127359629,-0.999465942382812,-0.707372665405273,0.000108916901808698,-0.706840753555298,-0.0385810509324074,0.00786004774272442,-0.999224543571472,-0.0301045775413513,0.0127110127359629,-0.999465942382812,-0.439043819904327,-0.00164816377218813,-0.898464143276215,-0.707372665405273,0.000108916901808698,-0.706840753555298,-0.244300961494446,-0.00221640942618251,-0.969696938991547,-0.548505187034607,-0.00362229137681425,-0.836139321327209,-0.311286866664886,-0.000115511582407635,-0.950315952301025,-0.244300961494446,-0.00221640942618251,-0.969696938991547,-0.450742542743683,-0.00732132559642196,-0.892623960971832,-0.548505187034607,-0.00362229137681425,-0.836139321327209,-0.311286866664886,-0.000115511582407635,-0.950315952301025,-0.706697106361389,-0.000351470313034952,-0.707516133785248,-0.439043819904327,-0.00164816377218813,-0.898464143276215,-0.311286866664886,-0.000115511582407635,-0.950315952301025,-0.548505187034607,-0.00362229137681425,-0.836139321327209,-0.706697106361389,-0.000351470313034952,-0.707516133785248,-0.450742542743683,-0.00732132559642196,-0.892623960971832,-0.707106828689575,-2.93390982619712e-08,-0.707106709480286,-0.548505187034607,-0.00362229137681425,-0.836139321327209,-0.450742542743683,-0.00732132559642196,-0.892623960971832,-0.604864478111267,-0.0121713746339083,-0.79623544216156,-0.707106828689575,-2.93390982619712e-08,-0.707106709480286,-0.604864478111267,-0.0121713746339083,-0.79623544216156,-0.795816540718079,0.0112781785428524,-0.605432748794556,-0.707106828689575,-2.93390982619712e-08,-0.707106709480286,-0.604864478111267,-0.0121713746339083,-0.79623544216156,-0.706269860267639,-0.00167061330284923,-0.707940697669983,-0.795816540718079,0.0112781785428524,-0.605432748794556,-0.707106828689575,-2.93390982619712e-08,-0.707106709480286,-0.795816540718079,0.0112781785428524,-0.605432748794556,-0.893087387084961,0.00849838741123676,-0.449802964925766, +-0.548505187034607,-0.00362229137681425,-0.836139321327209,-0.707106828689575,-2.93390982619712e-08,-0.707106709480286,-0.83613920211792,0.00362227181904018,-0.548505365848541,-0.707106828689575,-2.93390982619712e-08,-0.707106709480286,-0.893087387084961,0.00849838741123676,-0.449802964925766,-0.83613920211792,0.00362227181904018,-0.548505365848541,-0.548505187034607,-0.00362229137681425,-0.836139321327209,-0.83613920211792,0.00362227181904018,-0.548505365848541,-0.706697106361389,-0.000351470313034952,-0.707516133785248,-0.83613920211792,0.00362227181904018,-0.548505365848541,-0.893087387084961,0.00849838741123676,-0.449802964925766,-0.970087289810181,0.00389177585020661,-0.242725044488907,-0.83613920211792,0.00362227181904018,-0.548505365848541,-0.970087289810181,0.00389177585020661,-0.242725044488907,-0.950301766395569,8.30424905871041e-05,-0.311330318450928,-0.706697106361389,-0.000351470313034952,-0.707516133785248,-0.83613920211792,0.00362227181904018,-0.548505365848541,-0.950301766395569,8.30424905871041e-05,-0.311330318450928,-0.950301766395569,8.30424905871041e-05,-0.311330318450928,-0.970087289810181,0.00389177585020661,-0.242725044488907,-0.999997437000275,-0.00159996992442757,-0.00159997050650418,-0.439043819904327,-0.00164816377218813,-0.898464143276215,-0.706697106361389,-0.000351470313034952,-0.707516133785248,-0.897442400455475,0.000551431614439934,-0.441131293773651,-0.706697106361389,-0.000351470313034952,-0.707516133785248,-0.950301766395569,8.30424905871041e-05,-0.311330318450928,-0.897442400455475,0.000551431614439934,-0.441131293773651,-0.439043819904327,-0.00164816377218813,-0.898464143276215,-0.897442400455475,0.000551431614439934,-0.441131293773651,-0.707372665405273,0.000108916901808698,-0.706840753555298,-0.950301766395569,8.30424905871041e-05,-0.311330318450928,-0.999997437000275,-0.00159996992442757,-0.00159997050650418,-0.999911546707153,-0.00744348531588912,-0.0110234012827277,-0.897442400455475,0.000551431614439934,-0.441131293773651,-0.950301766395569,8.30424905871041e-05,-0.311330318450928, +-0.999911546707153,-0.00744348531588912,-0.0110234012827277,-0.970496952533722,-0.00567395752295852,0.241046622395515,-0.999911546707153,-0.00744348531588912,-0.0110234012827277,-0.999997437000275,-0.00159996992442757,-0.00159997050650418,-0.707372665405273,0.000108916901808698,-0.706840753555298,-0.897442400455475,0.000551431614439934,-0.441131293773651,-0.999597072601318,-0.0110413245856762,-0.026150131598115,-0.897442400455475,0.000551431614439934,-0.441131293773651,-0.999911546707153,-0.00744348531588912,-0.0110234012827277,-0.999597072601318,-0.0110413245856762,-0.026150131598115,-0.970496952533722,-0.00567395752295852,0.241046622395515,-0.954154312610626,-0.00915364362299442,0.299175083637238,-0.999911546707153,-0.00744348531588912,-0.0110234012827277,-0.954154312610626,-0.00915364362299442,0.299175083637238,-0.999597072601318,-0.0110413245856762,-0.026150131598115,-0.999911546707153,-0.00744348531588912,-0.0110234012827277,-0.893258213996887,-0.00893378350883722,0.449455231428146,-0.954154312610626,-0.00915364362299442,0.299175083637238,-0.970496952533722,-0.00567395752295852,0.241046622395515,-0.707372665405273,0.000108916901808698,-0.706840753555298,-0.999597072601318,-0.0110413245856762,-0.026150131598115,-0.989982903003693,-0.0281848479062319,-0.138345405459404,-0.0385810509324074,0.00786004774272442,-0.999224543571472,-0.707372665405273,0.000108916901808698,-0.706840753555298,-0.989982903003693,-0.0281848479062319,-0.138345405459404,-0.0385810509324074,0.00786004774272442,-0.999224543571472,-0.989982903003693,-0.0281848479062319,-0.138345405459404,-0.596364200115204,0,-0.802713990211487,-0.893258213996887,-0.00893378350883722,0.449455231428146,-0.838535070419312,-0.00722473952919245,0.54479968547821,-0.954154312610626,-0.00915364362299442,0.299175083637238,-0.797433972358704,-0.0147384880110621,0.603226184844971,-0.838535070419312,-0.00722473952919245,0.54479968547821,-0.893258213996887,-0.00893378350883722,0.449455231428146,-0.954154312610626,-0.00915364362299442,0.299175083637238,-0.905389785766602,-0.00925854966044426,0.424480438232422, +-0.999597072601318,-0.0110413245856762,-0.026150131598115,-0.905389785766602,-0.00925854966044426,0.424480438232422,-0.989982903003693,-0.0281848479062319,-0.138345405459404,-0.999597072601318,-0.0110413245856762,-0.026150131598115,-0.838535070419312,-0.00722473952919245,0.54479968547821,-0.905389785766602,-0.00925854966044426,0.424480438232422,-0.954154312610626,-0.00915364362299442,0.299175083637238,-0.797433972358704,-0.0147384880110621,0.603226184844971,-0.707106590270996,6.22625222490569e-08,0.707106947898865,-0.838535070419312,-0.00722473952919245,0.54479968547821,-0.70783132314682,-0.00145134225022048,0.706380009651184,-0.707106590270996,6.22625222490569e-08,0.707106947898865,-0.797433972358704,-0.0147384880110621,0.603226184844971,-0.70783132314682,-0.00145134225022048,0.706380009651184,-0.603774607181549,0.0138795012608171,0.79703426361084,-0.707106590270996,6.22625222490569e-08,0.707106947898865,-0.905389785766602,-0.00925854966044426,0.424480438232422,-0.668465256690979,0.015363622456789,0.74358469247818,-0.989982903003693,-0.0281848479062319,-0.138345405459404,-0.668465256690979,0.015363622456789,0.74358469247818,-0.988937258720398,0,-0.148334518074989,-0.989982903003693,-0.0281848479062319,-0.138345405459404,-0.838535070419312,-0.00722473952919245,0.54479968547821,-0.706961631774902,0.000124617698020302,0.707251846790314,-0.905389785766602,-0.00925854966044426,0.424480438232422,-0.707106590270996,6.22625222490569e-08,0.707106947898865,-0.706961631774902,0.000124617698020302,0.707251846790314,-0.838535070419312,-0.00722473952919245,0.54479968547821,-0.706961631774902,0.000124617698020302,0.707251846790314,-0.668465256690979,0.015363622456789,0.74358469247818,-0.905389785766602,-0.00925854966044426,0.424480438232422,-0.603774607181549,0.0138795012608171,0.79703426361084,-0.54479968547821,0.00722455652430654,0.838535070419312,-0.707106590270996,6.22625222490569e-08,0.707106947898865,-0.707106590270996,6.22625222490569e-08,0.707106947898865,-0.54479968547821,0.00722455652430654,0.838535070419312,-0.706961631774902,0.000124617698020302,0.707251846790314, +-0.603774607181549,0.0138795012608171,0.79703426361084,-0.448529124259949,0.01009167637676,0.89371120929718,-0.54479968547821,0.00722455652430654,0.838535070419312,-0.706961631774902,0.000124617698020302,0.707251846790314,-0.428282529115677,0.00727894436568022,0.903615534305573,-0.668465256690979,0.015363622456789,0.74358469247818,-0.54479968547821,0.00722455652430654,0.838535070419312,-0.428282529115677,0.00727894436568022,0.903615534305573,-0.706961631774902,0.000124617698020302,0.707251846790314,-0.448529124259949,0.01009167637676,0.89371120929718,-0.300713628530502,0.00800886005163193,0.953680872917175,-0.54479968547821,0.00722455652430654,0.838535070419312,-0.54479968547821,0.00722455652430654,0.838535070419312,-0.300713628530502,0.00800886005163193,0.953680872917175,-0.428282529115677,0.00727894436568022,0.903615534305573,-0.448529124259949,0.01009167637676,0.89371120929718,-0.240988731384277,0.00573563110083342,0.970510959625244,-0.300713628530502,0.00800886005163193,0.953680872917175,-0.428282529115677,0.00727894436568022,0.903615534305573,0.0626728609204292,0.0127682164311409,0.997952461242676,-0.668465256690979,0.015363622456789,0.74358469247818,-0.668465256690979,0.015363622456789,0.74358469247818,0.0626728609204292,0.0127682164311409,0.997952461242676,0.201638430356979,0,0.979460000991821,-0.428282529115677,0.00727894436568022,0.903615534305573,0.0349336713552475,0.0147499721497297,0.999280750751495,0.0626728609204292,0.0127682164311409,0.997952461242676,-0.300713628530502,0.00800886005163193,0.953680872917175,0.0349336713552475,0.0147499721497297,0.999280750751495,-0.428282529115677,0.00727894436568022,0.903615534305573,-0.300713628530502,0.00800886005163193,0.953680872917175,0.0132791791111231,0.00896668992936611,0.999871611595154,0.0349336713552475,0.0147499721497297,0.999280750751495,-0.240988731384277,0.00573563110083342,0.970510959625244,0.0132791791111231,0.00896668992936611,0.999871611595154,-0.300713628530502,0.00800886005163193,0.953680872917175,-0.240988731384277,0.00573563110083342,0.970510959625244, +0.0050258357077837,0.00502583896741271,0.999974727630615,0.0132791791111231,0.00896668992936611,0.999871611595154,0.604863941669464,-0.0121714323759079,0.796235799789429,0.706269919872284,-0.00167072692420334,0.707940638065338,0.795816600322723,0.011278779245913,0.605432629585266,0.604863941669464,-0.0121714323759079,0.796235799789429,0.795816600322723,0.011278779245913,0.605432629585266,0.707106709480286,1.80414687633856e-07,0.70710688829422,0.707106709480286,1.80414687633856e-07,0.70710688829422,0.795816600322723,0.011278779245913,0.605432629585266,0.893087446689606,0.00849822722375393,0.449802875518799,0.450742363929749,-0.00732088042423129,0.892624080181122,0.604863941669464,-0.0121714323759079,0.796235799789429,0.707106709480286,1.80414687633856e-07,0.70710688829422,0.707106709480286,1.80414687633856e-07,0.70710688829422,0.893087446689606,0.00849822722375393,0.449802875518799,0.836139380931854,0.00362231303006411,0.548505067825317,0.450742363929749,-0.00732088042423129,0.892624080181122,0.707106709480286,1.80414687633856e-07,0.70710688829422,0.548505365848541,-0.00362216029316187,0.83613920211792,0.548505365848541,-0.00362216029316187,0.83613920211792,0.707106709480286,1.80414687633856e-07,0.70710688829422,0.836139380931854,0.00362231303006411,0.548505067825317,0.244300603866577,-0.00221683038398623,0.969696998596191,0.450742363929749,-0.00732088042423129,0.892624080181122,0.548505365848541,-0.00362216029316187,0.83613920211792,0.548505365848541,-0.00362216029316187,0.83613920211792,0.836139380931854,0.00362231303006411,0.548505067825317,0.707082033157349,-2.1492949599633e-05,0.707131564617157,0.707082033157349,-2.1492949599633e-05,0.707131564617157,0.836139380931854,0.00362231303006411,0.548505067825317,0.950298607349396,7.56894951337017e-05,0.311339914798737,0.707082033157349,-2.1492949599633e-05,0.707131564617157,0.950298607349396,7.56894951337017e-05,0.311339914798737,0.897501230239868,0.000614326796494424,0.441011548042297,0.244300603866577,-0.00221683038398623,0.969696998596191,0.548505365848541,-0.00362216029316187,0.83613920211792, +0.311330437660217,-8.29935888759792e-05,0.950301706790924,0.311330437660217,-8.29935888759792e-05,0.950301706790924,0.548505365848541,-0.00362216029316187,0.83613920211792,0.707082033157349,-2.1492949599633e-05,0.707131564617157,0.0050258357077837,0.00502583896741271,0.999974727630615,0.244300603866577,-0.00221683038398623,0.969696998596191,0.311330437660217,-8.29935888759792e-05,0.950301706790924,0.0050258357077837,0.00502583896741271,0.999974727630615,0.311330437660217,-8.29935888759792e-05,0.950301706790924,0.0132791791111231,0.00896668992936611,0.999871611595154,0.311330437660217,-8.29935888759792e-05,0.950301706790924,0.707082033157349,-2.1492949599633e-05,0.707131564617157,0.440957963466644,-0.00064278207719326,0.897527515888214,0.0132791791111231,0.00896668992936611,0.999871611595154,0.311330437660217,-8.29935888759792e-05,0.950301706790924,0.440957963466644,-0.00064278207719326,0.897527515888214,0.440957963466644,-0.00064278207719326,0.897527515888214,0.707082033157349,-2.1492949599633e-05,0.707131564617157,0.897501230239868,0.000614326796494424,0.441011548042297,0.0132791791111231,0.00896668992936611,0.999871611595154,0.440957963466644,-0.00064278207719326,0.897527515888214,0.0349336713552475,0.0147499721497297,0.999280750751495,0.440957963466644,-0.00064278207719326,0.897527515888214,0.897501230239868,0.000614326796494424,0.441011548042297,0.707065463066101,-1.69932955031982e-05,0.707148134708405,0.0349336713552475,0.0147499721497297,0.999280750751495,0.440957963466644,-0.00064278207719326,0.897527515888214,0.707065463066101,-1.69932955031982e-05,0.707148134708405,0.707065463066101,-1.69932955031982e-05,0.707148134708405,0.897501230239868,0.000614326796494424,0.441011548042297,0.999419510364532,-0.0132517386227846,0.0313852466642857,0.0349336713552475,0.0147499721497297,0.999280750751495,0.707065463066101,-1.69932955031982e-05,0.707148134708405,0.0626728609204292,0.0127682164311409,0.997952461242676,0.707065463066101,-1.69932955031982e-05,0.707148134708405,0.999419510364532,-0.0132517386227846,0.0313852466642857, +0.987606585025787,-0.0313314683735371,0.1537906229496,0.0626728609204292,0.0127682164311409,0.997952461242676,0.707065463066101,-1.69932955031982e-05,0.707148134708405,0.987606585025787,-0.0313314683735371,0.1537906229496,0.0626728609204292,0.0127682164311409,0.997952461242676,0.987606585025787,-0.0313314683735371,0.1537906229496,0.565592169761658,0,0.824685096740723,-0.60543292760849,0.0112783601507545,-0.795816421508789,-0.707940459251404,-0.0016707795439288,-0.706270158290863,-0.706700384616852,0.00104731903411448,-0.707512140274048,-0.60543292760849,0.0112783601507545,-0.795816421508789,-0.706700384616852,0.00104731903411448,-0.707512140274048,-0.569286704063416,0.00525673665106297,-0.822122275829315,-0.44980189204216,0.00849947892129421,-0.893087923526764,-0.60543292760849,0.0112783601507545,-0.795816421508789,-0.569286704063416,0.00525673665106297,-0.822122275829315,-0.569286704063416,0.00525673665106297,-0.822122275829315,-0.706700384616852,0.00104731903411448,-0.707512140274048,-0.707019507884979,0.000340490136295557,-0.707193970680237,-0.44980189204216,0.00849947892129421,-0.893087923526764,-0.569286704063416,0.00525673665106297,-0.822122275829315,-0.407896757125854,0.00548828719183803,-0.91301155090332,-0.242790877819061,0.00231928937137127,-0.970075905323029,-0.44980189204216,0.00849947892129421,-0.893087923526764,-0.407896757125854,0.00548828719183803,-0.91301155090332,-0.569286704063416,0.00525673665106297,-0.822122275829315,-0.707019507884979,0.000340490136295557,-0.707193970680237,-0.562161684036255,0.00171130336821079,-0.827025592327118,-0.407896757125854,0.00548828719183803,-0.91301155090332,-0.569286704063416,0.00525673665106297,-0.822122275829315,-0.562161684036255,0.00171130336821079,-0.827025592327118,-0.562161684036255,0.00171130336821079,-0.827025592327118,-0.707019507884979,0.000340490136295557,-0.707193970680237,-0.707089483737946,0.000135529626277275,-0.70712411403656,-0.242790877819061,0.00231928937137127,-0.970075905323029,-0.407896757125854,0.00548828719183803,-0.91301155090332,-0.214085966348648,0.00195965985767543,-0.976812839508057, +-0.00161598657723516,-0.0031189969740808,-0.999993801116943,-0.242790877819061,0.00231928937137127,-0.970075905323029,-0.214085966348648,0.00195965985767543,-0.976812839508057,-0.562161684036255,0.00171130336821079,-0.827025592327118,-0.707089483737946,0.000135529626277275,-0.70712411403656,-0.559975922107697,0.000499387097079307,-0.828508734703064,-0.559975922107697,0.000499387097079307,-0.828508734703064,-0.707089483737946,0.000135529626277275,-0.70712411403656,-0.707106351852417,4.13435054724687e-06,-0.707107186317444,-0.407896757125854,0.00548828719183803,-0.91301155090332,-0.562161684036255,0.00171130336821079,-0.827025592327118,-0.393846094608307,0.0019378176657483,-0.919174373149872,-0.214085966348648,0.00195965985767543,-0.976812839508057,-0.407896757125854,0.00548828719183803,-0.91301155090332,-0.393846094608307,0.0019378176657483,-0.919174373149872,-0.393846094608307,0.0019378176657483,-0.919174373149872,-0.562161684036255,0.00171130336821079,-0.827025592327118,-0.559975922107697,0.000499387097079307,-0.828508734703064,-0.00161598657723516,-0.0031189969740808,-0.999993801116943,-0.214085966348648,0.00195965985767543,-0.976812839508057,0.000524864008184522,-0.000702767865732312,-0.999999642372131,0.24104642868042,-0.0056744241155684,-0.970497012138367,-0.00161598657723516,-0.0031189969740808,-0.999993801116943,0.000524864008184522,-0.000702767865732312,-0.999999642372131,-0.559975922107697,0.000499387097079307,-0.828508734703064,-0.707106351852417,4.13435054724687e-06,-0.707107186317444,-0.560281157493591,2.81540014839265e-05,-0.828302502632141,-0.707106947898865,5.59938143851468e-06,-0.707106649875641,-0.560281157493591,2.81540014839265e-05,-0.828302502632141,-0.707106351852417,4.13435054724687e-06,-0.707107186317444,-0.393846094608307,0.0019378176657483,-0.919174373149872,-0.559975922107697,0.000499387097079307,-0.828508734703064,-0.389725029468536,0.000561319931875914,-0.920931100845337,-0.389725029468536,0.000561319931875914,-0.920931100845337,-0.559975922107697,0.000499387097079307,-0.828508734703064, +-0.560281157493591,2.81540014839265e-05,-0.828302502632141,-0.214085966348648,0.00195965985767543,-0.976812839508057,-0.393846094608307,0.0019378176657483,-0.919174373149872,-0.203795611858368,-0.000227492608246394,-0.979013442993164,0.000524864008184522,-0.000702767865732312,-0.999999642372131,-0.214085966348648,0.00195965985767543,-0.976812839508057,-0.203795611858368,-0.000227492608246394,-0.979013442993164,-0.203795611858368,-0.000227492608246394,-0.979013442993164,-0.393846094608307,0.0019378176657483,-0.919174373149872,-0.389725029468536,0.000561319931875914,-0.920931100845337,0.24104642868042,-0.0056744241155684,-0.970497012138367,0.000524864008184522,-0.000702767865732312,-0.999999642372131,0.214874535799026,-0.00223136623390019,-0.976639091968536,0.449455469846725,-0.00893337186425924,-0.893258035182953,0.24104642868042,-0.0056744241155684,-0.970497012138367,0.214874535799026,-0.00223136623390019,-0.976639091968536,-0.707106947898865,5.59938143851468e-06,-0.707106649875641,-0.560283303260803,-2.52495756285498e-05,-0.828301012516022,-0.560281157493591,2.81540014839265e-05,-0.828302502632141,-0.707125425338745,0.000145293335663155,-0.707088112831116,-0.560283303260803,-2.52495756285498e-05,-0.828301012516022,-0.707106947898865,5.59938143851468e-06,-0.707106649875641,0.000524864008184522,-0.000702767865732312,-0.999999642372131,-0.203795611858368,-0.000227492608246394,-0.979013442993164,-2.42017449636478e-05,-0.00148187601007521,-0.999998927116394,0.214874535799026,-0.00223136623390019,-0.976639091968536,0.000524864008184522,-0.000702767865732312,-0.999999642372131,-2.42017449636478e-05,-0.00148187601007521,-0.999998927116394,-0.389725029468536,0.000561319931875914,-0.920931100845337,-0.560281157493591,2.81540014839265e-05,-0.828302502632141,-0.389976382255554,2.97945716738468e-05,-0.920824885368347,-0.560283303260803,-2.52495756285498e-05,-0.828301012516022,-0.389976382255554,2.97945716738468e-05,-0.920824885368347,-0.560281157493591,2.81540014839265e-05,-0.828302502632141,-0.203795611858368,-0.000227492608246394,-0.979013442993164, +-0.389725029468536,0.000561319931875914,-0.920931100845337,-0.200498476624489,-0.00105508486740291,-0.979693472385406,-2.42017449636478e-05,-0.00148187601007521,-0.999998927116394,-0.203795611858368,-0.000227492608246394,-0.979013442993164,-0.200498476624489,-0.00105508486740291,-0.979693472385406,-0.200498476624489,-0.00105508486740291,-0.979693472385406,-0.389725029468536,0.000561319931875914,-0.920931100845337,-0.389976382255554,2.97945716738468e-05,-0.920824885368347,0.449455469846725,-0.00893337186425924,-0.893258035182953,0.214874535799026,-0.00223136623390019,-0.976639091968536,0.40793177485466,-0.00542669044807553,-0.912996292114258,0.603226542472839,-0.0147381583228707,-0.797433733940125,0.449455469846725,-0.00893337186425924,-0.893258035182953,0.40793177485466,-0.00542669044807553,-0.912996292114258,-0.707125425338745,0.000145293335663155,-0.707088112831116,-0.55998557806015,-0.000449146755272523,-0.828502237796783,-0.560283303260803,-2.52495756285498e-05,-0.828301012516022,-0.707194268703461,0.000340236467309296,-0.707019209861755,-0.55998557806015,-0.000449146755272523,-0.828502237796783,-0.707125425338745,0.000145293335663155,-0.707088112831116,0.214874535799026,-0.00223136623390019,-0.976639091968536,-2.42017449636478e-05,-0.00148187601007521,-0.999998927116394,0.203768640756607,-0.00128321058582515,-0.979018211364746,0.40793177485466,-0.00542669044807553,-0.912996292114258,0.214874535799026,-0.00223136623390019,-0.976639091968536,0.203768640756607,-0.00128321058582515,-0.979018211364746,-2.42017449636478e-05,-0.00148187601007521,-0.999998927116394,-0.200498476624489,-0.00105508486740291,-0.979693472385406,-2.83196786767803e-05,-0.0015116601716727,-0.999998867511749,0.203768640756607,-0.00128321058582515,-0.979018211364746,-2.42017449636478e-05,-0.00148187601007521,-0.999998927116394,-2.83196786767803e-05,-0.0015116601716727,-0.999998867511749,-0.200498476624489,-0.00105508486740291,-0.979693472385406,-0.389976382255554,2.97945716738468e-05,-0.920824885368347,-0.200975552201271,-0.00135030841920525,-0.979595303535461, +-2.83196786767803e-05,-0.0015116601716727,-0.999998867511749,-0.200498476624489,-0.00105508486740291,-0.979693472385406,-0.200975552201271,-0.00135030841920525,-0.979595303535461,-0.560283303260803,-2.52495756285498e-05,-0.828301012516022,-0.389978915452957,-3.25678265653551e-05,-0.920823752880096,-0.389976382255554,2.97945716738468e-05,-0.920824885368347,-0.55998557806015,-0.000449146755272523,-0.828502237796783,-0.389978915452957,-3.25678265653551e-05,-0.920823752880096,-0.560283303260803,-2.52495756285498e-05,-0.828301012516022,-0.389978915452957,-3.25678265653551e-05,-0.920823752880096,-0.200975552201271,-0.00135030841920525,-0.979595303535461,-0.389976382255554,2.97945716738468e-05,-0.920824885368347,0.603226542472839,-0.0147381583228707,-0.797433733940125,0.40793177485466,-0.00542669044807553,-0.912996292114258,0.568275392055511,-0.0073909186758101,-0.822805225849152,0.706379771232605,-0.00145185436122119,-0.707831561565399,0.603226542472839,-0.0147381583228707,-0.797433733940125,0.568275392055511,-0.0073909186758101,-0.822805225849152,0.706379771232605,-0.00145185436122119,-0.707831561565399,0.568275392055511,-0.0073909186758101,-0.822805225849152,0.707512080669403,0.00104693509638309,-0.706700444221497,0.40793177485466,-0.00542669044807553,-0.912996292114258,0.203768640756607,-0.00128321058582515,-0.979018211364746,0.393733710050583,-0.00224711885675788,-0.919221818447113,0.568275392055511,-0.0073909186758101,-0.822805225849152,0.40793177485466,-0.00542669044807553,-0.912996292114258,0.393733710050583,-0.00224711885675788,-0.919221818447113,0.707512080669403,0.00104693509638309,-0.706700444221497,0.568275392055511,-0.0073909186758101,-0.822805225849152,0.562155663967133,-0.00173075951170176,-0.827029645442963,0.568275392055511,-0.0073909186758101,-0.822805225849152,0.393733710050583,-0.00224711885675788,-0.919221818447113,0.562155663967133,-0.00173075951170176,-0.827029645442963,0.707512080669403,0.00104693509638309,-0.706700444221497,0.562155663967133,-0.00173075951170176,-0.827029645442963,0.70719438791275,0.000340368569595739,-0.707019090652466, +0.203768640756607,-0.00128321058582515,-0.979018211364746,-2.83196786767803e-05,-0.0015116601716727,-0.999998867511749,0.200477808713913,-0.00044615677325055,-0.979698121547699,0.393733710050583,-0.00224711885675788,-0.919221818447113,0.203768640756607,-0.00128321058582515,-0.979018211364746,0.200477808713913,-0.00044615677325055,-0.979698121547699,-2.83196786767803e-05,-0.0015116601716727,-0.999998867511749,-0.200975552201271,-0.00135030841920525,-0.979595303535461,7.34857076167827e-06,-0.00119480316061527,-0.999999284744263,0.200477808713913,-0.00044615677325055,-0.979698121547699,-2.83196786767803e-05,-0.0015116601716727,-0.999998867511749,7.34857076167827e-06,-0.00119480316061527,-0.999999284744263,-0.389978915452957,-3.25678265653551e-05,-0.920823752880096,-0.201002344489098,0.00118368514813483,-0.979590058326721,-0.200975552201271,-0.00135030841920525,-0.979595303535461,-0.201002344489098,0.00118368514813483,-0.979590058326721,7.34857076167827e-06,-0.00119480316061527,-0.999999284744263,-0.200975552201271,-0.00135030841920525,-0.979595303535461,0.70719438791275,0.000340368569595739,-0.707019090652466,0.562155663967133,-0.00173075951170176,-0.827029645442963,0.559989035129547,-0.000414165115216747,-0.828499913215637,0.70719438791275,0.000340368569595739,-0.707019090652466,0.559989035129547,-0.000414165115216747,-0.828499913215637,0.707124292850494,0.000135524096549489,-0.707089304924011,0.562155663967133,-0.00173075951170176,-0.827029645442963,0.393733710050583,-0.00224711885675788,-0.919221818447113,0.389714956283569,-0.000618171994574368,-0.920935332775116,0.393733710050583,-0.00224711885675788,-0.919221818447113,0.200477808713913,-0.00044615677325055,-0.979698121547699,0.389714956283569,-0.000618171994574368,-0.920935332775116,0.562155663967133,-0.00173075951170176,-0.827029645442963,0.389714956283569,-0.000618171994574368,-0.920935332775116,0.559989035129547,-0.000414165115216747,-0.828499913215637,0.200477808713913,-0.00044615677325055,-0.979698121547699,7.34857076167827e-06,-0.00119480316061527,-0.999999284744263, +0.200976088643074,-9.57243901211768e-06,-0.979596138000488,0.389714956283569,-0.000618171994574368,-0.920935332775116,0.200477808713913,-0.00044615677325055,-0.979698121547699,0.200976088643074,-9.57243901211768e-06,-0.979596138000488,0.707124292850494,0.000135524096549489,-0.707089304924011,0.559989035129547,-0.000414165115216747,-0.828499913215637,0.560281455516815,-2.36438972933684e-05,-0.828302323818207,0.707124292850494,0.000135524096549489,-0.707089304924011,0.560281455516815,-2.36438972933684e-05,-0.828302323818207,0.707106947898865,4.11599103244953e-06,-0.707106649875641,0.559989035129547,-0.000414165115216747,-0.828499913215637,0.389714956283569,-0.000618171994574368,-0.920935332775116,0.389976382255554,-2.95010122499662e-05,-0.920824825763702,0.389714956283569,-0.000618171994574368,-0.920935332775116,0.200976088643074,-9.57243901211768e-06,-0.979596138000488,0.389976382255554,-2.95010122499662e-05,-0.920824825763702,0.559989035129547,-0.000414165115216747,-0.828499913215637,0.389976382255554,-2.95010122499662e-05,-0.920824825763702,0.560281455516815,-2.36438972933684e-05,-0.828302323818207,-3.07320115098264e-05,0.0012743886327371,-0.999999165534973,0.200976088643074,-9.57243901211768e-06,-0.979596138000488,7.34857076167827e-06,-0.00119480316061527,-0.999999284744263,-0.201002344489098,0.00118368514813483,-0.979590058326721,-3.07320115098264e-05,0.0012743886327371,-0.999999165534973,7.34857076167827e-06,-0.00119480316061527,-0.999999284744263,-0.389708936214447,-0.000666377949528396,-0.920937836170197,-0.201002344489098,0.00118368514813483,-0.979590058326721,-0.389978915452957,-3.25678265653551e-05,-0.920823752880096,-0.55998557806015,-0.000449146755272523,-0.828502237796783,-0.389708936214447,-0.000666377949528396,-0.920937836170197,-0.389978915452957,-3.25678265653551e-05,-0.920823752880096,0.560281336307526,2.81427892332431e-05,-0.828302383422852,0.707106947898865,4.11599103244953e-06,-0.707106649875641,0.560281455516815,-2.36438972933684e-05,-0.828302323818207,0.560281336307526,2.81427892332431e-05,-0.828302383422852, +0.70710688829422,4.11963856095099e-06,-0.707106649875641,0.707106947898865,4.11599103244953e-06,-0.707106649875641,0.200976222753525,6.35259402770316e-06,-0.979596138000488,0.389976382255554,-2.95010122499662e-05,-0.920824825763702,0.200976088643074,-9.57243901211768e-06,-0.979596138000488,-3.07320115098264e-05,0.0012743886327371,-0.999999165534973,0.200976222753525,6.35259402770316e-06,-0.979596138000488,0.200976088643074,-9.57243901211768e-06,-0.979596138000488,0.389976292848587,2.97718233923661e-05,-0.920824885368347,0.560281455516815,-2.36438972933684e-05,-0.828302323818207,0.389976382255554,-2.95010122499662e-05,-0.920824825763702,0.389976292848587,2.97718233923661e-05,-0.920824885368347,0.560281336307526,2.81427892332431e-05,-0.828302383422852,0.560281455516815,-2.36438972933684e-05,-0.828302323818207,0.200976222753525,6.35259402770316e-06,-0.979596138000488,0.389976292848587,2.97718233923661e-05,-0.920824885368347,0.389976382255554,-2.95010122499662e-05,-0.920824825763702,-0.200508341193199,-0.000125348728033714,-0.979691982269287,-3.07320115098264e-05,0.0012743886327371,-0.999999165534973,-0.201002344489098,0.00118368514813483,-0.979590058326721,-0.389708936214447,-0.000666377949528396,-0.920937836170197,-0.200508341193199,-0.000125348728033714,-0.979691982269287,-0.201002344489098,0.00118368514813483,-0.979590058326721,-0.562155723571777,-0.00173049524892122,-0.827029585838318,-0.389708936214447,-0.000666377949528396,-0.920937836170197,-0.55998557806015,-0.000449146755272523,-0.828502237796783,-0.707194268703461,0.000340236467309296,-0.707019209861755,-0.562155723571777,-0.00173049524892122,-0.827029585838318,-0.55998557806015,-0.000449146755272523,-0.828502237796783,-0.707511961460114,0.00104676291812211,-0.706700563430786,-0.562155723571777,-0.00173049524892122,-0.827029585838318,-0.707194268703461,0.000340236467309296,-0.707019209861755,0.559976100921631,0.0004994185292162,-0.828508615493774,0.70710688829422,4.11963856095099e-06,-0.707106649875641,0.560281336307526,2.81427892332431e-05,-0.828302383422852, +0.559976100921631,0.0004994185292162,-0.828508615493774,0.707090020179749,0.000135164547828026,-0.707123517990112,0.70710688829422,4.11963856095099e-06,-0.707106649875641,6.47990818833932e-05,-0.000146918784594163,-1,0.200976222753525,6.35259402770316e-06,-0.979596138000488,-3.07320115098264e-05,0.0012743886327371,-0.999999165534973,-0.200508341193199,-0.000125348728033714,-0.979691982269287,6.47990818833932e-05,-0.000146918784594163,-1,-3.07320115098264e-05,0.0012743886327371,-0.999999165534973,0.389724940061569,0.000561357359401882,-0.920931160449982,0.560281336307526,2.81427892332431e-05,-0.828302383422852,0.389976292848587,2.97718233923661e-05,-0.920824885368347,0.389724940061569,0.000561357359401882,-0.920931160449982,0.559976100921631,0.0004994185292162,-0.828508615493774,0.560281336307526,2.81427892332431e-05,-0.828302383422852,0.200494527816772,0.00036160196759738,-0.979694783687592,0.389976292848587,2.97718233923661e-05,-0.920824885368347,0.200976222753525,6.35259402770316e-06,-0.979596138000488,6.47990818833932e-05,-0.000146918784594163,-1,0.200494527816772,0.00036160196759738,-0.979694783687592,0.200976222753525,6.35259402770316e-06,-0.979596138000488,0.200494527816772,0.00036160196759738,-0.979694783687592,0.389724940061569,0.000561357359401882,-0.920931160449982,0.389976292848587,2.97718233923661e-05,-0.920824885368347,-0.562155723571777,-0.00173049524892122,-0.827029585838318,-0.393733501434326,-0.00224727671593428,-0.919221878051758,-0.389708936214447,-0.000666377949528396,-0.920937836170197,-0.393733501434326,-0.00224727671593428,-0.919221878051758,-0.200508341193199,-0.000125348728033714,-0.979691982269287,-0.389708936214447,-0.000666377949528396,-0.920937836170197,-0.707511961460114,0.00104676291812211,-0.706700563430786,-0.568275332450867,-0.00739084417000413,-0.822805285453796,-0.562155723571777,-0.00173049524892122,-0.827029585838318,-0.568275332450867,-0.00739084417000413,-0.822805285453796,-0.393733501434326,-0.00224727671593428,-0.919221878051758,-0.562155723571777,-0.00173049524892122,-0.827029585838318, +-0.706269860267639,-0.00167061330284923,-0.707940697669983,-0.568275332450867,-0.00739084417000413,-0.822805285453796,-0.707511961460114,0.00104676291812211,-0.706700563430786,-0.706269860267639,-0.00167061330284923,-0.707940697669983,-0.604864478111267,-0.0121713746339083,-0.79623544216156,-0.568275332450867,-0.00739084417000413,-0.822805285453796,-0.604864478111267,-0.0121713746339083,-0.79623544216156,-0.40793189406395,-0.00542711419984698,-0.912996232509613,-0.568275332450867,-0.00739084417000413,-0.822805285453796,-0.568275332450867,-0.00739084417000413,-0.822805285453796,-0.40793189406395,-0.00542711419984698,-0.912996232509613,-0.393733501434326,-0.00224727671593428,-0.919221878051758,-0.604864478111267,-0.0121713746339083,-0.79623544216156,-0.450742542743683,-0.00732132559642196,-0.892623960971832,-0.40793189406395,-0.00542711419984698,-0.912996232509613,-0.393733501434326,-0.00224727671593428,-0.919221878051758,-0.203768745064735,-0.00128338194917887,-0.979018211364746,-0.200508341193199,-0.000125348728033714,-0.979691982269287,-0.203768745064735,-0.00128338194917887,-0.979018211364746,6.47990818833932e-05,-0.000146918784594163,-1,-0.200508341193199,-0.000125348728033714,-0.979691982269287,-0.40793189406395,-0.00542711419984698,-0.912996232509613,-0.203768745064735,-0.00128338194917887,-0.979018211364746,-0.393733501434326,-0.00224727671593428,-0.919221878051758,-0.450742542743683,-0.00732132559642196,-0.892623960971832,-0.214874967932701,-0.00223124329932034,-0.976639032363892,-0.40793189406395,-0.00542711419984698,-0.912996232509613,-0.40793189406395,-0.00542711419984698,-0.912996232509613,-0.214874967932701,-0.00223124329932034,-0.976639032363892,-0.203768745064735,-0.00128338194917887,-0.979018211364746,-0.450742542743683,-0.00732132559642196,-0.892623960971832,-0.244300961494446,-0.00221640942618251,-0.969696938991547,-0.214874967932701,-0.00223124329932034,-0.976639032363892,-0.203768745064735,-0.00128338194917887,-0.979018211364746,3.23757485602982e-05,-7.66784214647487e-05,-1,6.47990818833932e-05,-0.000146918784594163,-1, +-0.214874967932701,-0.00223124329932034,-0.976639032363892,3.23757485602982e-05,-7.66784214647487e-05,-1,-0.203768745064735,-0.00128338194917887,-0.979018211364746,3.23757485602982e-05,-7.66784214647487e-05,-1,0.200494527816772,0.00036160196759738,-0.979694783687592,6.47990818833932e-05,-0.000146918784594163,-1,-0.244300961494446,-0.00221640942618251,-0.969696938991547,-0.000511177000589669,0.000757025089114904,-0.999999582767487,-0.214874967932701,-0.00223124329932034,-0.976639032363892,-0.214874967932701,-0.00223124329932034,-0.976639032363892,-0.000511177000589669,0.000757025089114904,-0.999999582767487,3.23757485602982e-05,-7.66784214647487e-05,-1,-0.244300961494446,-0.00221640942618251,-0.969696938991547,-0.00317238713614643,0.00317238341085613,-0.999989926815033,-0.000511177000589669,0.000757025089114904,-0.999999582767487,3.23757485602982e-05,-7.66784214647487e-05,-1,0.203773945569992,0.00127075624186546,-0.97901713848114,0.200494527816772,0.00036160196759738,-0.979694783687592,-0.000511177000589669,0.000757025089114904,-0.999999582767487,0.203773945569992,0.00127075624186546,-0.97901713848114,3.23757485602982e-05,-7.66784214647487e-05,-1,0.203773945569992,0.00127075624186546,-0.97901713848114,0.389724940061569,0.000561357359401882,-0.920931160449982,0.200494527816772,0.00036160196759738,-0.979694783687592,-0.00317238713614643,0.00317238341085613,-0.999989926815033,0.214030519127846,0.0035399510525167,-0.976820588111877,-0.000511177000589669,0.000757025089114904,-0.999999582767487,-0.000511177000589669,0.000757025089114904,-0.999999582767487,0.214030519127846,0.0035399510525167,-0.976820588111877,0.203773945569992,0.00127075624186546,-0.97901713848114,-0.00317238713614643,0.00317238341085613,-0.999989926815033,0.239490821957588,0.00732503505423665,-0.970870971679688,0.214030519127846,0.0035399510525167,-0.976820588111877,0.203773945569992,0.00127075624186546,-0.97901713848114,0.393845975399017,0.0019380321027711,-0.919174432754517,0.389724940061569,0.000561357359401882,-0.920931160449982,0.214030519127846,0.0035399510525167,-0.976820588111877, +0.393845975399017,0.0019380321027711,-0.919174432754517,0.203773945569992,0.00127075624186546,-0.97901713848114,0.393845975399017,0.0019380321027711,-0.919174432754517,0.559976100921631,0.0004994185292162,-0.828508615493774,0.389724940061569,0.000561357359401882,-0.920931160449982,0.239490821957588,0.00732503505423665,-0.970870971679688,0.407897412776947,0.00548773910850286,-0.913011252880096,0.214030519127846,0.0035399510525167,-0.976820588111877,0.214030519127846,0.0035399510525167,-0.976820588111877,0.407897412776947,0.00548773910850286,-0.913011252880096,0.393845975399017,0.0019380321027711,-0.919174432754517,0.239490821957588,0.00732503505423665,-0.970870971679688,0.448529869318008,0.0100917797535658,-0.893710851669312,0.407897412776947,0.00548773910850286,-0.913011252880096,0.393845975399017,0.0019380321027711,-0.919174432754517,0.562161803245544,0.00171078939456493,-0.827025473117828,0.559976100921631,0.0004994185292162,-0.828508615493774,0.407897412776947,0.00548773910850286,-0.913011252880096,0.562161803245544,0.00171078939456493,-0.827025473117828,0.393845975399017,0.0019380321027711,-0.919174432754517,0.562161803245544,0.00171078939456493,-0.827025473117828,0.707090020179749,0.000135164547828026,-0.707123517990112,0.559976100921631,0.0004994185292162,-0.828508615493774,0.562161803245544,0.00171078939456493,-0.827025473117828,0.707019746303558,0.000340344529831782,-0.707193732261658,0.707090020179749,0.000135164547828026,-0.707123517990112,0.448529869318008,0.0100917797535658,-0.893710851669312,0.569286942481995,0.0052561922930181,-0.822122097015381,0.407897412776947,0.00548773910850286,-0.913011252880096,0.407897412776947,0.00548773910850286,-0.913011252880096,0.569286942481995,0.0052561922930181,-0.822122097015381,0.562161803245544,0.00171078939456493,-0.827025473117828,0.569286942481995,0.0052561922930181,-0.822122097015381,0.707019746303558,0.000340344529831782,-0.707193732261658,0.562161803245544,0.00171078939456493,-0.827025473117828,0.448529869318008,0.0100917797535658,-0.893710851669312,0.603774666786194,0.0138801708817482,-0.797034204006195, +0.569286942481995,0.0052561922930181,-0.822122097015381,0.569286942481995,0.0052561922930181,-0.822122097015381,0.706700623035431,0.00104752520564944,-0.707511961460114,0.707019746303558,0.000340344529831782,-0.707193732261658,0.603774666786194,0.0138801708817482,-0.797034204006195,0.706700623035431,0.00104752520564944,-0.707511961460114,0.569286942481995,0.0052561922930181,-0.822122097015381,0.603774666786194,0.0138801708817482,-0.797034204006195,0.707831621170044,-0.00145219243131578,-0.706379652023315,0.706700623035431,0.00104752520564944,-0.707511961460114,-0.79703426361084,0.013880061917007,0.603774607181549,-0.706380188465118,-0.00145136343780905,0.707831144332886,-0.707512021064758,0.00104705814737827,0.706700563430786,-0.79703426361084,0.013880061917007,0.603774607181549,-0.707512021064758,0.00104705814737827,0.706700563430786,-0.82212245464325,0.00525680417194963,0.569286406040192,-0.893710911273956,0.0100916093215346,0.448529809713364,-0.79703426361084,0.013880061917007,0.603774607181549,-0.82212245464325,0.00525680417194963,0.569286406040192,-0.82212245464325,0.00525680417194963,0.569286406040192,-0.707512021064758,0.00104705814737827,0.706700563430786,-0.707193970680237,0.000340494909323752,0.707019507884979,-0.893710911273956,0.0100916093215346,0.448529809713364,-0.82212245464325,0.00525680417194963,0.569286406040192,-0.913011312484741,0.00548809114843607,0.407897293567657,-0.970871031284332,0.00732554262503982,0.239490687847137,-0.893710911273956,0.0100916093215346,0.448529809713364,-0.913011312484741,0.00548809114843607,0.407897293567657,-0.82212245464325,0.00525680417194963,0.569286406040192,-0.707193970680237,0.000340494909323752,0.707019507884979,-0.827025532722473,0.00171121885068715,0.5621617436409,-0.913011312484741,0.00548809114843607,0.407897293567657,-0.82212245464325,0.00525680417194963,0.569286406040192,-0.827025532722473,0.00171121885068715,0.5621617436409,-0.827025532722473,0.00171121885068715,0.5621617436409,-0.707193970680237,0.000340494909323752,0.707019507884979,-0.707123517990112,0.000135559312184341,0.707090079784393, +-0.970871031284332,0.00732554262503982,0.239490687847137,-0.913011312484741,0.00548809114843607,0.407897293567657,-0.976820528507233,0.00353963137604296,0.214030712842941,-0.999989926815033,0.00317236757837236,-0.0031723661813885,-0.970871031284332,0.00732554262503982,0.239490687847137,-0.976820528507233,0.00353963137604296,0.214030712842941,-0.827025532722473,0.00171121885068715,0.5621617436409,-0.707123517990112,0.000135559312184341,0.707090079784393,-0.82850855588913,0.000499128771480173,0.559976160526276,-0.82850855588913,0.000499128771480173,0.559976160526276,-0.707123517990112,0.000135559312184341,0.707090079784393,-0.707106411457062,3.50248251379526e-06,0.707107126712799,-0.913011312484741,0.00548809114843607,0.407897293567657,-0.827025532722473,0.00171121885068715,0.5621617436409,-0.919174134731293,0.00193759775720537,0.39384663105011,-0.976820528507233,0.00353963137604296,0.214030712842941,-0.913011312484741,0.00548809114843607,0.407897293567657,-0.919174134731293,0.00193759775720537,0.39384663105011,-0.919174134731293,0.00193759775720537,0.39384663105011,-0.827025532722473,0.00171121885068715,0.5621617436409,-0.82850855588913,0.000499128771480173,0.559976160526276,-0.999989926815033,0.00317236757837236,-0.0031723661813885,-0.976820528507233,0.00353963137604296,0.214030712842941,-0.999999582767487,0.000756532303057611,-0.000510844693053514,-0.969696879386902,-0.00221665436401963,-0.244301065802574,-0.999989926815033,0.00317236757837236,-0.0031723661813885,-0.999999582767487,0.000756532303057611,-0.000510844693053514,-0.82850855588913,0.000499128771480173,0.559976160526276,-0.707106411457062,3.50248251379526e-06,0.707107126712799,-0.828302383422852,2.81569409708027e-05,0.560281336307526,-0.707106232643127,5.55050746697816e-06,0.707107365131378,-0.828302383422852,2.81569409708027e-05,0.560281336307526,-0.707106411457062,3.50248251379526e-06,0.707107126712799,-0.919174134731293,0.00193759775720537,0.39384663105011,-0.82850855588913,0.000499128771480173,0.559976160526276,-0.920931160449982,0.000561605032999068,0.389724940061569, +-0.920931160449982,0.000561605032999068,0.389724940061569,-0.82850855588913,0.000499128771480173,0.559976160526276,-0.828302383422852,2.81569409708027e-05,0.560281336307526,-0.976820528507233,0.00353963137604296,0.214030712842941,-0.919174134731293,0.00193759775720537,0.39384663105011,-0.97901713848114,0.00127063516993076,0.203773930668831,-0.999999582767487,0.000756532303057611,-0.000510844693053514,-0.976820528507233,0.00353963137604296,0.214030712842941,-0.97901713848114,0.00127063516993076,0.203773930668831,-0.97901713848114,0.00127063516993076,0.203773930668831,-0.919174134731293,0.00193759775720537,0.39384663105011,-0.920931160449982,0.000561605032999068,0.389724940061569,-0.969696879386902,-0.00221665436401963,-0.244301065802574,-0.999999582767487,0.000756532303057611,-0.000510844693053514,-0.976639032363892,-0.00223128288052976,-0.214874893426895,-0.89262443780899,-0.00732150813564658,-0.450741618871689,-0.969696879386902,-0.00221665436401963,-0.244301065802574,-0.976639032363892,-0.00223128288052976,-0.214874893426895,-0.707106232643127,5.55050746697816e-06,0.707107365131378,-0.828301012516022,-2.52239769906737e-05,0.560283303260803,-0.828302383422852,2.81569409708027e-05,0.560281336307526,-0.707087874412537,0.000145035635796376,0.707125663757324,-0.828301012516022,-2.52239769906737e-05,0.560283303260803,-0.707106232643127,5.55050746697816e-06,0.707107365131378,-0.999999582767487,0.000756532303057611,-0.000510844693053514,-0.97901713848114,0.00127063516993076,0.203773930668831,-1,-7.70545302657411e-05,3.25345572491642e-05,-0.976639032363892,-0.00223128288052976,-0.214874893426895,-0.999999582767487,0.000756532303057611,-0.000510844693053514,-1,-7.70545302657411e-05,3.25345572491642e-05,-0.920931160449982,0.000561605032999068,0.389724940061569,-0.828302383422852,2.81569409708027e-05,0.560281336307526,-0.920824944972992,3.03727101709228e-05,0.389976143836975,-0.828301012516022,-2.52239769906737e-05,0.560283303260803,-0.920824944972992,3.03727101709228e-05,0.389976143836975,-0.828302383422852,2.81569409708027e-05,0.560281336307526, +-0.97901713848114,0.00127063516993076,0.203773930668831,-0.920931160449982,0.000561605032999068,0.389724940061569,-0.979694724082947,0.000361598329618573,0.200494587421417,-1,-7.70545302657411e-05,3.25345572491642e-05,-0.97901713848114,0.00127063516993076,0.203773930668831,-0.979694724082947,0.000361598329618573,0.200494587421417,-0.979694724082947,0.000361598329618573,0.200494587421417,-0.920931160449982,0.000561605032999068,0.389724940061569,-0.920824944972992,3.03727101709228e-05,0.389976143836975,-0.89262443780899,-0.00732150813564658,-0.450741618871689,-0.976639032363892,-0.00223128288052976,-0.214874893426895,-0.912996470928192,-0.00542697077617049,-0.407931357622147,-0.79623544216156,-0.0121714379638433,-0.604864478111267,-0.89262443780899,-0.00732150813564658,-0.450741618871689,-0.912996470928192,-0.00542697077617049,-0.407931357622147,-0.707087874412537,0.000145035635796376,0.707125663757324,-0.828502237796783,-0.000449134764494374,0.55998557806015,-0.828301012516022,-2.52239769906737e-05,0.560283303260803,-0.707019031047821,0.000340405938914046,0.707194447517395,-0.828502237796783,-0.000449134764494374,0.55998557806015,-0.707087874412537,0.000145035635796376,0.707125663757324,-0.976639032363892,-0.00223128288052976,-0.214874893426895,-1,-7.70545302657411e-05,3.25345572491642e-05,-0.979018211364746,-0.00128328206483275,-0.203768715262413,-0.912996470928192,-0.00542697077617049,-0.407931357622147,-0.976639032363892,-0.00223128288052976,-0.214874893426895,-0.979018211364746,-0.00128328206483275,-0.203768715262413,-1,-7.70545302657411e-05,3.25345572491642e-05,-0.979694724082947,0.000361598329618573,0.200494587421417,-1,-0.000153804634464905,3.13960845232941e-05,-0.979018211364746,-0.00128328206483275,-0.203768715262413,-1,-7.70545302657411e-05,3.25345572491642e-05,-1,-0.000153804634464905,3.13960845232941e-05,-0.979694724082947,0.000361598329618573,0.200494587421417,-0.920824944972992,3.03727101709228e-05,0.389976143836975,-0.979596078395844,6.3281199800258e-06,0.200976297259331,-1,-0.000153804634464905,3.13960845232941e-05, +-0.979694724082947,0.000361598329618573,0.200494587421417,-0.979596078395844,6.3281199800258e-06,0.200976297259331,-0.828301012516022,-2.52239769906737e-05,0.560283303260803,-0.920823872089386,-3.25708060699981e-05,0.389978736639023,-0.920824944972992,3.03727101709228e-05,0.389976143836975,-0.828502237796783,-0.000449134764494374,0.55998557806015,-0.920823872089386,-3.25708060699981e-05,0.389978736639023,-0.828301012516022,-2.52239769906737e-05,0.560283303260803,-0.920823872089386,-3.25708060699981e-05,0.389978736639023,-0.979596078395844,6.3281199800258e-06,0.200976297259331,-0.920824944972992,3.03727101709228e-05,0.389976143836975,-0.79623544216156,-0.0121714379638433,-0.604864478111267,-0.912996470928192,-0.00542697077617049,-0.407931357622147,-0.822805404663086,-0.0073911533690989,-0.568275153636932,-0.707940459251404,-0.0016707795439288,-0.706270158290863,-0.79623544216156,-0.0121714379638433,-0.604864478111267,-0.822805404663086,-0.0073911533690989,-0.568275153636932,-0.707940459251404,-0.0016707795439288,-0.706270158290863,-0.822805404663086,-0.0073911533690989,-0.568275153636932,-0.706700384616852,0.00104731903411448,-0.707512140274048,-0.912996470928192,-0.00542697077617049,-0.407931357622147,-0.979018211364746,-0.00128328206483275,-0.203768715262413,-0.919221818447113,-0.0022468960378319,-0.393733590841293,-0.822805404663086,-0.0073911533690989,-0.568275153636932,-0.912996470928192,-0.00542697077617049,-0.407931357622147,-0.919221818447113,-0.0022468960378319,-0.393733590841293,-0.706700384616852,0.00104731903411448,-0.707512140274048,-0.822805404663086,-0.0073911533690989,-0.568275153636932,-0.827029645442963,-0.00173079583328217,-0.562155604362488,-0.822805404663086,-0.0073911533690989,-0.568275153636932,-0.919221818447113,-0.0022468960378319,-0.393733590841293,-0.827029645442963,-0.00173079583328217,-0.562155604362488,-0.706700384616852,0.00104731903411448,-0.707512140274048,-0.827029645442963,-0.00173079583328217,-0.562155604362488,-0.707019507884979,0.000340490136295557,-0.707193970680237,-0.979018211364746,-0.00128328206483275,-0.203768715262413, +-1,-0.000153804634464905,3.13960845232941e-05,-0.979698121547699,-0.000446110701886937,-0.200477823615074,-0.919221818447113,-0.0022468960378319,-0.393733590841293,-0.979018211364746,-0.00128328206483275,-0.203768715262413,-0.979698121547699,-0.000446110701886937,-0.200477823615074,-1,-0.000153804634464905,3.13960845232941e-05,-0.979596078395844,6.3281199800258e-06,0.200976297259331,-1,-6.63156606606208e-06,3.36829884872714e-07,-0.979698121547699,-0.000446110701886937,-0.200477823615074,-1,-0.000153804634464905,3.13960845232941e-05,-1,-6.63156606606208e-06,3.36829884872714e-07,-0.920823872089386,-3.25708060699981e-05,0.389978736639023,-0.979595720767975,-1.24012422020314e-05,0.200978025794029,-0.979596078395844,6.3281199800258e-06,0.200976297259331,-0.979595720767975,-1.24012422020314e-05,0.200978025794029,-1,-6.63156606606208e-06,3.36829884872714e-07,-0.979596078395844,6.3281199800258e-06,0.200976297259331,-0.707019507884979,0.000340490136295557,-0.707193970680237,-0.827029645442963,-0.00173079583328217,-0.562155604362488,-0.828499972820282,-0.000414204376284033,-0.559988915920258,-0.707019507884979,0.000340490136295557,-0.707193970680237,-0.828499972820282,-0.000414204376284033,-0.559988915920258,-0.707089483737946,0.000135529626277275,-0.70712411403656,-0.827029645442963,-0.00173079583328217,-0.562155604362488,-0.919221818447113,-0.0022468960378319,-0.393733590841293,-0.920935451984406,-0.000618142483290285,-0.389714688062668,-0.919221818447113,-0.0022468960378319,-0.393733590841293,-0.979698121547699,-0.000446110701886937,-0.200477823615074,-0.920935451984406,-0.000618142483290285,-0.389714688062668,-0.827029645442963,-0.00173079583328217,-0.562155604362488,-0.920935451984406,-0.000618142483290285,-0.389714688062668,-0.828499972820282,-0.000414204376284033,-0.559988915920258,-0.979698121547699,-0.000446110701886937,-0.200477823615074,-1,-6.63156606606208e-06,3.36829884872714e-07,-0.979596138000488,-9.58806685957825e-06,-0.200976088643074,-0.920935451984406,-0.000618142483290285,-0.389714688062668,-0.979698121547699,-0.000446110701886937,-0.200477823615074, +-0.979596138000488,-9.58806685957825e-06,-0.200976088643074,-0.707089483737946,0.000135529626277275,-0.70712411403656,-0.828499972820282,-0.000414204376284033,-0.559988915920258,-0.828302323818207,-2.36382438743021e-05,-0.560281455516815,-0.707089483737946,0.000135529626277275,-0.70712411403656,-0.828302323818207,-2.36382438743021e-05,-0.560281455516815,-0.707106351852417,4.13435054724687e-06,-0.707107186317444,-0.828499972820282,-0.000414204376284033,-0.559988915920258,-0.920935451984406,-0.000618142483290285,-0.389714688062668,-0.920825004577637,-2.94954352284549e-05,-0.38997608423233,-0.920935451984406,-0.000618142483290285,-0.389714688062668,-0.979596138000488,-9.58806685957825e-06,-0.200976088643074,-0.920825004577637,-2.94954352284549e-05,-0.38997608423233,-0.828499972820282,-0.000414204376284033,-0.559988915920258,-0.920825004577637,-2.94954352284549e-05,-0.38997608423233,-0.828302323818207,-2.36382438743021e-05,-0.560281455516815,-1,-7.93314575275872e-06,-4.04052002522803e-07,-0.979596138000488,-9.58806685957825e-06,-0.200976088643074,-1,-6.63156606606208e-06,3.36829884872714e-07,-0.979595720767975,-1.24012422020314e-05,0.200978025794029,-1,-7.93314575275872e-06,-4.04052002522803e-07,-1,-6.63156606606208e-06,3.36829884872714e-07,-0.920937895774841,-0.000666405074298382,0.38970884680748,-0.979595720767975,-1.24012422020314e-05,0.200978025794029,-0.920823872089386,-3.25708060699981e-05,0.389978736639023,-0.828502237796783,-0.000449134764494374,0.55998557806015,-0.920937895774841,-0.000666405074298382,0.38970884680748,-0.920823872089386,-3.25708060699981e-05,0.389978736639023,-0.828301191329956,3.1171104637906e-05,-0.560283064842224,-0.707106351852417,4.13435054724687e-06,-0.707107186317444,-0.828302323818207,-2.36382438743021e-05,-0.560281455516815,-0.828301191329956,3.1171104637906e-05,-0.560283064842224,-0.707106947898865,5.59938143851468e-06,-0.707106649875641,-0.707106351852417,4.13435054724687e-06,-0.707107186317444,-0.979595720767975,7.72767543821828e-06,-0.200978264212608,-0.920825004577637,-2.94954352284549e-05,-0.38997608423233, +-0.979596138000488,-9.58806685957825e-06,-0.200976088643074,-1,-7.93314575275872e-06,-4.04052002522803e-07,-0.979595720767975,7.72767543821828e-06,-0.200978264212608,-0.979596138000488,-9.58806685957825e-06,-0.200976088643074,-0.920823872089386,3.27025481965393e-05,-0.389978766441345,-0.828302323818207,-2.36382438743021e-05,-0.560281455516815,-0.920825004577637,-2.94954352284549e-05,-0.38997608423233,-0.920823872089386,3.27025481965393e-05,-0.389978766441345,-0.828301191329956,3.1171104637906e-05,-0.560283064842224,-0.828302323818207,-2.36382438743021e-05,-0.560281455516815,-0.979595720767975,7.72767543821828e-06,-0.200978264212608,-0.920823872089386,3.27025481965393e-05,-0.389978766441345,-0.920825004577637,-2.94954352284549e-05,-0.38997608423233,-0.979699194431305,-0.000482687581097707,0.20047265291214,-1,-7.93314575275872e-06,-4.04052002522803e-07,-0.979595720767975,-1.24012422020314e-05,0.200978025794029,-0.920937895774841,-0.000666405074298382,0.38970884680748,-0.979699194431305,-0.000482687581097707,0.20047265291214,-0.979595720767975,-1.24012422020314e-05,0.200978025794029,-0.827029645442963,-0.00173057871870697,0.562155663967133,-0.920937895774841,-0.000666405074298382,0.38970884680748,-0.828502237796783,-0.000449134764494374,0.55998557806015,-0.707019031047821,0.000340405938914046,0.707194447517395,-0.827029645442963,-0.00173057871870697,0.562155663967133,-0.828502237796783,-0.000449134764494374,0.55998557806015,-0.706700325012207,0.00104730459861457,0.707512199878693,-0.827029645442963,-0.00173057871870697,0.562155663967133,-0.707019031047821,0.000340405938914046,0.707194447517395,-0.828512012958527,0.000543933070730418,-0.55997097492218,-0.707106947898865,5.59938143851468e-06,-0.707106649875641,-0.828301191329956,3.1171104637906e-05,-0.560283064842224,-0.828512012958527,0.000543933070730418,-0.55997097492218,-0.707125425338745,0.000145293335663155,-0.707088112831116,-0.707106947898865,5.59938143851468e-06,-0.707106649875641,-1,-0.00016110428259708,-3.29090325976722e-05,-0.979595720767975,7.72767543821828e-06,-0.200978264212608, +-1,-7.93314575275872e-06,-4.04052002522803e-07,-0.979699194431305,-0.000482687581097707,0.20047265291214,-1,-0.00016110428259708,-3.29090325976722e-05,-1,-7.93314575275872e-06,-4.04052002522803e-07,-0.920933544635773,0.000609330600127578,-0.389719158411026,-0.828301191329956,3.1171104637906e-05,-0.560283064842224,-0.920823872089386,3.27025481965393e-05,-0.389978766441345,-0.920933544635773,0.000609330600127578,-0.389719158411026,-0.828512012958527,0.000543933070730418,-0.55997097492218,-0.828301191329956,3.1171104637906e-05,-0.560283064842224,-0.979695498943329,0.000390505942050368,-0.200490891933441,-0.920823872089386,3.27025481965393e-05,-0.389978766441345,-0.979595720767975,7.72767543821828e-06,-0.200978264212608,-1,-0.00016110428259708,-3.29090325976722e-05,-0.979695498943329,0.000390505942050368,-0.200490891933441,-0.979595720767975,7.72767543821828e-06,-0.200978264212608,-0.979695498943329,0.000390505942050368,-0.200490891933441,-0.920933544635773,0.000609330600127578,-0.389719158411026,-0.920823872089386,3.27025481965393e-05,-0.389978766441345,-0.827029645442963,-0.00173057871870697,0.562155663967133,-0.919221878051758,-0.00224719056859612,0.393733471632004,-0.920937895774841,-0.000666405074298382,0.38970884680748,-0.919221878051758,-0.00224719056859612,0.393733471632004,-0.979699194431305,-0.000482687581097707,0.20047265291214,-0.920937895774841,-0.000666405074298382,0.38970884680748,-0.706700325012207,0.00104730459861457,0.707512199878693,-0.822805464267731,-0.00739108817651868,0.568275034427643,-0.827029645442963,-0.00173057871870697,0.562155663967133,-0.822805464267731,-0.00739108817651868,0.568275034427643,-0.919221878051758,-0.00224719056859612,0.393733471632004,-0.827029645442963,-0.00173057871870697,0.562155663967133,-0.70783132314682,-0.00145134225022048,0.706380009651184,-0.822805464267731,-0.00739108817651868,0.568275034427643,-0.706700325012207,0.00104730459861457,0.707512199878693,-0.70783132314682,-0.00145134225022048,0.706380009651184,-0.797433972358704,-0.0147384880110621,0.603226184844971,-0.822805464267731,-0.00739108817651868,0.568275034427643, +-0.797433972358704,-0.0147384880110621,0.603226184844971,-0.912996411323547,-0.00542697217315435,0.407931536436081,-0.822805464267731,-0.00739108817651868,0.568275034427643,-0.822805464267731,-0.00739108817651868,0.568275034427643,-0.912996411323547,-0.00542697217315435,0.407931536436081,-0.919221878051758,-0.00224719056859612,0.393733471632004,-0.797433972358704,-0.0147384880110621,0.603226184844971,-0.893258213996887,-0.00893378350883722,0.449455231428146,-0.912996411323547,-0.00542697217315435,0.407931536436081,-0.919221878051758,-0.00224719056859612,0.393733471632004,-0.979018211364746,-0.00128338648937643,0.203768670558929,-0.979699194431305,-0.000482687581097707,0.20047265291214,-0.979018211364746,-0.00128338648937643,0.203768670558929,-1,-0.00016110428259708,-3.29090325976722e-05,-0.979699194431305,-0.000482687581097707,0.20047265291214,-0.912996411323547,-0.00542697217315435,0.407931536436081,-0.979018211364746,-0.00128338648937643,0.203768670558929,-0.919221878051758,-0.00224719056859612,0.393733471632004,-0.893258213996887,-0.00893378350883722,0.449455231428146,-0.976638972759247,-0.00223112897947431,0.214875116944313,-0.912996411323547,-0.00542697217315435,0.407931536436081,-0.912996411323547,-0.00542697217315435,0.407931536436081,-0.976638972759247,-0.00223112897947431,0.214875116944313,-0.979018211364746,-0.00128338648937643,0.203768670558929,-0.893258213996887,-0.00893378350883722,0.449455231428146,-0.970496952533722,-0.00567395752295852,0.241046622395515,-0.976638972759247,-0.00223112897947431,0.214875116944313,-0.979018211364746,-0.00128338648937643,0.203768670558929,-1,-7.6692653237842e-05,-3.23817585012875e-05,-1,-0.00016110428259708,-3.29090325976722e-05,-0.976638972759247,-0.00223112897947431,0.214875116944313,-1,-7.6692653237842e-05,-3.23817585012875e-05,-0.979018211364746,-0.00128338648937643,0.203768670558929,-1,-7.6692653237842e-05,-3.23817585012875e-05,-0.979695498943329,0.000390505942050368,-0.200490891933441,-1,-0.00016110428259708,-3.29090325976722e-05,-0.970496952533722,-0.00567395752295852,0.241046622395515, +-0.999999582767487,0.000756492489017546,0.000510817335452884,-0.976638972759247,-0.00223112897947431,0.214875116944313,-0.976638972759247,-0.00223112897947431,0.214875116944313,-0.999999582767487,0.000756492489017546,0.000510817335452884,-1,-7.6692653237842e-05,-3.23817585012875e-05,-0.970496952533722,-0.00567395752295852,0.241046622395515,-0.999997437000275,-0.00159996992442757,-0.00159997050650418,-0.999999582767487,0.000756492489017546,0.000510817335452884,-1,-7.6692653237842e-05,-3.23817585012875e-05,-0.97901713848114,0.00127070036251098,-0.203774020075798,-0.979695498943329,0.000390505942050368,-0.200490891933441,-0.999999582767487,0.000756492489017546,0.000510817335452884,-0.97901713848114,0.00127070036251098,-0.203774020075798,-1,-7.6692653237842e-05,-3.23817585012875e-05,-0.97901713848114,0.00127070036251098,-0.203774020075798,-0.920933544635773,0.000609330600127578,-0.389719158411026,-0.979695498943329,0.000390505942050368,-0.200490891933441,-0.999997437000275,-0.00159996992442757,-0.00159997050650418,-0.976820468902588,0.00353987282142043,-0.214030906558037,-0.999999582767487,0.000756492489017546,0.000510817335452884,-0.999999582767487,0.000756492489017546,0.000510817335452884,-0.976820468902588,0.00353987282142043,-0.214030906558037,-0.97901713848114,0.00127070036251098,-0.203774020075798,-0.999997437000275,-0.00159996992442757,-0.00159997050650418,-0.970087289810181,0.00389177585020661,-0.242725044488907,-0.976820468902588,0.00353987282142043,-0.214030906558037,-0.97901713848114,0.00127070036251098,-0.203774020075798,-0.919174373149872,0.00193792453501374,-0.393846124410629,-0.920933544635773,0.000609330600127578,-0.389719158411026,-0.976820468902588,0.00353987282142043,-0.214030906558037,-0.919174373149872,0.00193792453501374,-0.393846124410629,-0.97901713848114,0.00127070036251098,-0.203774020075798,-0.919174373149872,0.00193792453501374,-0.393846124410629,-0.828512012958527,0.000543933070730418,-0.55997097492218,-0.920933544635773,0.000609330600127578,-0.389719158411026,-0.970087289810181,0.00389177585020661,-0.242725044488907, +-0.91301155090332,0.0054884422570467,-0.407896757125854,-0.976820468902588,0.00353987282142043,-0.214030906558037,-0.976820468902588,0.00353987282142043,-0.214030906558037,-0.91301155090332,0.0054884422570467,-0.407896757125854,-0.919174373149872,0.00193792453501374,-0.393846124410629,-0.970087289810181,0.00389177585020661,-0.242725044488907,-0.893087387084961,0.00849838741123676,-0.449802964925766,-0.91301155090332,0.0054884422570467,-0.407896757125854,-0.919174373149872,0.00193792453501374,-0.393846124410629,-0.827025771141052,0.00171101279556751,-0.562161445617676,-0.828512012958527,0.000543933070730418,-0.55997097492218,-0.91301155090332,0.0054884422570467,-0.407896757125854,-0.827025771141052,0.00171101279556751,-0.562161445617676,-0.919174373149872,0.00193792453501374,-0.393846124410629,-0.827025771141052,0.00171101279556751,-0.562161445617676,-0.707125425338745,0.000145293335663155,-0.707088112831116,-0.828512012958527,0.000543933070730418,-0.55997097492218,-0.827025771141052,0.00171101279556751,-0.562161445617676,-0.707194268703461,0.000340236467309296,-0.707019209861755,-0.707125425338745,0.000145293335663155,-0.707088112831116,-0.893087387084961,0.00849838741123676,-0.449802964925766,-0.82212245464325,0.00525633804500103,-0.569286406040192,-0.91301155090332,0.0054884422570467,-0.407896757125854,-0.91301155090332,0.0054884422570467,-0.407896757125854,-0.82212245464325,0.00525633804500103,-0.569286406040192,-0.827025771141052,0.00171101279556751,-0.562161445617676,-0.82212245464325,0.00525633804500103,-0.569286406040192,-0.707194268703461,0.000340236467309296,-0.707019209861755,-0.827025771141052,0.00171101279556751,-0.562161445617676,-0.893087387084961,0.00849838741123676,-0.449802964925766,-0.795816540718079,0.0112781785428524,-0.605432748794556,-0.82212245464325,0.00525633804500103,-0.569286406040192,-0.82212245464325,0.00525633804500103,-0.569286406040192,-0.707511961460114,0.00104676291812211,-0.706700563430786,-0.707194268703461,0.000340236467309296,-0.707019209861755,-0.795816540718079,0.0112781785428524,-0.605432748794556, +-0.707511961460114,0.00104676291812211,-0.706700563430786,-0.82212245464325,0.00525633804500103,-0.569286406040192,-0.795816540718079,0.0112781785428524,-0.605432748794556,-0.706269860267639,-0.00167061330284923,-0.707940697669983,-0.707511961460114,0.00104676291812211,-0.706700563430786,-0.242629006505013,-0.00249176658689976,0.970115959644318,0.00341861741617322,-0.00191560119856149,0.999992311000824,0.000563199166208506,0.000645998050458729,0.999999642372131,-0.242629006505013,-0.00249176658689976,0.970115959644318,0.000563199166208506,0.000645998050458729,0.999999642372131,-0.215898364782333,0.000849695294164121,0.976415455341339,-0.449454456567764,-0.00893393252044916,0.893258571624756,-0.242629006505013,-0.00249176658689976,0.970115959644318,-0.215898364782333,0.000849695294164121,0.976415455341339,-0.215898364782333,0.000849695294164121,0.976415455341339,0.000563199166208506,0.000645998050458729,0.999999642372131,0.000567885115742683,7.95563828432932e-05,0.999999821186066,-0.449454456567764,-0.00893393252044916,0.893258571624756,-0.215898364782333,0.000849695294164121,0.976415455341339,-0.407931208610535,-0.00542690791189671,0.912996530532837,-0.603226065635681,-0.0147382421419024,0.797434031963348,-0.449454456567764,-0.00893393252044916,0.893258571624756,-0.407931208610535,-0.00542690791189671,0.912996530532837,-0.215898364782333,0.000849695294164121,0.976415455341339,0.000567885115742683,7.95563828432932e-05,0.999999821186066,-0.20425271987915,0.00135319912806153,0.978917241096497,-0.407931208610535,-0.00542690791189671,0.912996530532837,-0.215898364782333,0.000849695294164121,0.976415455341339,-0.20425271987915,0.00135319912806153,0.978917241096497,-0.20425271987915,0.00135319912806153,0.978917241096497,0.000567885115742683,7.95563828432932e-05,0.999999821186066,0.000179840237251483,0.000491874350700527,0.99999988079071,-0.603226065635681,-0.0147382421419024,0.797434031963348,-0.407931208610535,-0.00542690791189671,0.912996530532837,-0.568274617195129,-0.00739108072593808,0.822805762290955,-0.706380188465118,-0.00145136343780905,0.707831144332886, +-0.603226065635681,-0.0147382421419024,0.797434031963348,-0.568274617195129,-0.00739108072593808,0.822805762290955,-0.706380188465118,-0.00145136343780905,0.707831144332886,-0.568274617195129,-0.00739108072593808,0.822805762290955,-0.707512021064758,0.00104705814737827,0.706700563430786,-0.407931208610535,-0.00542690791189671,0.912996530532837,-0.20425271987915,0.00135319912806153,0.978917241096497,-0.39373368024826,-0.00224700011312962,0.919221818447113,-0.568274617195129,-0.00739108072593808,0.822805762290955,-0.407931208610535,-0.00542690791189671,0.912996530532837,-0.39373368024826,-0.00224700011312962,0.919221818447113,-0.20425271987915,0.00135319912806153,0.978917241096497,0.000179840237251483,0.000491874350700527,0.99999988079071,-0.200599551200867,0.0015690146246925,0.979672074317932,-0.39373368024826,-0.00224700011312962,0.919221818447113,-0.20425271987915,0.00135319912806153,0.978917241096497,-0.200599551200867,0.0015690146246925,0.979672074317932,-0.200599551200867,0.0015690146246925,0.979672074317932,0.000179840237251483,0.000491874350700527,0.99999988079071,1.16998680823599e-05,0.0011088578030467,0.999999403953552,-0.707512021064758,0.00104705814737827,0.706700563430786,-0.568274617195129,-0.00739108072593808,0.822805762290955,-0.562155067920685,-0.00173077336512506,0.827030003070831,-0.568274617195129,-0.00739108072593808,0.822805762290955,-0.39373368024826,-0.00224700011312962,0.919221818447113,-0.562155067920685,-0.00173077336512506,0.827030003070831,-0.707512021064758,0.00104705814737827,0.706700563430786,-0.562155067920685,-0.00173077336512506,0.827030003070831,-0.707193970680237,0.000340494909323752,0.707019507884979,-0.39373368024826,-0.00224700011312962,0.919221818447113,-0.200599551200867,0.0015690146246925,0.979672074317932,-0.389715164899826,-0.000618130841758102,0.920935213565826,-0.562155067920685,-0.00173077336512506,0.827030003070831,-0.39373368024826,-0.00224700011312962,0.919221818447113,-0.389715164899826,-0.000618130841758102,0.920935213565826,-0.200599551200867,0.0015690146246925,0.979672074317932, +1.16998680823599e-05,0.0011088578030467,0.999999403953552,-0.200974300503731,0.00132108002435416,0.979595601558685,-0.389715164899826,-0.000618130841758102,0.920935213565826,-0.200599551200867,0.0015690146246925,0.979672074317932,-0.200974300503731,0.00132108002435416,0.979595601558685,-1.5218539374473e-05,-0.000969017739407718,0.999999523162842,-0.200974300503731,0.00132108002435416,0.979595601558685,1.16998680823599e-05,0.0011088578030467,0.999999403953552,-0.707193970680237,0.000340494909323752,0.707019507884979,-0.562155067920685,-0.00173077336512506,0.827030003070831,-0.559988617897034,-0.000414219539379701,0.828500211238861,-0.562155067920685,-0.00173077336512506,0.827030003070831,-0.389715164899826,-0.000618130841758102,0.920935213565826,-0.559988617897034,-0.000414219539379701,0.828500211238861,-0.707193970680237,0.000340494909323752,0.707019507884979,-0.559988617897034,-0.000414219539379701,0.828500211238861,-0.707123517990112,0.000135559312184341,0.707090079784393,-1.5218539374473e-05,-0.000969017739407718,0.999999523162842,-0.201013892889023,-0.0014166102046147,0.979587376117706,-0.200974300503731,0.00132108002435416,0.979595601558685,7.92761275079101e-05,0.000217809720197693,1,-0.201013892889023,-0.0014166102046147,0.979587376117706,-1.5218539374473e-05,-0.000969017739407718,0.999999523162842,-0.389715164899826,-0.000618130841758102,0.920935213565826,-0.200974300503731,0.00132108002435416,0.979595601558685,-0.389976501464844,-2.94982601189986e-05,0.920824825763702,-0.559988617897034,-0.000414219539379701,0.828500211238861,-0.389715164899826,-0.000618130841758102,0.920935213565826,-0.389976501464844,-2.94982601189986e-05,0.920824825763702,-0.201013892889023,-0.0014166102046147,0.979587376117706,-0.389976501464844,-2.94982601189986e-05,0.920824825763702,-0.200974300503731,0.00132108002435416,0.979595601558685,-0.707123517990112,0.000135559312184341,0.707090079784393,-0.559988617897034,-0.000414219539379701,0.828500211238861,-0.560281097888947,-2.36263003898785e-05,0.828302562236786,-0.559988617897034,-0.000414219539379701,0.828500211238861, +-0.389976501464844,-2.94982601189986e-05,0.920824825763702,-0.560281097888947,-2.36263003898785e-05,0.828302562236786,-0.707123517990112,0.000135559312184341,0.707090079784393,-0.560281097888947,-2.36263003898785e-05,0.828302562236786,-0.707106411457062,3.50248251379526e-06,0.707107126712799,7.92761275079101e-05,0.000217809720197693,1,-0.200592860579491,-0.000302913598716259,0.979674637317657,-0.201013892889023,-0.0014166102046147,0.979587376117706,0.000508701079525054,0.00120480114128441,0.999999165534973,-0.200592860579491,-0.000302913598716259,0.979674637317657,7.92761275079101e-05,0.000217809720197693,1,-0.201013892889023,-0.0014166102046147,0.979587376117706,-0.38997894525528,3.26938607031479e-05,0.920823752880096,-0.389976501464844,-2.94982601189986e-05,0.920824825763702,-0.38997894525528,3.26938607031479e-05,0.920823752880096,-0.560281097888947,-2.36263003898785e-05,0.828302562236786,-0.389976501464844,-2.94982601189986e-05,0.920824825763702,-0.200592860579491,-0.000302913598716259,0.979674637317657,-0.38997894525528,3.26938607031479e-05,0.920823752880096,-0.201013892889023,-0.0014166102046147,0.979587376117706,-0.560282766819,3.11863113893196e-05,0.828301429748535,-0.707106411457062,3.50248251379526e-06,0.707107126712799,-0.560281097888947,-2.36263003898785e-05,0.828302562236786,-0.38997894525528,3.26938607031479e-05,0.920823752880096,-0.560282766819,3.11863113893196e-05,0.828301429748535,-0.560281097888947,-2.36263003898785e-05,0.828302562236786,-0.560282766819,3.11863113893196e-05,0.828301429748535,-0.707106232643127,5.55050746697816e-06,0.707107365131378,-0.707106411457062,3.50248251379526e-06,0.707107126712799,0.000508701079525054,0.00120480114128441,0.999999165534973,-0.204281538724899,2.12671602639602e-05,0.978912174701691,-0.200592860579491,-0.000302913598716259,0.979674637317657,0.00164574570953846,0.00243726139888167,0.999995648860931,-0.204281538724899,2.12671602639602e-05,0.978912174701691,0.000508701079525054,0.00120480114128441,0.999999165534973,-0.200592860579491,-0.000302913598716259,0.979674637317657, +-0.389719158411026,0.000609551323577762,0.920933544635773,-0.38997894525528,3.26938607031479e-05,0.920823752880096,-0.389719158411026,0.000609551323577762,0.920933544635773,-0.560282766819,3.11863113893196e-05,0.828301429748535,-0.38997894525528,3.26938607031479e-05,0.920823752880096,-0.204281538724899,2.12671602639602e-05,0.978912174701691,-0.389719158411026,0.000609551323577762,0.920933544635773,-0.200592860579491,-0.000302913598716259,0.979674637317657,-0.559970796108246,0.000543973059393466,0.828512132167816,-0.707106232643127,5.55050746697816e-06,0.707107365131378,-0.560282766819,3.11863113893196e-05,0.828301429748535,-0.389719158411026,0.000609551323577762,0.920933544635773,-0.559970796108246,0.000543973059393466,0.828512132167816,-0.560282766819,3.11863113893196e-05,0.828301429748535,-0.559970796108246,0.000543973059393466,0.828512132167816,-0.707087874412537,0.000145035635796376,0.707125663757324,-0.707106232643127,5.55050746697816e-06,0.707107365131378,0.00164574570953846,0.00243726139888167,0.999995648860931,-0.215043157339096,0.00197115307673812,0.976602554321289,-0.204281538724899,2.12671602639602e-05,0.978912174701691,0.0050258357077837,0.00502583896741271,0.999974727630615,-0.215043157339096,0.00197115307673812,0.976602554321289,0.00164574570953846,0.00243726139888167,0.999995648860931,0.0050258357077837,0.00502583896741271,0.999974727630615,-0.240988731384277,0.00573563110083342,0.970510959625244,-0.215043157339096,0.00197115307673812,0.976602554321289,-0.204281538724899,2.12671602639602e-05,0.978912174701691,-0.39384588599205,0.00193775398656726,0.919174432754517,-0.389719158411026,0.000609551323577762,0.920933544635773,-0.39384588599205,0.00193775398656726,0.919174432754517,-0.559970796108246,0.000543973059393466,0.828512132167816,-0.389719158411026,0.000609551323577762,0.920933544635773,-0.215043157339096,0.00197115307673812,0.976602554321289,-0.39384588599205,0.00193775398656726,0.919174432754517,-0.204281538724899,2.12671602639602e-05,0.978912174701691,-0.562161207199097,0.00171084003522992,0.827025890350342, +-0.707087874412537,0.000145035635796376,0.707125663757324,-0.559970796108246,0.000543973059393466,0.828512132167816,-0.39384588599205,0.00193775398656726,0.919174432754517,-0.562161207199097,0.00171084003522992,0.827025890350342,-0.559970796108246,0.000543973059393466,0.828512132167816,-0.562161207199097,0.00171084003522992,0.827025890350342,-0.707019031047821,0.000340405938914046,0.707194447517395,-0.707087874412537,0.000145035635796376,0.707125663757324,-0.240988731384277,0.00573563110083342,0.970510959625244,-0.407896459102631,0.00548793701454997,0.91301167011261,-0.215043157339096,0.00197115307673812,0.976602554321289,-0.215043157339096,0.00197115307673812,0.976602554321289,-0.407896459102631,0.00548793701454997,0.91301167011261,-0.39384588599205,0.00193775398656726,0.919174432754517,-0.407896459102631,0.00548793701454997,0.91301167011261,-0.562161207199097,0.00171084003522992,0.827025890350342,-0.39384588599205,0.00193775398656726,0.919174432754517,-0.240988731384277,0.00573563110083342,0.970510959625244,-0.448529124259949,0.01009167637676,0.89371120929718,-0.407896459102631,0.00548793701454997,0.91301167011261,-0.569285929203033,0.0052563794888556,0.822122812271118,-0.707019031047821,0.000340405938914046,0.707194447517395,-0.562161207199097,0.00171084003522992,0.827025890350342,-0.407896459102631,0.00548793701454997,0.91301167011261,-0.569285929203033,0.0052563794888556,0.822122812271118,-0.562161207199097,0.00171084003522992,0.827025890350342,-0.448529124259949,0.01009167637676,0.89371120929718,-0.569285929203033,0.0052563794888556,0.822122812271118,-0.407896459102631,0.00548793701454997,0.91301167011261,-0.569285929203033,0.0052563794888556,0.822122812271118,-0.706700325012207,0.00104730459861457,0.707512199878693,-0.707019031047821,0.000340405938914046,0.707194447517395,-0.448529124259949,0.01009167637676,0.89371120929718,-0.603774607181549,0.0138795012608171,0.79703426361084,-0.569285929203033,0.0052563794888556,0.822122812271118,-0.603774607181549,0.0138795012608171,0.79703426361084,-0.706700325012207,0.00104730459861457,0.707512199878693, +-0.569285929203033,0.0052563794888556,0.822122812271118,-0.603774607181549,0.0138795012608171,0.79703426361084,-0.70783132314682,-0.00145134225022048,0.706380009651184,-0.706700325012207,0.00104730459861457,0.707512199878693,0.605432748794556,0.0112782791256905,0.795816540718079,0.707940578460693,-0.00167053542099893,0.706269979476929,0.706700503826141,0.00104688724968582,0.707512080669403,0.605432748794556,0.0112782791256905,0.795816540718079,0.706700503826141,0.00104688724968582,0.707512080669403,0.569286108016968,0.00525666913017631,0.822122693061829,0.449801683425903,0.00849930848926306,0.893088042736053,0.605432748794556,0.0112782791256905,0.795816540718079,0.569286108016968,0.00525666913017631,0.822122693061829,0.569286108016968,0.00525666913017631,0.822122693061829,0.706700503826141,0.00104688724968582,0.707512080669403,0.707019209861755,0.000340318598318845,0.707194268703461,0.449801683425903,0.00849930848926306,0.893088042736053,0.569286108016968,0.00525666913017631,0.822122693061829,0.407896429300308,0.00548825180158019,0.913011729717255,0.242725923657417,0.00389127782545984,0.970087110996246,0.449801683425903,0.00849930848926306,0.893088042736053,0.407896429300308,0.00548825180158019,0.913011729717255,0.569286108016968,0.00525666913017631,0.822122693061829,0.707019209861755,0.000340318598318845,0.707194268703461,0.562161207199097,0.00171134772244841,0.827025890350342,0.407896429300308,0.00548825180158019,0.913011729717255,0.569286108016968,0.00525666913017631,0.822122693061829,0.562161207199097,0.00171134772244841,0.827025890350342,0.562161207199097,0.00171134772244841,0.827025890350342,0.707019209861755,0.000340318598318845,0.707194268703461,0.707089364528656,0.000135733251227066,0.707124173641205,0.242725923657417,0.00389127782545984,0.970087110996246,0.407896429300308,0.00548825180158019,0.913011729717255,0.214031308889389,0.0035395456943661,0.976820409297943,0.00341861741617322,-0.00191560119856149,0.999992311000824,0.242725923657417,0.00389127782545984,0.970087110996246,0.214031308889389,0.0035395456943661,0.976820409297943, +0.00341861741617322,-0.00191560119856149,0.999992311000824,0.214031308889389,0.0035395456943661,0.976820409297943,0.000563199166208506,0.000645998050458729,0.999999642372131,0.562161207199097,0.00171134772244841,0.827025890350342,0.707089364528656,0.000135733251227066,0.707124173641205,0.559975683689117,0.000499378191307187,0.828508913516998,0.559975683689117,0.000499378191307187,0.828508913516998,0.707089364528656,0.000135733251227066,0.707124173641205,0.707106471061707,4.73985255666776e-06,0.707107067108154,0.407896429300308,0.00548825180158019,0.913011729717255,0.562161207199097,0.00171134772244841,0.827025890350342,0.393846213817596,0.00193765491712838,0.919174313545227,0.214031308889389,0.0035395456943661,0.976820409297943,0.407896429300308,0.00548825180158019,0.913011729717255,0.393846213817596,0.00193765491712838,0.919174313545227,0.393846213817596,0.00193765491712838,0.919174313545227,0.562161207199097,0.00171134772244841,0.827025890350342,0.559975683689117,0.000499378191307187,0.828508913516998,0.000563199166208506,0.000645998050458729,0.999999642372131,0.214031308889389,0.0035395456943661,0.976820409297943,0.203774407505989,0.00127056846395135,0.979017019271851,0.214031308889389,0.0035395456943661,0.976820409297943,0.393846213817596,0.00193765491712838,0.919174313545227,0.203774407505989,0.00127056846395135,0.979017019271851,0.000563199166208506,0.000645998050458729,0.999999642372131,0.203774407505989,0.00127056846395135,0.979017019271851,0.000567885115742683,7.95563828432932e-05,0.999999821186066,0.559975683689117,0.000499378191307187,0.828508913516998,0.707106471061707,4.73985255666776e-06,0.707107067108154,0.560281038284302,2.81386310234666e-05,0.828302562236786,0.70710676908493,4.12006875194493e-06,0.707106828689575,0.560281038284302,2.81386310234666e-05,0.828302562236786,0.707106471061707,4.73985255666776e-06,0.707107067108154,0.393846213817596,0.00193765491712838,0.919174313545227,0.559975683689117,0.000499378191307187,0.828508913516998,0.389725238084793,0.00056128780124709,0.920930981636047,0.203774407505989,0.00127056846395135,0.979017019271851, +0.393846213817596,0.00193765491712838,0.919174313545227,0.389725238084793,0.00056128780124709,0.920930981636047,0.389725238084793,0.00056128780124709,0.920930981636047,0.559975683689117,0.000499378191307187,0.828508913516998,0.560281038284302,2.81386310234666e-05,0.828302562236786,0.000567885115742683,7.95563828432932e-05,0.999999821186066,0.203774407505989,0.00127056846395135,0.979017019271851,0.200494661927223,0.000361664133379236,0.979694724082947,0.203774407505989,0.00127056846395135,0.979017019271851,0.389725238084793,0.00056128780124709,0.920930981636047,0.200494661927223,0.000361664133379236,0.979694724082947,0.000567885115742683,7.95563828432932e-05,0.999999821186066,0.200494661927223,0.000361664133379236,0.979694724082947,0.000179840237251483,0.000491874350700527,0.99999988079071,0.70710676908493,4.12006875194493e-06,0.707106828689575,0.560281217098236,-2.36170053540263e-05,0.828302443027496,0.560281038284302,2.81386310234666e-05,0.828302562236786,0.707123696804047,0.00013534830941353,0.707089900970459,0.560281217098236,-2.36170053540263e-05,0.828302443027496,0.70710676908493,4.12006875194493e-06,0.707106828689575,0.389725238084793,0.00056128780124709,0.920930981636047,0.560281038284302,2.81386310234666e-05,0.828302562236786,0.389976471662521,2.97883016173728e-05,0.920824825763702,0.200494661927223,0.000361664133379236,0.979694724082947,0.389725238084793,0.00056128780124709,0.920930981636047,0.389976471662521,2.97883016173728e-05,0.920824825763702,0.560281217098236,-2.36170053540263e-05,0.828302443027496,0.389976471662521,2.97883016173728e-05,0.920824825763702,0.560281038284302,2.81386310234666e-05,0.828302562236786,0.000179840237251483,0.000491874350700527,0.99999988079071,0.200494661927223,0.000361664133379236,0.979694724082947,0.200976371765137,6.33921263215598e-06,0.979596078395844,0.200494661927223,0.000361664133379236,0.979694724082947,0.389976471662521,2.97883016173728e-05,0.920824825763702,0.200976371765137,6.33921263215598e-06,0.979596078395844,0.000179840237251483,0.000491874350700527,0.99999988079071, +0.200976371765137,6.33921263215598e-06,0.979596078395844,1.16998680823599e-05,0.0011088578030467,0.999999403953552,0.707123696804047,0.00013534830941353,0.707089900970459,0.559988677501678,-0.000413992878748104,0.828500151634216,0.560281217098236,-2.36170053540263e-05,0.828302443027496,0.707193732261658,0.000340389116900042,0.707019686698914,0.559988677501678,-0.000413992878748104,0.828500151634216,0.707123696804047,0.00013534830941353,0.707089900970459,0.560281217098236,-2.36170053540263e-05,0.828302443027496,0.389976292848587,-2.95019453915302e-05,0.920824885368347,0.389976471662521,2.97883016173728e-05,0.920824825763702,0.389976292848587,-2.95019453915302e-05,0.920824885368347,0.200976371765137,6.33921263215598e-06,0.979596078395844,0.389976471662521,2.97883016173728e-05,0.920824825763702,0.559988677501678,-0.000413992878748104,0.828500151634216,0.389976292848587,-2.95019453915302e-05,0.920824885368347,0.560281217098236,-2.36170053540263e-05,0.828302443027496,0.200976297259331,-9.57784959609853e-06,0.979596078395844,1.16998680823599e-05,0.0011088578030467,0.999999403953552,0.200976371765137,6.33921263215598e-06,0.979596078395844,0.389976292848587,-2.95019453915302e-05,0.920824885368347,0.200976297259331,-9.57784959609853e-06,0.979596078395844,0.200976371765137,6.33921263215598e-06,0.979596078395844,0.200976297259331,-9.57784959609853e-06,0.979596078395844,-1.5218539374473e-05,-0.000969017739407718,0.999999523162842,1.16998680823599e-05,0.0011088578030467,0.999999403953552,0.707193732261658,0.000340389116900042,0.707019686698914,0.562155187129974,-0.00173044740222394,0.827029943466187,0.559988677501678,-0.000413992878748104,0.828500151634216,0.707512021064758,0.00104731635656208,0.706700563430786,0.562155187129974,-0.00173044740222394,0.827029943466187,0.707193732261658,0.000340389116900042,0.707019686698914,0.559988677501678,-0.000413992878748104,0.828500151634216,0.389714866876602,-0.000618191435933113,0.920935392379761,0.389976292848587,-2.95019453915302e-05,0.920824885368347,0.389714866876602,-0.000618191435933113,0.920935392379761, +0.200976297259331,-9.57784959609853e-06,0.979596078395844,0.389976292848587,-2.95019453915302e-05,0.920824885368347,0.562155187129974,-0.00173044740222394,0.827029943466187,0.389714866876602,-0.000618191435933113,0.920935392379761,0.559988677501678,-0.000413992878748104,0.828500151634216,0.200478255748749,-0.000445951038273051,0.979698061943054,-1.5218539374473e-05,-0.000969017739407718,0.999999523162842,0.200976297259331,-9.57784959609853e-06,0.979596078395844,0.389714866876602,-0.000618191435933113,0.920935392379761,0.200478255748749,-0.000445951038273051,0.979698061943054,0.200976297259331,-9.57784959609853e-06,0.979596078395844,0.200478255748749,-0.000445951038273051,0.979698061943054,7.92761275079101e-05,0.000217809720197693,1,-1.5218539374473e-05,-0.000969017739407718,0.999999523162842,0.707512021064758,0.00104731635656208,0.706700563430786,0.56827437877655,-0.00739105883985758,0.822805941104889,0.562155187129974,-0.00173044740222394,0.827029943466187,0.706269919872284,-0.00167072692420334,0.707940638065338,0.56827437877655,-0.00739105883985758,0.822805941104889,0.707512021064758,0.00104731635656208,0.706700563430786,0.706269919872284,-0.00167072692420334,0.707940638065338,0.604863941669464,-0.0121714323759079,0.796235799789429,0.56827437877655,-0.00739105883985758,0.822805941104889,0.562155187129974,-0.00173044740222394,0.827029943466187,0.393733531236649,-0.00224722968414426,0.919221878051758,0.389714866876602,-0.000618191435933113,0.920935392379761,0.393733531236649,-0.00224722968414426,0.919221878051758,0.200478255748749,-0.000445951038273051,0.979698061943054,0.389714866876602,-0.000618191435933113,0.920935392379761,0.56827437877655,-0.00739105883985758,0.822805941104889,0.393733531236649,-0.00224722968414426,0.919221878051758,0.562155187129974,-0.00173044740222394,0.827029943466187,0.203769281506538,-0.00128327100537717,0.979018092155457,7.92761275079101e-05,0.000217809720197693,1,0.200478255748749,-0.000445951038273051,0.979698061943054,0.393733531236649,-0.00224722968414426,0.919221878051758,0.203769281506538,-0.00128327100537717,0.979018092155457, +0.200478255748749,-0.000445951038273051,0.979698061943054,0.203769281506538,-0.00128327100537717,0.979018092155457,0.000508701079525054,0.00120480114128441,0.999999165534973,7.92761275079101e-05,0.000217809720197693,1,0.604863941669464,-0.0121714323759079,0.796235799789429,0.407931238412857,-0.00542705692350864,0.912996530532837,0.56827437877655,-0.00739105883985758,0.822805941104889,0.56827437877655,-0.00739105883985758,0.822805941104889,0.407931238412857,-0.00542705692350864,0.912996530532837,0.393733531236649,-0.00224722968414426,0.919221878051758,0.407931238412857,-0.00542705692350864,0.912996530532837,0.203769281506538,-0.00128327100537717,0.979018092155457,0.393733531236649,-0.00224722968414426,0.919221878051758,0.604863941669464,-0.0121714323759079,0.796235799789429,0.450742363929749,-0.00732088042423129,0.892624080181122,0.407931238412857,-0.00542705692350864,0.912996530532837,0.214875385165215,-0.0022312190849334,0.976638913154602,0.000508701079525054,0.00120480114128441,0.999999165534973,0.203769281506538,-0.00128327100537717,0.979018092155457,0.407931238412857,-0.00542705692350864,0.912996530532837,0.214875385165215,-0.0022312190849334,0.976638913154602,0.203769281506538,-0.00128327100537717,0.979018092155457,0.450742363929749,-0.00732088042423129,0.892624080181122,0.214875385165215,-0.0022312190849334,0.976638913154602,0.407931238412857,-0.00542705692350864,0.912996530532837,0.214875385165215,-0.0022312190849334,0.976638913154602,0.00164574570953846,0.00243726139888167,0.999995648860931,0.000508701079525054,0.00120480114128441,0.999999165534973,0.450742363929749,-0.00732088042423129,0.892624080181122,0.244300603866577,-0.00221683038398623,0.969696998596191,0.214875385165215,-0.0022312190849334,0.976638913154602,0.244300603866577,-0.00221683038398623,0.969696998596191,0.00164574570953846,0.00243726139888167,0.999995648860931,0.214875385165215,-0.0022312190849334,0.976638913154602,0.244300603866577,-0.00221683038398623,0.969696998596191,0.0050258357077837,0.00502583896741271,0.999974727630615,0.00164574570953846,0.00243726139888167,0.999995648860931, +0.79703414440155,0.0138799883425236,-0.603774726390839,0.706379771232605,-0.00145185436122119,-0.707831561565399,0.707512080669403,0.00104693509638309,-0.706700444221497,0.79703414440155,0.0138799883425236,-0.603774726390839,0.707512080669403,0.00104693509638309,-0.706700444221497,0.82212233543396,0.00525646144524217,-0.569286584854126,0.893711268901825,0.0100915348157287,-0.448529124259949,0.79703414440155,0.0138799883425236,-0.603774726390839,0.82212233543396,0.00525646144524217,-0.569286584854126,0.82212233543396,0.00525646144524217,-0.569286584854126,0.707512080669403,0.00104693509638309,-0.706700444221497,0.70719438791275,0.000340368569595739,-0.707019090652466,0.893711268901825,0.0100915348157287,-0.448529124259949,0.82212233543396,0.00525646144524217,-0.569286584854126,0.913011848926544,0.00548825273290277,-0.407896161079407,0.970871090888977,0.00732546951621771,-0.239490300416946,0.893711268901825,0.0100915348157287,-0.448529124259949,0.913011848926544,0.00548825273290277,-0.407896161079407,0.82212233543396,0.00525646144524217,-0.569286584854126,0.70719438791275,0.000340368569595739,-0.707019090652466,0.827025890350342,0.00171141745522618,-0.562161266803741,0.913011848926544,0.00548825273290277,-0.407896161079407,0.82212233543396,0.00525646144524217,-0.569286584854126,0.827025890350342,0.00171141745522618,-0.562161266803741,0.827025890350342,0.00171141745522618,-0.562161266803741,0.70719438791275,0.000340368569595739,-0.707019090652466,0.707124292850494,0.000135524096549489,-0.707089304924011,0.970871090888977,0.00732546951621771,-0.239490300416946,0.913011848926544,0.00548825273290277,-0.407896161079407,0.976820588111877,0.00353973777964711,-0.214030355215073,0.999989926815033,0.00317250075750053,0.00317249516956508,0.970871090888977,0.00732546951621771,-0.239490300416946,0.976820588111877,0.00353973777964711,-0.214030355215073,0.827025890350342,0.00171141745522618,-0.562161266803741,0.707124292850494,0.000135524096549489,-0.707089304924011,0.828508853912354,0.000499408750329167,-0.559975683689117,0.828508853912354,0.000499408750329167,-0.559975683689117, +0.707124292850494,0.000135524096549489,-0.707089304924011,0.707106947898865,4.11599103244953e-06,-0.707106649875641,0.913011848926544,0.00548825273290277,-0.407896161079407,0.827025890350342,0.00171141745522618,-0.562161266803741,0.919174492359161,0.00193782791029662,-0.393845766782761,0.976820588111877,0.00353973777964711,-0.214030355215073,0.913011848926544,0.00548825273290277,-0.407896161079407,0.919174492359161,0.00193782791029662,-0.393845766782761,0.919174492359161,0.00193782791029662,-0.393845766782761,0.827025890350342,0.00171141745522618,-0.562161266803741,0.828508853912354,0.000499408750329167,-0.559975683689117,0.999989926815033,0.00317250075750053,0.00317249516956508,0.976820588111877,0.00353973777964711,-0.214030355215073,0.999999582767487,0.000756634399294853,0.000510913203470409,0.969696998596191,-0.00221657403744757,0.244300782680511,0.999989926815033,0.00317250075750053,0.00317249516956508,0.999999582767487,0.000756634399294853,0.000510913203470409,0.828508853912354,0.000499408750329167,-0.559975683689117,0.707106947898865,4.11599103244953e-06,-0.707106649875641,0.828302383422852,2.8149212084827e-05,-0.560281336307526,0.70710688829422,4.11963856095099e-06,-0.707106649875641,0.828302383422852,2.8149212084827e-05,-0.560281336307526,0.707106947898865,4.11599103244953e-06,-0.707106649875641,0.919174492359161,0.00193782791029662,-0.393845766782761,0.828508853912354,0.000499408750329167,-0.559975683689117,0.920931160449982,0.00056122726527974,-0.389724940061569,0.920931160449982,0.00056122726527974,-0.389724940061569,0.828508853912354,0.000499408750329167,-0.559975683689117,0.828302383422852,2.8149212084827e-05,-0.560281336307526,0.976820588111877,0.00353973777964711,-0.214030355215073,0.919174492359161,0.00193782791029662,-0.393845766782761,0.97901713848114,0.00127041980158538,-0.203774109482765,0.999999582767487,0.000756634399294853,0.000510913203470409,0.976820588111877,0.00353973777964711,-0.214030355215073,0.97901713848114,0.00127041980158538,-0.203774109482765,0.97901713848114,0.00127041980158538,-0.203774109482765, +0.919174492359161,0.00193782791029662,-0.393845766782761,0.920931160449982,0.00056122726527974,-0.389724940061569,0.969696998596191,-0.00221657403744757,0.244300782680511,0.999999582767487,0.000756634399294853,0.000510913203470409,0.976639091968536,-0.00223135226406157,0.2148746997118,0.892624258995056,-0.00732118869200349,0.45074200630188,0.969696998596191,-0.00221657403744757,0.244300782680511,0.976639091968536,-0.00223135226406157,0.2148746997118,0.70710688829422,4.11963856095099e-06,-0.707106649875641,0.828302204608917,-2.36333544307854e-05,-0.560281574726105,0.828302383422852,2.8149212084827e-05,-0.560281336307526,0.707090020179749,0.000135164547828026,-0.707123517990112,0.828302204608917,-2.36333544307854e-05,-0.560281574726105,0.70710688829422,4.11963856095099e-06,-0.707106649875641,0.999999582767487,0.000756634399294853,0.000510913203470409,0.97901713848114,0.00127041980158538,-0.203774109482765,1,-7.67444726079702e-05,-3.24036736856215e-05,0.976639091968536,-0.00223135226406157,0.2148746997118,0.999999582767487,0.000756634399294853,0.000510913203470409,1,-7.67444726079702e-05,-3.24036736856215e-05,0.920931160449982,0.00056122726527974,-0.389724940061569,0.828302383422852,2.8149212084827e-05,-0.560281336307526,0.920825004577637,2.97936858260073e-05,-0.38997608423233,0.828302204608917,-2.36333544307854e-05,-0.560281574726105,0.920825004577637,2.97936858260073e-05,-0.38997608423233,0.828302383422852,2.8149212084827e-05,-0.560281336307526,0.97901713848114,0.00127041980158538,-0.203774109482765,0.920931160449982,0.00056122726527974,-0.389724940061569,0.979694783687592,0.000361888232873753,-0.200494393706322,1,-7.67444726079702e-05,-3.24036736856215e-05,0.97901713848114,0.00127041980158538,-0.203774109482765,0.979694783687592,0.000361888232873753,-0.200494393706322,0.979694783687592,0.000361888232873753,-0.200494393706322,0.920931160449982,0.00056122726527974,-0.389724940061569,0.920825004577637,2.97936858260073e-05,-0.38997608423233,0.892624258995056,-0.00732118869200349,0.45074200630188,0.976639091968536,-0.00223135226406157,0.2148746997118, +0.912996470928192,-0.00542676728218794,0.407931387424469,0.796235322952271,-0.0121713858097792,0.604864597320557,0.892624258995056,-0.00732118869200349,0.45074200630188,0.912996470928192,-0.00542676728218794,0.407931387424469,0.707090020179749,0.000135164547828026,-0.707123517990112,0.828500092029572,-0.000414017966249958,-0.559988796710968,0.828302204608917,-2.36333544307854e-05,-0.560281574726105,0.707019746303558,0.000340344529831782,-0.707193732261658,0.828500092029572,-0.000414017966249958,-0.559988796710968,0.707090020179749,0.000135164547828026,-0.707123517990112,0.976639091968536,-0.00223135226406157,0.2148746997118,1,-7.67444726079702e-05,-3.24036736856215e-05,0.979018151760101,-0.00128346402198076,0.203768894076347,0.912996470928192,-0.00542676728218794,0.407931387424469,0.976639091968536,-0.00223135226406157,0.2148746997118,0.979018151760101,-0.00128346402198076,0.203768894076347,1,-7.67444726079702e-05,-3.24036736856215e-05,0.979694783687592,0.000361888232873753,-0.200494393706322,1,-0.000153742352267727,-3.13832279061899e-05,0.979018151760101,-0.00128346402198076,0.203768894076347,1,-7.67444726079702e-05,-3.24036736856215e-05,1,-0.000153742352267727,-3.13832279061899e-05,0.979694783687592,0.000361888232873753,-0.200494393706322,0.920825004577637,2.97936858260073e-05,-0.38997608423233,0.979596197605133,6.34309026281699e-06,-0.200975775718689,1,-0.000153742352267727,-3.13832279061899e-05,0.979694783687592,0.000361888232873753,-0.200494393706322,0.979596197605133,6.34309026281699e-06,-0.200975775718689,0.828302204608917,-2.36333544307854e-05,-0.560281574726105,0.920825004577637,-2.97819060506299e-05,-0.38997608423233,0.920825004577637,2.97936858260073e-05,-0.38997608423233,0.828500092029572,-0.000414017966249958,-0.559988796710968,0.920825004577637,-2.97819060506299e-05,-0.38997608423233,0.828302204608917,-2.36333544307854e-05,-0.560281574726105,0.920825004577637,-2.97819060506299e-05,-0.38997608423233,0.979596197605133,6.34309026281699e-06,-0.200975775718689,0.920825004577637,2.97936858260073e-05,-0.38997608423233, +0.796235322952271,-0.0121713858097792,0.604864597320557,0.912996470928192,-0.00542676728218794,0.407931387424469,0.822805285453796,-0.00739087490364909,0.568275332450867,0.707940578460693,-0.00167053542099893,0.706269979476929,0.796235322952271,-0.0121713858097792,0.604864597320557,0.822805285453796,-0.00739087490364909,0.568275332450867,0.707940578460693,-0.00167053542099893,0.706269979476929,0.822805285453796,-0.00739087490364909,0.568275332450867,0.706700503826141,0.00104688724968582,0.707512080669403,0.912996470928192,-0.00542676728218794,0.407931387424469,0.979018151760101,-0.00128346402198076,0.203768894076347,0.919221818447113,-0.00224699778482318,0.393733710050583,0.822805285453796,-0.00739087490364909,0.568275332450867,0.912996470928192,-0.00542676728218794,0.407931387424469,0.919221818447113,-0.00224699778482318,0.393733710050583,0.706700503826141,0.00104688724968582,0.707512080669403,0.822805285453796,-0.00739087490364909,0.568275332450867,0.827029824256897,-0.0017306775553152,0.562155425548553,0.822805285453796,-0.00739087490364909,0.568275332450867,0.919221818447113,-0.00224699778482318,0.393733710050583,0.827029824256897,-0.0017306775553152,0.562155425548553,0.706700503826141,0.00104688724968582,0.707512080669403,0.827029824256897,-0.0017306775553152,0.562155425548553,0.707019209861755,0.000340318598318845,0.707194268703461,0.979018151760101,-0.00128346402198076,0.203768894076347,1,-0.000153742352267727,-3.13832279061899e-05,0.979698121547699,-0.000446370715508237,0.20047789812088,0.919221818447113,-0.00224699778482318,0.393733710050583,0.979018151760101,-0.00128346402198076,0.203768894076347,0.979698121547699,-0.000446370715508237,0.20047789812088,1,-0.000153742352267727,-3.13832279061899e-05,0.979596197605133,6.34309026281699e-06,-0.200975775718689,1,-6.64328263155767e-06,-3.37426797614171e-07,0.979698121547699,-0.000446370715508237,0.20047789812088,1,-0.000153742352267727,-3.13832279061899e-05,1,-6.64328263155767e-06,-3.37426797614171e-07,0.920825004577637,-2.97819060506299e-05,-0.38997608423233,0.979596257209778,-9.57980682869675e-06,-0.200975686311722, +0.979596197605133,6.34309026281699e-06,-0.200975775718689,0.979596257209778,-9.57980682869675e-06,-0.200975686311722,1,-6.64328263155767e-06,-3.37426797614171e-07,0.979596197605133,6.34309026281699e-06,-0.200975775718689,0.707019209861755,0.000340318598318845,0.707194268703461,0.827029824256897,-0.0017306775553152,0.562155425548553,0.828500092029572,-0.000414375652326271,0.559988796710968,0.707019209861755,0.000340318598318845,0.707194268703461,0.828500092029572,-0.000414375652326271,0.559988796710968,0.707089364528656,0.000135733251227066,0.707124173641205,0.827029824256897,-0.0017306775553152,0.562155425548553,0.919221818447113,-0.00224699778482318,0.393733710050583,0.920935273170471,-0.000618145742919296,0.389715075492859,0.919221818447113,-0.00224699778482318,0.393733710050583,0.979698121547699,-0.000446370715508237,0.20047789812088,0.920935273170471,-0.000618145742919296,0.389715075492859,0.827029824256897,-0.0017306775553152,0.562155425548553,0.920935273170471,-0.000618145742919296,0.389715075492859,0.828500092029572,-0.000414375652326271,0.559988796710968,0.979698121547699,-0.000446370715508237,0.20047789812088,1,-6.64328263155767e-06,-3.37426797614171e-07,0.979596197605133,-9.58282726060133e-06,0.200975745916367,0.920935273170471,-0.000618145742919296,0.389715075492859,0.979698121547699,-0.000446370715508237,0.20047789812088,0.979596197605133,-9.58282726060133e-06,0.200975745916367,0.707089364528656,0.000135733251227066,0.707124173641205,0.828500092029572,-0.000414375652326271,0.559988796710968,0.828302204608917,-2.36207761190599e-05,0.560281574726105,0.707089364528656,0.000135733251227066,0.707124173641205,0.828302204608917,-2.36207761190599e-05,0.560281574726105,0.707106471061707,4.73985255666776e-06,0.707107067108154,0.828500092029572,-0.000414375652326271,0.559988796710968,0.920935273170471,-0.000618145742919296,0.389715075492859,0.920824944972992,-3.0100398362265e-05,0.389976173639297,0.920935273170471,-0.000618145742919296,0.389715075492859,0.979596197605133,-9.58282726060133e-06,0.200975745916367,0.920824944972992,-3.0100398362265e-05,0.389976173639297, +0.828500092029572,-0.000414375652326271,0.559988796710968,0.920824944972992,-3.0100398362265e-05,0.389976173639297,0.828302204608917,-2.36207761190599e-05,0.560281574726105,1,-6.36542335996637e-06,3.23314878869496e-07,0.979596197605133,-9.58282726060133e-06,0.200975745916367,1,-6.64328263155767e-06,-3.37426797614171e-07,0.979596257209778,-9.57980682869675e-06,-0.200975686311722,1,-6.36542335996637e-06,3.23314878869496e-07,1,-6.64328263155767e-06,-3.37426797614171e-07,0.920935332775116,-0.000618075137026608,-0.389714896678925,0.979596257209778,-9.57980682869675e-06,-0.200975686311722,0.920825004577637,-2.97819060506299e-05,-0.38997608423233,0.828500092029572,-0.000414017966249958,-0.559988796710968,0.920935332775116,-0.000618075137026608,-0.389714896678925,0.920825004577637,-2.97819060506299e-05,-0.38997608423233,0.828302264213562,2.81908651231788e-05,0.56028151512146,0.707106471061707,4.73985255666776e-06,0.707107067108154,0.828302204608917,-2.36207761190599e-05,0.560281574726105,0.828302264213562,2.81908651231788e-05,0.56028151512146,0.70710676908493,4.12006875194493e-06,0.707106828689575,0.707106471061707,4.73985255666776e-06,0.707107067108154,0.979596197605133,6.35242622593069e-06,0.200975835323334,0.920824944972992,-3.0100398362265e-05,0.389976173639297,0.979596197605133,-9.58282726060133e-06,0.200975745916367,1,-6.36542335996637e-06,3.23314878869496e-07,0.979596197605133,6.35242622593069e-06,0.200975835323334,0.979596197605133,-9.58282726060133e-06,0.200975745916367,0.920825004577637,2.97389196930453e-05,0.38997608423233,0.828302204608917,-2.36207761190599e-05,0.560281574726105,0.920824944972992,-3.0100398362265e-05,0.389976173639297,0.920825004577637,2.97389196930453e-05,0.38997608423233,0.828302264213562,2.81908651231788e-05,0.56028151512146,0.828302204608917,-2.36207761190599e-05,0.560281574726105,0.979596197605133,6.35242622593069e-06,0.200975835323334,0.920825004577637,2.97389196930453e-05,0.38997608423233,0.920824944972992,-3.0100398362265e-05,0.389976173639297,0.979698121547699,-0.000446069694589823,-0.200477868318558, +1,-6.36542335996637e-06,3.23314878869496e-07,0.979596257209778,-9.57980682869675e-06,-0.200975686311722,0.920935332775116,-0.000618075137026608,-0.389714896678925,0.979698121547699,-0.000446069694589823,-0.200477868318558,0.979596257209778,-9.57980682869675e-06,-0.200975686311722,0.827029824256897,-0.00173042214009911,-0.562155425548553,0.920935332775116,-0.000618075137026608,-0.389714896678925,0.828500092029572,-0.000414017966249958,-0.559988796710968,0.707019746303558,0.000340344529831782,-0.707193732261658,0.827029824256897,-0.00173042214009911,-0.562155425548553,0.828500092029572,-0.000414017966249958,-0.559988796710968,0.706700623035431,0.00104752520564944,-0.707511961460114,0.827029824256897,-0.00173042214009911,-0.562155425548553,0.707019746303558,0.000340344529831782,-0.707193732261658,0.828508734703064,0.000499435351230204,0.559975862503052,0.70710676908493,4.12006875194493e-06,0.707106828689575,0.828302264213562,2.81908651231788e-05,0.56028151512146,0.828508734703064,0.000499435351230204,0.559975862503052,0.707123696804047,0.00013534830941353,0.707089900970459,0.70710676908493,4.12006875194493e-06,0.707106828689575,1,-0.000153729008161463,3.13805212499574e-05,0.979596197605133,6.35242622593069e-06,0.200975835323334,1,-6.36542335996637e-06,3.23314878869496e-07,0.979698121547699,-0.000446069694589823,-0.200477868318558,1,-0.000153729008161463,3.13805212499574e-05,1,-6.36542335996637e-06,3.23314878869496e-07,0.920931220054626,0.000561299850232899,0.38972482085228,0.828302264213562,2.81908651231788e-05,0.56028151512146,0.920825004577637,2.97389196930453e-05,0.38997608423233,0.920931220054626,0.000561299850232899,0.38972482085228,0.828508734703064,0.000499435351230204,0.559975862503052,0.828302264213562,2.81908651231788e-05,0.56028151512146,0.979694783687592,0.000361671060090885,0.200494468212128,0.920825004577637,2.97389196930453e-05,0.38997608423233,0.979596197605133,6.35242622593069e-06,0.200975835323334,1,-0.000153729008161463,3.13805212499574e-05,0.979694783687592,0.000361671060090885,0.200494468212128,0.979596197605133,6.35242622593069e-06,0.200975835323334, +0.979694783687592,0.000361671060090885,0.200494468212128,0.920931220054626,0.000561299850232899,0.38972482085228,0.920825004577637,2.97389196930453e-05,0.38997608423233,0.827029824256897,-0.00173042214009911,-0.562155425548553,0.919221878051758,-0.00224739592522383,-0.393733471632004,0.920935332775116,-0.000618075137026608,-0.389714896678925,0.919221878051758,-0.00224739592522383,-0.393733471632004,0.979698121547699,-0.000446069694589823,-0.200477868318558,0.920935332775116,-0.000618075137026608,-0.389714896678925,0.706700623035431,0.00104752520564944,-0.707511961460114,0.822805643081665,-0.00739078363403678,-0.568274855613708,0.827029824256897,-0.00173042214009911,-0.562155425548553,0.822805643081665,-0.00739078363403678,-0.568274855613708,0.919221878051758,-0.00224739592522383,-0.393733471632004,0.827029824256897,-0.00173042214009911,-0.562155425548553,0.707831621170044,-0.00145219243131578,-0.706379652023315,0.822805643081665,-0.00739078363403678,-0.568274855613708,0.706700623035431,0.00104752520564944,-0.707511961460114,0.707831621170044,-0.00145219243131578,-0.706379652023315,0.797433733940125,-0.0147378044202924,-0.603226482868195,0.822805643081665,-0.00739078363403678,-0.568274855613708,0.797433733940125,-0.0147378044202924,-0.603226482868195,0.912996351718903,-0.00542680965736508,-0.407931625843048,0.822805643081665,-0.00739078363403678,-0.568274855613708,0.822805643081665,-0.00739078363403678,-0.568274855613708,0.912996351718903,-0.00542680965736508,-0.407931625843048,0.919221878051758,-0.00224739592522383,-0.393733471632004,0.797433733940125,-0.0147378044202924,-0.603226482868195,0.893258094787598,-0.00893361121416092,-0.449455350637436,0.912996351718903,-0.00542680965736508,-0.407931625843048,0.919221878051758,-0.00224739592522383,-0.393733471632004,0.979018151760101,-0.00128330232109874,-0.203768908977509,0.979698121547699,-0.000446069694589823,-0.200477868318558,0.979018151760101,-0.00128330232109874,-0.203768908977509,1,-0.000153729008161463,3.13805212499574e-05,0.979698121547699,-0.000446069694589823,-0.200477868318558, +0.912996351718903,-0.00542680965736508,-0.407931625843048,0.979018151760101,-0.00128330232109874,-0.203768908977509,0.919221878051758,-0.00224739592522383,-0.393733471632004,0.893258094787598,-0.00893361121416092,-0.449455350637436,0.976639032363892,-0.00223126052878797,-0.214875027537346,0.912996351718903,-0.00542680965736508,-0.407931625843048,0.912996351718903,-0.00542680965736508,-0.407931625843048,0.976639032363892,-0.00223126052878797,-0.214875027537346,0.979018151760101,-0.00128330232109874,-0.203768908977509,0.893258094787598,-0.00893361121416092,-0.449455350637436,0.970496952533722,-0.00567426206544042,-0.241046532988548,0.976639032363892,-0.00223126052878797,-0.214875027537346,0.979018151760101,-0.00128330232109874,-0.203768908977509,1,-7.68385289120488e-05,3.24433931382373e-05,1,-0.000153729008161463,3.13805212499574e-05,0.976639032363892,-0.00223126052878797,-0.214875027537346,1,-7.68385289120488e-05,3.24433931382373e-05,0.979018151760101,-0.00128330232109874,-0.203768908977509,1,-7.68385289120488e-05,3.24433931382373e-05,0.979694783687592,0.000361671060090885,0.200494468212128,1,-0.000153729008161463,3.13805212499574e-05,0.970496952533722,-0.00567426206544042,-0.241046532988548,0.999999582767487,0.000756408553570509,-0.00051076035015285,0.976639032363892,-0.00223126052878797,-0.214875027537346,0.976639032363892,-0.00223126052878797,-0.214875027537346,0.999999582767487,0.000756408553570509,-0.00051076035015285,1,-7.68385289120488e-05,3.24433931382373e-05,0.970496952533722,-0.00567426206544042,-0.241046532988548,0.999997437000275,-0.00159974186681211,0.00159974151756614,0.999999582767487,0.000756408553570509,-0.00051076035015285,1,-7.68385289120488e-05,3.24433931382373e-05,0.97901713848114,0.00127074762713164,0.203774034976959,0.979694783687592,0.000361671060090885,0.200494468212128,0.999999582767487,0.000756408553570509,-0.00051076035015285,0.97901713848114,0.00127074762713164,0.203774034976959,1,-7.68385289120488e-05,3.24433931382373e-05,0.97901713848114,0.00127074762713164,0.203774034976959,0.920931220054626,0.000561299850232899,0.38972482085228, +0.979694783687592,0.000361671060090885,0.200494468212128,0.999997437000275,-0.00159974186681211,0.00159974151756614,0.976820588111877,0.00354004907421768,0.214030295610428,0.999999582767487,0.000756408553570509,-0.00051076035015285,0.999999582767487,0.000756408553570509,-0.00051076035015285,0.976820588111877,0.00354004907421768,0.214030295610428,0.97901713848114,0.00127074762713164,0.203774034976959,0.999997437000275,-0.00159974186681211,0.00159974151756614,0.970087349414825,0.00389131112024188,0.242724940180779,0.976820588111877,0.00354004907421768,0.214030295610428,0.97901713848114,0.00127074762713164,0.203774034976959,0.919174551963806,0.00193802488502115,0.393845677375793,0.920931220054626,0.000561299850232899,0.38972482085228,0.976820588111877,0.00354004907421768,0.214030295610428,0.919174551963806,0.00193802488502115,0.393845677375793,0.97901713848114,0.00127074762713164,0.203774034976959,0.919174551963806,0.00193802488502115,0.393845677375793,0.828508734703064,0.000499435351230204,0.559975862503052,0.920931220054626,0.000561299850232899,0.38972482085228,0.970087349414825,0.00389131112024188,0.242724940180779,0.913011610507965,0.005487778224051,0.40789669752121,0.976820588111877,0.00354004907421768,0.214030295610428,0.976820588111877,0.00354004907421768,0.214030295610428,0.913011610507965,0.005487778224051,0.40789669752121,0.919174551963806,0.00193802488502115,0.393845677375793,0.970087349414825,0.00389131112024188,0.242724940180779,0.893087446689606,0.00849822722375393,0.449802875518799,0.913011610507965,0.005487778224051,0.40789669752121,0.919174551963806,0.00193802488502115,0.393845677375793,0.827025711536407,0.0017107444582507,0.562161505222321,0.828508734703064,0.000499435351230204,0.559975862503052,0.913011610507965,0.005487778224051,0.40789669752121,0.827025711536407,0.0017107444582507,0.562161505222321,0.919174551963806,0.00193802488502115,0.393845677375793,0.827025711536407,0.0017107444582507,0.562161505222321,0.707123696804047,0.00013534830941353,0.707089900970459,0.828508734703064,0.000499435351230204,0.559975862503052, +0.827025711536407,0.0017107444582507,0.562161505222321,0.707193732261658,0.000340389116900042,0.707019686698914,0.707123696804047,0.00013534830941353,0.707089900970459,0.893087446689606,0.00849822722375393,0.449802875518799,0.822122275829315,0.00525613501667976,0.569286704063416,0.913011610507965,0.005487778224051,0.40789669752121,0.913011610507965,0.005487778224051,0.40789669752121,0.822122275829315,0.00525613501667976,0.569286704063416,0.827025711536407,0.0017107444582507,0.562161505222321,0.822122275829315,0.00525613501667976,0.569286704063416,0.707193732261658,0.000340389116900042,0.707019686698914,0.827025711536407,0.0017107444582507,0.562161505222321,0.893087446689606,0.00849822722375393,0.449802875518799,0.795816600322723,0.011278779245913,0.605432629585266,0.822122275829315,0.00525613501667976,0.569286704063416,0.822122275829315,0.00525613501667976,0.569286704063416,0.707512021064758,0.00104731635656208,0.706700563430786,0.707193732261658,0.000340389116900042,0.707019686698914,0.795816600322723,0.011278779245913,0.605432629585266,0.707512021064758,0.00104731635656208,0.706700563430786,0.822122275829315,0.00525613501667976,0.569286704063416,0.795816600322723,0.011278779245913,0.605432629585266,0.706269919872284,-0.00167072692420334,0.707940638065338,0.707512021064758,0.00104731635656208,0.706700563430786 + } + TangentsW: *2496 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "UVSet0" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *1100 { + a: 0.374741494655609,0.111606359481812,0.625289678573608,0.111606359481812,0.124193221330643,0.111606299877167,0.875837981700897,0.111606299877167,0.374741435050964,0.888393759727478,0.625289738178253,0.888393759727478,0.124193221330643,0.888393759727478,0.875837981700897,0.888393759727478,0.2479447722435,0.00115928053855896,0.244519531726837,0.998370289802551,0.500015616416931,0.746335566043854,0.750563859939575,0.746335566043854,-0.00108087062835693,0.746335566043854,0.249467372894287,0.746335566043854,0.249467313289642,0.079679399728775,-0.00108087062835693,0.079679399728775,0.750563859939575,0.079679399728775,0.500015556812286,0.079679399728775,0.500015556812286,0.920320630073547,0.750563859939575,0.920320630073547,0.998923242092133,0.920320630073547,0.249467313289642,0.920320630073547,0.625289738178253,0.746335566043854,0.374741435050964,0.746335566043854,0.875837981700897,0.746335566043854,0.124193221330643,0.746335566043854,0.3548863530159,0.10120502114296,0.325131833553314,0.0901255309581757,0.289112031459808,0.0824152529239655,0.144048303365707,0.101205080747604,0.173802852630615,0.0901255309581757,0.209822595119476,0.0824152529239655,0.104338139295578,0.10120502114296,0.0745836198329926,0.0901255309581757,0.0385638475418091,0.0824152529239655,0.895693123340607,0.10120502114296,0.925447523593903,0.0901255309581757,0.961467385292053,0.0824152529239655,0.855982959270477,0.101205080747604,0.826228380203247,0.0901255309581757,0.790208637714386,0.0824152529239655,0.645144820213318,0.10120502114296,0.674899339675903,0.0901255309581757,0.710919201374054,0.0824152529239655,0.605434656143188,0.10120502114296,0.575680136680603,0.0901255309581757,0.539660274982452,0.0824152529239655,0.394596517086029,0.10120502114296,0.424351036548615,0.0901255309581757,0.460370868444443,0.0824152529239655,0.394596517086029,0.898795008659363,0.424351036548615,0.909874439239502,0.460370868444443,0.917584896087646,0.605434656143188,0.898795008659363,0.575680136680603,0.909874439239502,0.539660274982452,0.917584896087646, +0.645144820213318,0.898795008659363,0.674899339675903,0.909874439239502,0.710919201374054,0.917584896087646,0.855982959270477,0.898795008659363,0.826228380203247,0.909874439239502,0.790208637714386,0.917584896087646,0.895693123340607,0.898795008659363,0.925447523593903,0.909874439239502,0.961467385292053,0.917584896087646,0.104338139295578,0.898795008659363,0.0745836198329926,0.909874439239502,0.0385638475418091,0.917584896087646,0.144048303365707,0.898795008659363,0.173802852630615,0.909874439239502,0.209822654724121,0.917584896087646,0.3548863530159,0.898795008659363,0.325131833553314,0.909874439239502,0.289112091064453,0.917584896087646,0.625289738178253,0.135115534067154,0.625289738178253,0.169690370559692,0.625289738178253,0.210201740264893,0.625289738178253,0.864884495735168,0.625289738178253,0.830309629440308,0.625289738178253,0.789798319339752,0.374741435050964,0.864884495735168,0.374741435050964,0.830309629440308,0.374741464853287,0.789798319339752,0.374741464853287,0.135115534067154,0.374741435050964,0.169690370559692,0.374741435050964,0.210201740264893,0.875837981700897,0.135115534067154,0.875837981700897,0.169690370559692,0.875837981700897,0.210201740264893,0.875837981700897,0.864884495735168,0.875837981700897,0.830309629440308,0.875837981700897,0.789798319339752,0.124193221330643,0.135115534067154,0.124193221330643,0.169690370559692,0.124193221330643,0.210201740264893,0.124193221330643,0.864884495735168,0.124193221330643,0.830309629440308,0.124193221330643,0.789798319339752,0.249467313289642,0.0501402914524078,0.249467253684998,0.0273435413837433,0.249467194080353,0.0126940906047821,-0.00108087062835693,0.0501402318477631,-0.00108081102371216,0.0273435413837433,-0.00108081102371216,0.0126940906047821,0.75056391954422,0.0501402914524078,0.750563979148865,0.0273435413837433,0.750563263893127,0.0127000212669373,0.500015556812286,0.0501402318477631,0.500015556812286,0.0273435413837433,0.500015497207642,0.0126940906047821,0.500015556812286,0.949859619140625,0.500015556812286,0.972656488418579,0.499486982822418, +0.987864971160889,0.750563859939575,0.949859619140625,0.749765813350677,0.972746431827545,0.745959520339966,0.987682044506073,0.998923242092133,0.949859619140625,0.998923242092133,0.972656488418579,0.998923242092133,0.987305998802185,0.249467313289642,0.949859619140625,0.249467313289642,0.972656488418579,0.249467313289642,0.987305998802185,0.500015556812286,0.115391045808792,0.500015556812286,0.157122105360031,0.500015616416931,0.203916639089584,0.595201730728149,0.746335566043854,0.564327955245972,0.746335566043854,0.532488644123077,0.746335566043854,0.500015556812286,0.884609043598175,0.500015556812286,0.842877864837646,0.500015616416931,0.796083390712738,0.404829442501068,0.746335566043854,0.435703217983246,0.746335566043854,0.46754252910614,0.746335566043854,0.750563859939575,0.115391045808792,0.750563859939575,0.157122135162354,0.750563859939575,0.203916668891907,0.845749974250793,0.746335566043854,0.814876198768616,0.746335566043854,0.783036947250366,0.746335566043854,0.750563859939575,0.884609043598175,0.750563859939575,0.842877864837646,0.750563859939575,0.796083390712738,0.655377745628357,0.746335566043854,0.686251521110535,0.746335566043854,0.718090772628784,0.746335566043854,0.998923242092133,0.115390926599503,0.998923242092133,0.157122105360031,0.998923242092133,0.203916639089584,0.0941052734851837,0.746335566043854,0.0632314682006836,0.746335566043854,0.0313922464847565,0.746335566043854,-0.00108087062835693,0.884609043598175,-0.00108087062835693,0.842877864837646,-0.00108087062835693,0.796083569526672,0.905925989151001,0.746335566043854,0.936799764633179,0.746335566043854,0.968639016151428,0.746335566043854,0.249467313289642,0.115391045808792,0.249467313289642,0.157122135162354,0.249467313289642,0.203916668891907,0.34465354681015,0.746335566043854,0.313779681921005,0.746335566043854,0.281940460205078,0.746335566043854,0.249467372894287,0.884609043598175,0.249467372894287,0.842877864837646,0.249467372894287,0.796083390712738,0.154281198978424,0.746335566043854,0.185155004262924,0.746335566043854,0.216994285583496, +0.746335566043854,0.374741464853287,0.0791500210762024,0.342867434024811,0.0635286867618561,0.299942255020142,0.0534879267215729,0.406615436077118,0.0635286867618561,0.374741435050964,0.0437659025192261,0.322426021099091,0.0314351320266724,0.449540615081787,0.0534879267215729,0.427056849002838,0.0314351916313171,0.374741405248642,0.0174643099308014,0.124193251132965,0.0791500210762024,0.0923192799091339,0.0635286271572113,0.0493941009044647,0.0534879267215729,0.156067252159119,0.0635286867618561,0.12419319152832,0.0437657535076141,0.0718778371810913,0.0314351916313171,0.198992371559143,0.0534879565238953,0.176508575677872,0.0314351320266724,0.130742937326431,0.0171759128570557,0.875837981700897,0.0791500210762024,0.843964099884033,0.0635286867618561,0.801038861274719,0.0534879565238953,0.907711982727051,0.0635286271572113,0.875838041305542,0.0437657535076141,0.823522686958313,0.0314351320266724,0.95063716173172,0.0534879267215729,0.928153455257416,0.0314351916313171,0.875838100910187,0.0174643695354462,0.625289678573608,0.0791500210762024,0.5934157371521,0.0635286867618561,0.55049055814743,0.0534879267215729,0.657163739204407,0.0635286867618561,0.625289738178253,0.0437659025192261,0.572974264621735,0.0314351916313171,0.700088858604431,0.0534879267215729,0.677605152130127,0.0314351320266724,0.625289738178253,0.0174643099308014,0.374741435050964,0.920850038528442,0.406615436077118,0.936471462249756,0.449540615081787,0.94651210308075,0.342867493629456,0.936471462249756,0.374741464853287,0.956234216690063,0.427056878805161,0.968564867973328,0.299942255020142,0.94651210308075,0.322426021099091,0.968564927577972,0.374741435050964,0.982535719871521,0.625289738178253,0.920850038528442,0.657163739204407,0.936471462249756,0.700088798999786,0.94651210308075,0.5934157371521,0.936471462249756,0.625289678573608,0.956234216690063,0.677609860897064,0.968563377857208,0.550490617752075,0.94651210308075,0.573009490966797,0.968498051166534,0.62483549118042,0.983277797698975,0.875837981700897,0.920850038528442,0.907711982727051,0.936471462249756, +0.95063716173172,0.94651210308075,0.843964099884033,0.936471462249756,0.875837981700897,0.956234216690063,0.928153395652771,0.968564927577972,0.801038861274719,0.94651210308075,0.823522567749023,0.968564867973328,0.869235754013062,0.982580184936523,0.124193221330643,0.920850038528442,0.156067222356796,0.936471462249756,0.198992431163788,0.94651210308075,0.0923192501068115,0.936471462249756,0.124193221330643,0.956234216690063,0.176546424627304,0.968569576740265,0.0493941009044647,0.94651210308075,0.0718778371810913,0.968564927577972,0.124193251132965,0.982535719871521,0.40230193734169,0.131013959646225,0.432045429944992,0.123510152101517,0.465105891227722,0.117692053318024,0.404270082712173,0.167352259159088,0.43490207195282,0.162878543138504,0.467015624046326,0.158901780843735,0.404843986034393,0.209139764308929,0.43572410941124,0.207019776105881,0.467557638883591,0.204924762248993,0.597729206085205,0.131013959646225,0.595761001110077,0.167352259159088,0.595187187194824,0.209139764308929,0.567985713481903,0.123510152101517,0.565129101276398,0.162878543138504,0.5643070936203,0.207019776105881,0.534925282001495,0.117692053318024,0.533015549182892,0.158901780843735,0.532473564147949,0.204924762248993,0.59772926568985,0.868986129760742,0.567985713481903,0.87648993730545,0.534925282001495,0.882308006286621,0.595761001110077,0.832647919654846,0.565129101276398,0.837121486663818,0.533015549182892,0.841098248958588,0.595187187194824,0.790860235691071,0.5643070936203,0.792980313301086,0.532473564147949,0.795075297355652,0.402301907539368,0.868986129760742,0.404270082712173,0.832647919654846,0.404843986034393,0.790860235691071,0.432045429944992,0.87648993730545,0.43490207195282,0.837121486663818,0.43572410941124,0.792980313301086,0.465105891227722,0.882308006286621,0.467015624046326,0.841098248958588,0.467557638883591,0.795075297355652,0.652850151062012,0.13101390004158,0.682593703269958,0.123510122299194,0.715654194355011,0.117692053318024,0.654818296432495,0.167352259159088,0.685450375080109,0.162878543138504,0.717563927173615, +0.158901810646057,0.655392229557037,0.209139764308929,0.686272382736206,0.207019746303558,0.718105852603912,0.204924792051315,0.848277568817139,0.131013959646225,0.846309423446655,0.167352259159088,0.845735430717468,0.209139764308929,0.818534016609192,0.123510122299194,0.815677404403687,0.162878543138504,0.814855456352234,0.207019776105881,0.785473644733429,0.117692083120346,0.783563852310181,0.158901780843735,0.783021807670593,0.204924792051315,0.848277568817139,0.868986129760742,0.818534016609192,0.87648993730545,0.785473525524139,0.882308006286621,0.846309423446655,0.832647919654846,0.815677404403687,0.837121486663818,0.783563852310181,0.841098248958588,0.845735430717468,0.790860295295715,0.814855337142944,0.792980313301086,0.783021807670593,0.795075297355652,0.652850151062012,0.868986129760742,0.654818296432495,0.832647919654846,0.655392229557037,0.790860235691071,0.682593703269958,0.87648993730545,0.685450315475464,0.837121486663818,0.686272382736206,0.792980313301086,0.715654194355011,0.882307946681976,0.717563927173615,0.841098248958588,0.718105852603912,0.795075297355652,0.903398513793945,0.131013959646225,0.933141946792603,0.123510122299194,0.96620237827301,0.117692053318024,0.905366539955139,0.167352259159088,0.935998618602753,0.162878543138504,0.968112111091614,0.158901780843735,0.905940473079681,0.209139764308929,0.93682062625885,0.207019746303558,0.968654096126556,0.204924762248993,0.0966327786445618,0.131013959646225,0.0946646332740784,0.167352259159088,0.0940907299518585,0.209139764308929,0.0668892860412598,0.123510122299194,0.0640326142311096,0.162878543138504,0.0632105767726898,0.207019746303558,0.0338288247585297,0.117692053318024,0.0319191217422485,0.158901780843735,0.0313771367073059,0.204924762248993,0.0966327488422394,0.868986129760742,0.0668892860412598,0.876489877700806,0.0338288247585297,0.882308006286621,0.0946646332740784,0.832647919654846,0.0640326142311096,0.837121486663818,0.0319191217422485,0.841098248958588,0.0940907299518585,0.790860295295715,0.0632105767726898,0.792980313301086,0.0313771367073059, +0.795075297355652,0.903398513793945,0.868986129760742,0.905366539955139,0.832647919654846,0.905940473079681,0.790860295295715,0.933141946792603,0.876489877700806,0.935998618602753,0.837121486663818,0.93682062625885,0.792980313301086,0.96620237827301,0.882308006286621,0.968112111091614,0.841098248958588,0.968654096126556,0.795075297355652,0.151753693819046,0.131013959646225,0.181497246026993,0.123510122299194,0.214557617902756,0.117692083120346,0.153721898794174,0.167352259159088,0.184353798627853,0.162878543138504,0.216467320919037,0.158901780843735,0.154295712709427,0.209139764308929,0.185175836086273,0.207019776105881,0.217009365558624,0.204924792051315,0.347180992364883,0.131013959646225,0.3452128469944,0.167352259159088,0.344639003276825,0.209139764308929,0.317437499761581,0.123510122299194,0.314580857753754,0.162878543138504,0.313758850097656,0.207019746303558,0.284377038478851,0.117692053318024,0.282467305660248,0.158901810646057,0.281925320625305,0.204924792051315,0.347180992364883,0.868986129760742,0.317437499761581,0.87648993730545,0.284377038478851,0.882308006286621,0.345212817192078,0.832647919654846,0.314580857753754,0.837121486663818,0.282467305660248,0.841098248958588,0.344639003276825,0.790860235691071,0.313758850097656,0.792980313301086,0.28192538022995,0.795075297355652,0.151753693819046,0.868986129760742,0.153721868991852,0.832647919654846,0.154295712709427,0.790860295295715,0.18149721622467,0.87648993730545,0.184353828430176,0.837121486663818,0.185175865888596,0.792980313301086,0.214557617902756,0.882308006286621,0.216467350721359,0.841098248958588,0.217009395360947,0.795075297355652,0.500015616416931,0.253664493560791,0.750563859939575,0.253664493560791,0.998923242092133,0.253664493560791,0.249467313289642,0.253664493560791,0.625289738178253,0.253664493560791,0.374741464853287,0.253664493560791,0.875837981700897,0.253664493560791,0.124193221330643,0.253664493560791,0.595201730728149,0.253664493560791,0.564327955245972,0.253664493560791,0.532488644123077,0.253664493560791,0.404829412698746,0.253664493560791, +0.435703217983246,0.253664493560791,0.46754252910614,0.253664493560791,0.845749974250793,0.253664433956146,0.814876198768616,0.253664493560791,0.783036947250366,0.253664493560791,0.655377745628357,0.253664493560791,0.686251521110535,0.253664493560791,0.718090772628784,0.253664493560791,0.0941052734851837,0.253664493560791,0.0632314682006836,0.253664493560791,0.0313922166824341,0.253664493560791,0.905925989151001,0.253664493560791,0.936799764633179,0.253664493560791,0.968639016151428,0.253664493560791,0.34465354681015,0.253664493560791,0.313779681921005,0.253664493560791,0.281940460205078,0.253664493560791,0.154281169176102,0.253664433956146,0.185155004262924,0.253664493560791,0.216994255781174,0.253664493560791,0.2479447722435,0.00115928053855896,0.2479447722435,0.00115928053855896,0.998923242092133,0.079679399728775,0.998923242092133,0.0501402318477631,0.998923242092133,0.0273435413837433,0.998923242092133,0.0126940906047821,0.751685380935669,0.00182735919952393,0.751685380935669,0.00182735919952393,0.751685380935669,0.00182735919952393,0.244519531726837,0.998370289802551,0.74678111076355,1.00000536441803,0.74678111076355,1.00000536441803,0.74678111076355,1.00000536441803,-0.00108087062835693,0.920320630073547,-0.00108087062835693,0.949859619140625,-0.00108081102371216,0.972656488418579,-0.00108081102371216,0.987305998802185,0.244519531726837,0.998370289802551,0.374741494655609,0.111606359481812,0.394596517086029,0.10120502114296,0.424351036548615,0.0901255309581757,0.460370868444443,0.0824152529239655,0.500015556812286,0.079679399728775,0.605434656143188,0.10120502114296,0.625289678573608,0.111606359481812,0.575680136680603,0.0901255309581757,0.539660274982452,0.0824152529239655,0.625289738178253,0.888393759727478,0.605434656143188,0.898795008659363,0.575680136680603,0.909874439239502,0.539660274982452,0.917584896087646,0.500015556812286,0.920320630073547,0.394596517086029,0.898795008659363,0.374741435050964,0.888393759727478,0.424351036548615,0.909874439239502,0.460370868444443,0.917584896087646,0.625289678573608, +0.111606359481812,0.625289738178253,0.135115534067154,0.645144820213318,0.10120502114296,0.674899339675903,0.0901255309581757,0.710919201374054,0.0824152529239655,0.750563859939575,0.079679399728775,0.625289738178253,0.169690370559692,0.625289738178253,0.210201740264893,0.625289738178253,0.253664493560791,0.855982959270477,0.101205080747604,0.875837981700897,0.111606299877167,0.826228380203247,0.0901255309581757,0.790208637714386,0.0824152529239655,0.875837981700897,0.888393759727478,0.855982959270477,0.898795008659363,0.826228380203247,0.909874439239502,0.790208637714386,0.917584896087646,0.750563859939575,0.920320630073547,0.645144820213318,0.898795008659363,0.625289738178253,0.864884495735168,0.625289738178253,0.888393759727478,0.625289738178253,0.830309629440308,0.625289738178253,0.789798319339752,0.625289738178253,0.746335566043854,0.674899339675903,0.909874439239502,0.710919201374054,0.917584896087646,0.875837981700897,0.111606299877167,0.875837981700897,0.135115534067154,0.895693123340607,0.10120502114296,0.925447523593903,0.0901255309581757,0.961467385292053,0.0824152529239655,0.998923242092133,0.079679399728775,0.875837981700897,0.169690370559692,0.875837981700897,0.210201740264893,0.875837981700897,0.253664493560791,0.104338139295578,0.10120502114296,0.124193221330643,0.111606299877167,0.0745836198329926,0.0901255309581757,0.0385638475418091,0.0824152529239655,-0.00108087062835693,0.079679399728775,-0.00108087062835693,0.115390926599503,-0.00108087062835693,0.157122105360031,-0.00108087062835693,0.203916639089584,-0.00108087062835693,0.253664493560791,0.124193221330643,0.888393759727478,0.104338139295578,0.898795008659363,0.0745836198329926,0.909874439239502,0.0385638475418091,0.917584896087646,-0.00108087062835693,0.920320630073547,0.895693123340607,0.898795008659363,0.875837981700897,0.864884495735168,0.875837981700897,0.888393759727478,0.875837981700897,0.830309629440308,0.875837981700897,0.789798319339752,0.875837981700897,0.746335566043854,0.925447523593903,0.909874439239502,0.961467385292053,0.917584896087646, +0.998923242092133,0.920320630073547,0.998923242092133,0.884609043598175,0.998923242092133,0.842877864837646,0.998923242092133,0.796083569526672,0.998923242092133,0.746335566043854,0.124193221330643,0.111606299877167,0.124193221330643,0.135115534067154,0.144048303365707,0.101205080747604,0.173802852630615,0.0901255309581757,0.209822595119476,0.0824152529239655,0.249467313289642,0.079679399728775,0.124193221330643,0.169690370559692,0.124193221330643,0.210201740264893,0.124193221330643,0.253664493560791,0.3548863530159,0.10120502114296,0.374741464853287,0.135115534067154,0.374741494655609,0.111606359481812,0.374741435050964,0.169690370559692,0.374741435050964,0.210201740264893,0.374741464853287,0.253664493560791,0.325131833553314,0.0901255309581757,0.289112031459808,0.0824152529239655,0.374741435050964,0.888393759727478,0.374741435050964,0.864884495735168,0.3548863530159,0.898795008659363,0.325131833553314,0.909874439239502,0.289112091064453,0.917584896087646,0.249467313289642,0.920320630073547,0.374741435050964,0.830309629440308,0.374741464853287,0.789798319339752,0.374741435050964,0.746335566043854,0.144048303365707,0.898795008659363,0.124193221330643,0.864884495735168,0.124193221330643,0.888393759727478,0.124193221330643,0.830309629440308,0.124193221330643,0.789798319339752,0.124193221330643,0.746335566043854,0.173802852630615,0.909874439239502,0.209822654724121,0.917584896087646 + } + UVIndex: *2496 { + a: 178,8,109,177,178,109,174,178,177,174,175,178,175,100,178,178,100,418,177,109,108,173,174,177,176,177,108,173,177,176,171,175,174,170,174,173,170,171,174,48,173,176,47,173,48,47,170,173,0,170,47,0,26,170,26,171,170,48,176,49,26,27,171,49,176,107,176,108,107,49,107,17,27,172,171,171,172,175,27,28,172,199,17,107,199,46,17,202,107,108,202,199,107,172,99,175,175,99,100,28,98,172,172,98,99,28,14,98,198,46,199,198,45,46,14,185,98,14,31,185,98,186,99,98,185,186,99,187,100,99,186,187,31,182,185,31,30,182,100,187,103,100,103,419,187,102,103,187,184,102,186,184,187,184,101,102,185,183,186,186,183,184,185,182,183,184,181,101,183,181,184,181,15,101,181,34,15,183,180,181,180,34,181,182,180,183,180,33,34,182,179,180,179,33,180,30,179,182,179,32,33,30,29,179,29,32,179,29,2,32,37,421,420,37,194,421,36,194,37,194,422,421,36,191,194,35,191,36,194,195,422,191,195,194,195,423,422,35,188,191,3,188,35,3,38,188,191,192,195,188,192,191,195,196,423,192,196,195,196,424,423,38,189,188,188,189,192,38,39,189,192,193,196,189,193,192,39,190,189,189,190,193,39,40,190,193,106,196,196,106,425,40,104,190,40,16,104,190,105,193,193,105,106,190,104,105,16,203,104,16,43,203,104,204,105,104,203,204,105,205,106,105,204,205,43,200,203,43,42,200,106,205,109,106,109,426,205,108,109,205,202,108,204,202,205,203,201,204,204,201,202,203,200,201,201,199,202,201,198,199,200,198,201,42,197,200,200,197,198,197,45,198,42,41,197,197,44,45,41,44,197,41,1,44,214,9,121,213,214,121,210,214,213,210,211,214,211,112,214,214,112,427,213,121,120,209,210,213,212,213,120,209,213,212,207,211,210,206,210,209,206,207,210,72,209,212,71,209,72,71,206,209,4,206,71,4,50,206,50,207,206,72,212,73,50,51,207,73,212,119,212,120,119,73,119,21,51,208,207,207,208,211,51,52,208,235,21,119,235,70,21,238,119,120,238,235,119,208,111,211,211,111,112,52,110,208,208,110,111,52,18,110,234,70,235,234,69,70,18,221,110,18,55,221,110,222,111,110,221,222,111,223,112,111,222,223,55,218,221,55,54,218,221,219,222,221,218,219,54,215,218,54,53,215,53,56,215,53,5,56,215,56,57,218,215,216, +215,57,216,218,216,219,216,57,58,216,58,217,219,216,217,217,58,19,222,219,220,219,217,220,222,220,223,217,19,113,220,217,113,61,113,19,223,220,114,220,113,114,61,230,113,230,114,113,60,230,61,223,114,115,112,223,115,112,115,428,60,227,230,59,227,60,230,231,114,231,115,114,227,231,230,59,224,227,7,224,59,7,62,224,231,232,115,232,429,115,227,228,231,224,228,227,228,232,231,62,225,224,224,225,228,62,63,225,228,229,232,225,229,228,63,226,225,225,226,229,63,64,226,229,118,232,232,118,430,229,117,118,226,117,229,226,116,117,64,116,226,64,20,116,65,6,68,65,68,233,233,68,69,66,65,233,233,69,234,66,233,236,236,233,234,67,66,236,236,234,237,237,234,235,237,235,238,67,236,239,239,236,237,431,67,239,431,239,432,239,237,240,432,239,240,240,237,238,432,240,433,240,238,241,433,240,241,241,238,120,433,241,434,241,120,121,434,241,121,434,121,435,441,442,74,441,74,251,443,441,251,251,74,75,443,251,254,444,443,254,251,75,252,254,251,252,252,75,76,444,254,257,440,444,257,252,76,253,253,76,390,254,252,255,257,254,255,255,252,253,440,257,122,439,440,122,253,390,394,22,394,390,255,253,256,256,253,394,257,255,258,122,257,258,258,255,256,439,122,244,438,439,244,22,125,394,79,125,22,122,258,123,244,122,123,256,394,395,125,395,394,258,256,259,123,258,259,259,256,395,438,244,243,437,438,243,79,266,125,78,266,79,244,123,247,243,244,247,123,259,124,247,123,124,259,395,396,124,259,396,125,126,395,266,126,125,126,396,395,437,243,242,436,437,242,436,242,83,243,247,246,242,243,246,83,242,245,242,246,245,83,245,84,247,124,250,246,247,250,124,396,386,250,124,386,126,127,396,127,386,396,84,245,248,84,248,85,245,246,249,246,250,249,245,249,248,250,386,399,249,250,399,85,248,397,85,397,391,248,249,398,249,399,398,248,398,397,10,399,386,127,10,386,267,127,126,266,267,126,131,391,397,131,23,391,133,398,399,10,133,399,132,397,398,132,131,397,133,132,398,268,10,127,267,268,127,263,267,266,78,263,266,77,263,78,271,23,131,271,82,23,130,133,10,268,130,10,274,131,132,274,271,131,277,132,133,130,277,133,277,274,132,263,264,267,264,268,267,77,260,263,260,264,263, +445,260,77,445,446,260,446,261,260,260,261,264,446,447,261,264,265,268,265,130,268,261,265,264,447,262,261,261,262,265,447,448,262,265,129,130,262,129,265,129,277,130,448,128,262,262,128,129,448,449,128,129,276,277,128,276,129,276,274,277,449,275,128,128,275,276,449,453,275,276,273,274,275,273,276,273,271,274,453,272,275,275,272,273,453,452,272,273,270,271,272,270,273,270,82,271,270,81,82,452,269,272,272,269,270,269,81,270,452,450,269,269,80,81,450,80,269,450,451,80,463,464,86,463,86,287,465,463,287,287,86,87,465,287,290,466,465,290,287,87,288,290,287,288,288,87,88,466,290,293,459,466,293,288,88,289,289,88,392,290,288,291,293,290,291,291,288,289,459,293,134,458,459,134,289,392,400,24,400,392,291,289,292,292,289,400,293,291,294,134,293,294,294,291,292,458,134,280,457,458,280,24,137,400,91,137,24,134,294,135,280,134,135,292,400,401,137,401,400,294,292,295,135,294,295,295,292,401,457,280,279,456,457,279,91,302,137,90,302,91,280,135,283,279,280,283,135,295,136,283,135,136,295,401,402,136,295,402,137,138,401,302,138,137,138,402,401,456,279,278,454,456,278,454,278,455,279,283,282,278,279,282,455,278,281,278,282,281,455,281,460,283,136,286,282,283,286,136,402,387,286,136,387,138,139,402,139,387,402,460,281,284,460,284,461,281,282,285,282,286,285,281,285,284,286,387,405,285,286,405,461,284,403,461,403,462,284,285,404,285,405,404,284,404,403,11,405,387,139,11,387,303,139,138,302,303,138,143,462,403,143,477,462,145,404,405,11,145,405,144,403,404,144,143,403,145,144,404,304,11,139,303,304,139,299,303,302,90,299,302,89,299,90,307,477,143,307,476,477,142,145,11,304,142,11,310,143,144,310,307,143,313,144,145,142,313,145,313,310,144,299,300,303,300,304,303,89,296,299,296,300,299,467,296,89,467,468,296,468,297,296,296,297,300,468,469,297,300,301,304,301,142,304,297,301,300,469,298,297,297,298,301,469,470,298,301,141,142,298,141,301,141,313,142,470,140,298,298,140,141,470,471,140,141,312,313,140,312,141,312,310,313,471,311,140,140,311,312,471,479,311,312,309,310,311,309,312,309,307,310,479,308,311,311,308,309,479,478,308,309,306,307, +308,306,309,306,476,307,306,475,476,478,305,308,308,305,306,305,475,306,478,472,305,305,473,475,472,473,305,472,474,473,484,485,146,484,146,316,483,484,316,316,146,147,483,316,315,482,483,315,316,147,319,315,316,319,319,147,148,482,315,314,480,482,314,480,314,481,315,319,318,314,315,318,319,148,322,318,319,322,322,148,388,481,314,317,314,318,317,481,317,486,318,322,321,317,318,321,322,388,411,321,322,411,515,411,388,486,317,320,317,321,320,486,320,487,515,157,411,514,157,515,321,411,410,320,321,410,157,410,411,487,320,409,320,410,409,487,409,488,514,349,157,513,349,514,157,156,410,156,409,410,349,156,157,155,488,409,156,155,409,155,508,488,513,348,349,512,348,513,349,346,156,346,155,156,348,346,349,343,508,155,346,343,155,343,507,508,512,347,348,511,347,512,511,510,347,348,345,346,345,343,346,347,345,348,342,507,343,345,342,343,342,506,507,510,344,347,347,344,345,344,342,345,510,509,344,341,506,342,344,341,342,509,341,344,341,504,506,509,503,341,503,504,341,503,505,504,489,490,92,489,92,323,491,489,323,323,92,93,491,323,326,492,491,326,323,93,324,326,323,324,324,93,94,492,326,329,493,492,329,493,329,494,324,94,325,325,94,393,326,324,327,329,326,327,327,324,325,494,329,330,329,327,330,494,330,495,325,393,406,25,406,393,327,325,328,330,327,328,328,325,406,495,330,331,330,328,331,495,331,496,25,149,406,97,149,25,328,406,407,331,328,407,149,407,406,496,331,408,331,407,408,496,408,497,97,338,149,96,338,97,149,150,407,150,408,407,338,150,149,151,497,408,150,151,408,151,12,497,96,335,338,95,335,96,338,339,150,339,151,150,335,339,338,340,12,151,339,340,151,340,154,12,95,332,335,498,332,95,498,499,332,335,336,339,336,340,339,332,336,335,337,154,340,336,337,340,337,153,154,499,333,332,332,333,336,333,337,336,499,500,333,334,153,337,333,334,337,500,334,333,334,152,153,500,501,334,501,152,334,501,502,152,525,527,526,525,526,359,531,525,359,359,526,528,531,359,362,532,531,362,359,528,360,362,359,360,360,528,529,532,362,365,521,532,365,360,529,361,361,529,530,362,360,363,365,362,363,363,360,361,521,365,158,520,521,158,361,530,412, +541,412,530,363,361,364,364,361,412,365,363,366,158,365,366,366,363,364,520,158,352,519,520,352,541,161,412,540,161,541,158,366,159,352,158,159,364,412,413,161,413,412,366,364,367,159,366,367,367,364,413,519,352,351,518,519,351,540,374,161,539,374,540,352,159,355,351,352,355,159,367,160,355,159,160,367,413,414,160,367,414,161,162,413,374,162,161,162,414,413,518,351,350,516,518,350,516,350,517,351,355,354,350,351,354,517,350,353,350,354,353,517,353,522,355,160,358,354,355,358,160,414,389,358,160,389,162,163,414,163,389,414,522,353,356,522,356,523,353,354,357,354,358,357,353,357,356,358,389,417,357,358,417,523,356,415,523,415,524,356,357,416,357,417,416,356,416,415,13,417,389,163,13,389,375,163,162,374,375,162,167,524,415,167,547,524,169,416,417,13,169,417,168,415,416,168,167,415,169,168,416,376,13,163,375,376,163,371,375,374,539,371,374,534,371,539,379,547,167,379,546,547,166,169,13,376,166,13,382,167,168,382,379,167,385,168,169,166,385,169,385,382,168,371,372,375,372,376,375,534,368,371,368,372,371,533,368,534,533,535,368,535,369,368,368,369,372,535,536,369,372,373,376,373,166,376,369,373,372,536,370,369,369,370,373,536,537,370,373,165,166,370,165,373,165,385,166,537,164,370,370,164,165,537,538,164,165,384,385,164,384,165,384,382,385,538,383,164,164,383,384,538,549,383,384,381,382,383,381,384,381,379,382,549,380,383,383,380,381,549,548,380,381,378,379,380,378,381,378,546,379,378,545,546,548,377,380,380,377,378,377,545,378,548,542,377,377,543,545,542,543,377,542,544,543 + } + } + LayerElementUV: 1 { + Version: 101 + Name: "UVSet1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *1100 { + a: 0.478193640708923,0.791351020336151,0.478193640708923,0.565741777420044,0.255966335535049,0.791351020336151,0.255966335535049,0.565741777420044,0.222227305173874,0.565362215042114,0.222227305173874,0.790971338748932,0,0.565362215042114,0,0.790971338748932,0.367079943418503,0.678760588169098,0.111113607883453,0.678380966186523,0.629845440387726,0.114559255540371,0.368858575820923,0.114559255540371,0.888130784034729,0.114559255540371,0.111113607883453,0.11301876604557,0.367079943418503,0.791351020336151,0.255966335535049,0.678760588169098,0.367079943418503,0.565741777420044,0.478193640708923,0.678760588169098,0.222227305173874,0.678380966186523,0.111113607883453,0.790971338748932,0,0.678380966186523,0.111113607883453,0.565362215042114,0.518731832504272,0.114559255540371,0.740959167480469,0.114559255540371,0.257744938135147,0.114559255540371,0.777017176151276,0.114559255540371,0.450417369604111,0.791351020336151,0.422720164060593,0.791351020336151,0.395023107528687,0.791351020336151,0.283744692802429,0.791351020336151,0.311523109674454,0.791351020336151,0.339301586151123,0.791351020336151,0.255966335535049,0.763149917125702,0.255966335535049,0.734948813915253,0.255966335535049,0.706747710704803,0.255966335535049,0.593952059745789,0.255966335535049,0.622153043746948,0.255966335535049,0.650354325771332,0.283744692802429,0.565741777420044,0.311523109674454,0.565741777420044,0.339301586151123,0.565741777420044,0.450417369604111,0.565741777420044,0.422720164060593,0.565741777420044,0.395023107528687,0.565741777420044,0.478193640708923,0.593952059745789,0.478193640708923,0.622153043746948,0.478193640708923,0.650354325771332,0.478193640708923,0.763149917125702,0.478193640708923,0.734948813915253,0.478193640708923,0.706747710704803,0.222227305173874,0.593572497367859,0.222227305173874,0.621773481369019,0.222227305173874,0.649974703788757,0.222227305173874,0.762770235538483,0.222227305173874,0.734569191932678,0.222227305173874,0.706368088722229,0.194451063871384,0.790971338748932,0.166753813624382,0.790971338748932, +0.139056757092476,0.790971338748932,0.0277783554047346,0.790971338748932,0.0555567741394043,0.790971338748932,0.083335243165493,0.790971338748932,0,0.762770235538483,0,0.734569191932678,0,0.706368088722229,0,0.593572497367859,0,0.621773481369019,0,0.649974703788757,0.0277783554047346,0.565362215042114,0.0555567741394043,0.565362215042114,0.083335243165493,0.565362215042114,0.194451063871384,0.565362215042114,0.166753813624382,0.565362215042114,0.139056757092476,0.565362215042114,0.518731832504272,0.494600832462311,0.518731832504272,0.465962588787079,0.518731832504272,0.437324404716492,0.518731832504272,0.0297507662326097,0.518731832504272,0.0579517632722855,0.518731832504272,0.086153008043766,0.740959167480469,0.0297507662326097,0.740959167480469,0.0579517632722855,0.740959167480469,0.086153008043766,0.740959167480469,0.494600832462311,0.740959167480469,0.465962588787079,0.740959167480469,0.437324404716492,0.257744938135147,0.494600832462311,0.257744938135147,0.465962588787079,0.257744938135147,0.437324404716492,0.257744938135147,0.0297507662326097,0.257744938135147,0.0579517632722855,0.257744938135147,0.086153008043766,0.777017176151276,0.494600832462311,0.777017176151276,0.465962588787079,0.777017176151276,0.437324404716492,0.777017176151276,0.0297507662326097,0.777017176151276,0.0579517632722855,0.777017176151276,0.086153008043766,0.367079943418503,0.763149917125702,0.367079943418503,0.734948813915253,0.367079943418503,0.706747710704803,0.283744692802429,0.678760588169098,0.311523109674454,0.678760588169098,0.339301586151123,0.678760588169098,0.367079943418503,0.593952059745789,0.367079943418503,0.622153043746948,0.367079943418503,0.650354325771332,0.450417369604111,0.678760588169098,0.422720164060593,0.678760588169098,0.395023107528687,0.678760588169098,0.194451063871384,0.678380966186523,0.166753813624382,0.678380966186523,0.139056757092476,0.678380966186523,0.111113607883453,0.762770235538483,0.111113607883453,0.734569191932678,0.111113607883453,0.706368088722229,0.0277783554047346,0.678380966186523,0.0555567741394043, +0.678380966186523,0.083335243165493,0.678380966186523,0.111113607883453,0.593572497367859,0.111113607883453,0.621773481369019,0.111113607883453,0.649974703788757,0.629845440387726,0.494600832462311,0.629845440387726,0.465962588787079,0.629845440387726,0.437324404716492,0.546510279178619,0.114559255540371,0.574288666248322,0.114559255540371,0.602067112922668,0.114559255540371,0.629845440387726,0.0297507662326097,0.629845440387726,0.0579517632722855,0.629845440387726,0.086153008043766,0.713182866573334,0.114559255540371,0.68548572063446,0.114559255540371,0.657788634300232,0.114559255540371,0.368858575820923,0.494600832462311,0.368858575820923,0.465962588787079,0.368858575820923,0.437324404716492,0.285523265600204,0.114559255540371,0.313301712274551,0.114559255540371,0.341080158948898,0.114559255540371,0.368858575820923,0.0297507662326097,0.368858575820923,0.0579517632722855,0.368858575820923,0.086153008043766,0.452196002006531,0.114559255540371,0.424498707056046,0.114559255540371,0.396801680326462,0.114559255540371,0.888130784034729,0.494600832462311,0.888130784034729,0.465962588787079,0.888130784034729,0.437324404716492,0.804795563220978,0.114559255540371,0.832574009895325,0.114559255540371,0.860352456569672,0.114559255540371,0.888130784034729,0.0297507662326097,0.888130784034729,0.0579517632722855,0.888130784034729,0.086153008043766,0.971468269824982,0.114559255540371,0.943771004676819,0.114559255540371,0.916073977947235,0.114559255540371,0.111113607883453,0.493060380220413,0.111113607883453,0.464422076940536,0.111113607883453,0.435783892869949,0.0277783554047346,0.11301876604557,0.0555567741394043,0.11301876604557,0.083335243165493,0.11301876604557,0.111113607883453,0.0282102655619383,0.111113607883453,0.056411262601614,0.111113607883453,0.0846125185489655,0.194451063871384,0.11301876604557,0.166753813624382,0.11301876604557,0.139056757092476,0.11301876604557,0.450417369604111,0.763149917125702,0.422720164060593,0.763149917125702,0.395023107528687,0.763149917125702,0.450417369604111,0.734948813915253,0.422720164060593, +0.734948813915253,0.395023107528687,0.734948813915253,0.450417369604111,0.706747710704803,0.422720164060593,0.706747710704803,0.395023107528687,0.706747710704803,0.283744692802429,0.763149917125702,0.283744692802429,0.734948813915253,0.283744692802429,0.706747710704803,0.311523109674454,0.763149917125702,0.311523109674454,0.734948813915253,0.311523109674454,0.706747710704803,0.339301586151123,0.763149917125702,0.339301586151123,0.734948813915253,0.339301586151123,0.706747710704803,0.283744692802429,0.593952059745789,0.311523109674454,0.593952059745789,0.339301586151123,0.593952059745789,0.283744692802429,0.622153043746948,0.311523109674454,0.622153043746948,0.339301586151123,0.622153043746948,0.283744692802429,0.650354325771332,0.311523109674454,0.650354325771332,0.339301586151123,0.650354325771332,0.450417369604111,0.593952059745789,0.450417369604111,0.622153043746948,0.450417369604111,0.650354325771332,0.422720164060593,0.593952059745789,0.422720164060593,0.622153043746948,0.422720164060593,0.650354325771332,0.395023107528687,0.593952059745789,0.395023107528687,0.622153043746948,0.395023107528687,0.650354325771332,0.194451063871384,0.593572497367859,0.194451063871384,0.621773481369019,0.194451063871384,0.649974703788757,0.166753813624382,0.593572497367859,0.166753813624382,0.621773481369019,0.166753813624382,0.649974703788757,0.139056757092476,0.593572497367859,0.139056757092476,0.621773481369019,0.139056757092476,0.649974703788757,0.194451063871384,0.762770235538483,0.166753813624382,0.762770235538483,0.139056757092476,0.762770235538483,0.194451063871384,0.734569191932678,0.166753813624382,0.734569191932678,0.139056757092476,0.734569191932678,0.194451063871384,0.706368088722229,0.166753813624382,0.706368088722229,0.139056757092476,0.706368088722229,0.0277783554047346,0.762770235538483,0.0277783554047346,0.734569191932678,0.0277783554047346,0.706368088722229,0.0555567741394043,0.762770235538483,0.0555567741394043,0.734569191932678,0.0555567741394043,0.706368088722229,0.083335243165493,0.762770235538483,0.083335243165493, +0.734569191932678,0.083335243165493,0.706368088722229,0.0277783554047346,0.593572497367859,0.0555567741394043,0.593572497367859,0.083335243165493,0.593572497367859,0.0277783554047346,0.621773481369019,0.0555567741394043,0.621773481369019,0.083335243165493,0.621773481369019,0.0277783554047346,0.649974703788757,0.0555567741394043,0.649974703788757,0.083335243165493,0.649974703788757,0.713182866573334,0.494600832462311,0.68548572063446,0.494600832462311,0.657788634300232,0.494600832462311,0.713182866573334,0.465962588787079,0.68548572063446,0.465962588787079,0.657788634300232,0.465962588787079,0.713182866573334,0.437324404716492,0.68548572063446,0.437324404716492,0.657788634300232,0.437324404716492,0.546510279178619,0.494600832462311,0.546510279178619,0.465962588787079,0.546510279178619,0.437324404716492,0.574288666248322,0.494600832462311,0.574288666248322,0.465962588787079,0.574288666248322,0.437324404716492,0.602067112922668,0.494600832462311,0.602067112922668,0.465962588787079,0.602067112922668,0.437324404716492,0.546510279178619,0.0297507662326097,0.574288666248322,0.0297507662326097,0.602067112922668,0.0297507662326097,0.546510279178619,0.0579517632722855,0.574288666248322,0.0579517632722855,0.602067112922668,0.0579517632722855,0.546510279178619,0.086153008043766,0.574288666248322,0.086153008043766,0.602067112922668,0.086153008043766,0.713182866573334,0.0297507662326097,0.713182866573334,0.0579517632722855,0.713182866573334,0.086153008043766,0.68548572063446,0.0297507662326097,0.68548572063446,0.0579517632722855,0.68548572063446,0.086153008043766,0.657788634300232,0.0297507662326097,0.657788634300232,0.0579517632722855,0.657788634300232,0.086153008043766,0.452196002006531,0.494600832462311,0.424498707056046,0.494600832462311,0.396801680326462,0.494600832462311,0.452196002006531,0.465962588787079,0.424498707056046,0.465962588787079,0.396801680326462,0.465962588787079,0.452196002006531,0.437324404716492,0.424498707056046,0.437324404716492,0.396801680326462,0.437324404716492,0.285523265600204,0.494600832462311,0.285523265600204, +0.465962588787079,0.285523265600204,0.437324404716492,0.313301712274551,0.494600832462311,0.313301712274551,0.465962588787079,0.313301712274551,0.437324404716492,0.341080158948898,0.494600832462311,0.341080158948898,0.465962588787079,0.341080158948898,0.437324404716492,0.285523265600204,0.0297507662326097,0.313301712274551,0.0297507662326097,0.341080158948898,0.0297507662326097,0.285523265600204,0.0579517632722855,0.313301712274551,0.0579517632722855,0.341080158948898,0.0579517632722855,0.285523265600204,0.086153008043766,0.313301712274551,0.086153008043766,0.341080158948898,0.086153008043766,0.452196002006531,0.0297507662326097,0.452196002006531,0.0579517632722855,0.452196002006531,0.086153008043766,0.424498707056046,0.0297507662326097,0.424498707056046,0.0579517632722855,0.424498707056046,0.086153008043766,0.396801680326462,0.0297507662326097,0.396801680326462,0.0579517632722855,0.396801680326462,0.086153008043766,0.971468269824982,0.494600832462311,0.943771004676819,0.494600832462311,0.916073977947235,0.494600832462311,0.971468269824982,0.465962588787079,0.943771004676819,0.465962588787079,0.916073977947235,0.465962588787079,0.971468269824982,0.437324404716492,0.943771004676819,0.437324404716492,0.916073977947235,0.437324404716492,0.804795563220978,0.494600832462311,0.804795563220978,0.465962588787079,0.804795563220978,0.437324404716492,0.832574009895325,0.494600832462311,0.832574009895325,0.465962588787079,0.832574009895325,0.437324404716492,0.860352456569672,0.494600832462311,0.860352456569672,0.465962588787079,0.860352456569672,0.437324404716492,0.804795563220978,0.0297507662326097,0.832574009895325,0.0297507662326097,0.860352456569672,0.0297507662326097,0.804795563220978,0.0579517632722855,0.832574009895325,0.0579517632722855,0.860352456569672,0.0579517632722855,0.804795563220978,0.086153008043766,0.832574009895325,0.086153008043766,0.860352456569672,0.086153008043766,0.971468269824982,0.0297507662326097,0.971468269824982,0.0579517632722855,0.971468269824982,0.086153008043766,0.943771004676819,0.0297507662326097, +0.943771004676819,0.0579517632722855,0.943771004676819,0.086153008043766,0.916073977947235,0.0297507662326097,0.916073977947235,0.0579517632722855,0.916073977947235,0.086153008043766,0.194451063871384,0.493060380220413,0.166753813624382,0.493060380220413,0.139056757092476,0.493060380220413,0.194451063871384,0.464422076940536,0.166753813624382,0.464422076940536,0.139056757092476,0.464422076940536,0.194451063871384,0.435783892869949,0.166753813624382,0.435783892869949,0.139056757092476,0.435783892869949,0.0277783554047346,0.493060380220413,0.0277783554047346,0.464422076940536,0.0277783554047346,0.435783892869949,0.0555567741394043,0.493060380220413,0.0555567741394043,0.464422076940536,0.0555567741394043,0.435783892869949,0.083335243165493,0.493060380220413,0.083335243165493,0.464422076940536,0.083335243165493,0.435783892869949,0.0277783554047346,0.0282102655619383,0.0555567741394043,0.0282102655619383,0.083335243165493,0.0282102655619383,0.0277783554047346,0.056411262601614,0.0555567741394043,0.056411262601614,0.083335243165493,0.056411262601614,0.0277783554047346,0.0846125185489655,0.0555567741394043,0.0846125185489655,0.083335243165493,0.0846125185489655,0.194451063871384,0.0282102655619383,0.194451063871384,0.056411262601614,0.194451063871384,0.0846125185489655,0.166753813624382,0.0282102655619383,0.166753813624382,0.056411262601614,0.166753813624382,0.0846125185489655,0.139056757092476,0.0282102655619383,0.139056757092476,0.056411262601614,0.139056757092476,0.0846125185489655,0.629845440387726,0.408686280250549,0.368858575820923,0.408686280250549,0.888130784034729,0.408686280250549,0.111113607883453,0.407145768404007,0.518731832504272,0.408686280250549,0.740959167480469,0.408686280250549,0.257744938135147,0.408686280250549,0.777017176151276,0.408686280250549,0.546510279178619,0.408686280250549,0.574288666248322,0.408686280250549,0.602067112922668,0.408686280250549,0.713182866573334,0.408686280250549,0.68548572063446,0.408686280250549,0.657788634300232,0.408686280250549,0.285523265600204,0.408686280250549,0.313301712274551, +0.408686280250549,0.341080158948898,0.408686280250549,0.452196002006531,0.408686280250549,0.424498707056046,0.408686280250549,0.396801680326462,0.408686280250549,0.804795563220978,0.408686280250549,0.832574009895325,0.408686280250549,0.860352456569672,0.408686280250549,0.971468269824982,0.408686280250549,0.943771004676819,0.408686280250549,0.916073977947235,0.408686280250549,0.0277783554047346,0.407145768404007,0.0555567741394043,0.407145768404007,0.083335243165493,0.407145768404007,0.194451063871384,0.407145768404007,0.166753813624382,0.407145768404007,0.139056757092476,0.407145768404007,0.367079943418503,0.678760588169098,0.367079943418503,0.678760588169098,0.255966335535049,0.678760588169098,0.283744692802429,0.678760588169098,0.311523109674454,0.678760588169098,0.339301586151123,0.678760588169098,0.367079943418503,0.678760588169098,0.367079943418503,0.678760588169098,0.367079943418503,0.678760588169098,0.111113607883453,0.678380966186523,0.111113607883453,0.678380966186523,0.111113607883453,0.678380966186523,0.111113607883453,0.678380966186523,0,0.678380966186523,0.0277783554047346,0.678380966186523,0.0555567741394043,0.678380966186523,0.083335243165493,0.678380966186523,0.111113607883453,0.678380966186523,0.740959167480469,0.523239016532898,0.713182866573334,0.523239016532898,0.68548572063446,0.523239016532898,0.657788634300232,0.523239016532898,0.629845440387726,0.523239016532898,0.546510279178619,0.523239016532898,0.518731832504272,0.523239016532898,0.574288666248322,0.523239016532898,0.602067112922668,0.523239016532898,0.518731832504272,0.00154049601405859,0.546510279178619,0.00154049601405859,0.574288666248322,0.00154049601405859,0.602067112922668,0.00154049601405859,0.629845440387726,0.00154049601405859,0.713182866573334,0.00154049601405859,0.740959167480469,0.00154049601405859,0.68548572063446,0.00154049601405859,0.657788634300232,0.00154049601405859,0.479972213506699,0.523239016532898,0.479972213506699,0.494600832462311,0.452196002006531,0.523239016532898,0.424498707056046,0.523239016532898,0.396801680326462, +0.523239016532898,0.368858575820923,0.523239016532898,0.479972213506699,0.465962588787079,0.479972213506699,0.437324404716492,0.479972213506699,0.408686280250549,0.285523265600204,0.523239016532898,0.257744938135147,0.523239016532898,0.313301712274551,0.523239016532898,0.341080158948898,0.523239016532898,0.257744938135147,0.00154049601405859,0.285523265600204,0.00154049601405859,0.313301712274551,0.00154049601405859,0.341080158948898,0.00154049601405859,0.368858575820923,0.00154049601405859,0.452196002006531,0.00154049601405859,0.479972213506699,0.0297507662326097,0.479972213506699,0.00154049601405859,0.479972213506699,0.0579517632722855,0.479972213506699,0.086153008043766,0.479972213506699,0.114559255540371,0.424498707056046,0.00154049601405859,0.396801680326462,0.00154049601405859,0.999244511127472,0.523239016532898,0.999244511127472,0.494600832462311,0.971468269824982,0.523239016532898,0.943771004676819,0.523239016532898,0.916073977947235,0.523239016532898,0.888130784034729,0.523239016532898,0.999244511127472,0.465962588787079,0.999244511127472,0.437324404716492,0.999244511127472,0.408686280250549,0.804795563220978,0.523239016532898,0.777017176151276,0.523239016532898,0.832574009895325,0.523239016532898,0.860352456569672,0.523239016532898,0.888130784034729,0.523239016532898,0.888130784034729,0.494600832462311,0.888130784034729,0.465962588787079,0.888130784034729,0.437324404716492,0.888130784034729,0.408686280250549,0.777017176151276,0.00154049601405859,0.804795563220978,0.00154049601405859,0.832574009895325,0.00154049601405859,0.860352456569672,0.00154049601405859,0.888130784034729,0.00154049601405859,0.971468269824982,0.00154049601405859,0.999244511127472,0.0297507662326097,0.999244511127472,0.00154049601405859,0.999244511127472,0.0579517632722855,0.999244511127472,0.086153008043766,0.999244511127472,0.114559255540371,0.943771004676819,0.00154049601405859,0.916073977947235,0.00154049601405859,0.888130784034729,0.00154049601405859,0.888130784034729,0.0297507662326097,0.888130784034729,0.0579517632722855,0.888130784034729, +0.086153008043766,0.888130784034729,0.114559255540371,0.222227305173874,0.521698474884033,0.222227305173874,0.493060380220413,0.194451063871384,0.521698474884033,0.166753813624382,0.521698474884033,0.139056757092476,0.521698474884033,0.111113607883453,0.521698474884033,0.222227305173874,0.464422076940536,0.222227305173874,0.435783892869949,0.222227305173874,0.407145768404007,0.0277783554047346,0.521698474884033,0,0.493060380220413,0,0.521698474884033,0,0.464422076940536,0,0.435783892869949,0,0.407145768404007,0.0555567741394043,0.521698474884033,0.083335243165493,0.521698474884033,0,0,0,0.0282102655619383,0.0277783554047346,0,0.0555567741394043,0,0.083335243165493,0,0.111113607883453,0,0,0.056411262601614,0,0.0846125185489655,0,0.11301876604557,0.194451063871384,0,0.222227305173874,0.0282102655619383,0.222227305173874,0,0.222227305173874,0.056411262601614,0.222227305173874,0.0846125185489655,0.222227305173874,0.11301876604557,0.166753813624382,0,0.139056757092476,0 + } + UVIndex: *2496 { + a: 178,8,109,177,178,109,174,178,177,174,175,178,175,100,178,178,100,418,177,109,108,173,174,177,176,177,108,173,177,176,171,175,174,170,174,173,170,171,174,48,173,176,47,173,48,47,170,173,0,170,47,0,26,170,26,171,170,48,176,49,26,27,171,49,176,107,176,108,107,49,107,17,27,172,171,171,172,175,27,28,172,199,17,107,199,46,17,202,107,108,202,199,107,172,99,175,175,99,100,28,98,172,172,98,99,28,14,98,198,46,199,198,45,46,14,185,98,14,31,185,98,186,99,98,185,186,99,187,100,99,186,187,31,182,185,31,30,182,100,187,103,100,103,419,187,102,103,187,184,102,186,184,187,184,101,102,185,183,186,186,183,184,185,182,183,184,181,101,183,181,184,181,15,101,181,34,15,183,180,181,180,34,181,182,180,183,180,33,34,182,179,180,179,33,180,30,179,182,179,32,33,30,29,179,29,32,179,29,2,32,37,421,420,37,194,421,36,194,37,194,422,421,36,191,194,35,191,36,194,195,422,191,195,194,195,423,422,35,188,191,3,188,35,3,38,188,191,192,195,188,192,191,195,196,423,192,196,195,196,424,423,38,189,188,188,189,192,38,39,189,192,193,196,189,193,192,39,190,189,189,190,193,39,40,190,193,106,196,196,106,425,40,104,190,40,16,104,190,105,193,193,105,106,190,104,105,16,203,104,16,43,203,104,204,105,104,203,204,105,205,106,105,204,205,43,200,203,43,42,200,106,205,109,106,109,426,205,108,109,205,202,108,204,202,205,203,201,204,204,201,202,203,200,201,201,199,202,201,198,199,200,198,201,42,197,200,200,197,198,197,45,198,42,41,197,197,44,45,41,44,197,41,1,44,214,9,121,213,214,121,210,214,213,210,211,214,211,112,214,214,112,427,213,121,120,209,210,213,212,213,120,209,213,212,207,211,210,206,210,209,206,207,210,72,209,212,71,209,72,71,206,209,4,206,71,4,50,206,50,207,206,72,212,73,50,51,207,73,212,119,212,120,119,73,119,21,51,208,207,207,208,211,51,52,208,235,21,119,235,70,21,238,119,120,238,235,119,208,111,211,211,111,112,52,110,208,208,110,111,52,18,110,234,70,235,234,69,70,18,221,110,18,55,221,110,222,111,110,221,222,111,223,112,111,222,223,55,218,221,55,54,218,221,219,222,221,218,219,54,215,218,54,53,215,53,56,215,53,5,56,215,56,57,218,215,216, +215,57,216,218,216,219,216,57,58,216,58,217,219,216,217,217,58,19,222,219,220,219,217,220,222,220,223,217,19,113,220,217,113,61,113,19,223,220,114,220,113,114,61,230,113,230,114,113,60,230,61,223,114,115,112,223,115,112,115,428,60,227,230,59,227,60,230,231,114,231,115,114,227,231,230,59,224,227,7,224,59,7,62,224,231,232,115,232,429,115,227,228,231,224,228,227,228,232,231,62,225,224,224,225,228,62,63,225,228,229,232,225,229,228,63,226,225,225,226,229,63,64,226,229,118,232,232,118,430,229,117,118,226,117,229,226,116,117,64,116,226,64,20,116,65,6,68,65,68,233,233,68,69,66,65,233,233,69,234,66,233,236,236,233,234,67,66,236,236,234,237,237,234,235,237,235,238,67,236,239,239,236,237,431,67,239,431,239,432,239,237,240,432,239,240,240,237,238,432,240,433,240,238,241,433,240,241,241,238,120,433,241,434,241,120,121,434,241,121,434,121,435,441,442,74,441,74,251,443,441,251,251,74,75,443,251,254,444,443,254,251,75,252,254,251,252,252,75,76,444,254,257,440,444,257,252,76,253,253,76,390,254,252,255,257,254,255,255,252,253,440,257,122,439,440,122,253,390,394,22,394,390,255,253,256,256,253,394,257,255,258,122,257,258,258,255,256,439,122,244,438,439,244,22,125,394,79,125,22,122,258,123,244,122,123,256,394,395,125,395,394,258,256,259,123,258,259,259,256,395,438,244,243,437,438,243,79,266,125,78,266,79,244,123,247,243,244,247,123,259,124,247,123,124,259,395,396,124,259,396,125,126,395,266,126,125,126,396,395,437,243,242,436,437,242,436,242,83,243,247,246,242,243,246,83,242,245,242,246,245,83,245,84,247,124,250,246,247,250,124,396,386,250,124,386,126,127,396,127,386,396,84,245,248,84,248,85,245,246,249,246,250,249,245,249,248,250,386,399,249,250,399,85,248,397,85,397,391,248,249,398,249,399,398,248,398,397,10,399,386,127,10,386,267,127,126,266,267,126,131,391,397,131,23,391,133,398,399,10,133,399,132,397,398,132,131,397,133,132,398,268,10,127,267,268,127,263,267,266,78,263,266,77,263,78,271,23,131,271,82,23,130,133,10,268,130,10,274,131,132,274,271,131,277,132,133,130,277,133,277,274,132,263,264,267,264,268,267,77,260,263,260,264,263, +445,260,77,445,446,260,446,261,260,260,261,264,446,447,261,264,265,268,265,130,268,261,265,264,447,262,261,261,262,265,447,448,262,265,129,130,262,129,265,129,277,130,448,128,262,262,128,129,448,449,128,129,276,277,128,276,129,276,274,277,449,275,128,128,275,276,449,453,275,276,273,274,275,273,276,273,271,274,453,272,275,275,272,273,453,452,272,273,270,271,272,270,273,270,82,271,270,81,82,452,269,272,272,269,270,269,81,270,452,450,269,269,80,81,450,80,269,450,451,80,463,464,86,463,86,287,465,463,287,287,86,87,465,287,290,466,465,290,287,87,288,290,287,288,288,87,88,466,290,293,459,466,293,288,88,289,289,88,392,290,288,291,293,290,291,291,288,289,459,293,134,458,459,134,289,392,400,24,400,392,291,289,292,292,289,400,293,291,294,134,293,294,294,291,292,458,134,280,457,458,280,24,137,400,91,137,24,134,294,135,280,134,135,292,400,401,137,401,400,294,292,295,135,294,295,295,292,401,457,280,279,456,457,279,91,302,137,90,302,91,280,135,283,279,280,283,135,295,136,283,135,136,295,401,402,136,295,402,137,138,401,302,138,137,138,402,401,456,279,278,454,456,278,454,278,455,279,283,282,278,279,282,455,278,281,278,282,281,455,281,460,283,136,286,282,283,286,136,402,387,286,136,387,138,139,402,139,387,402,460,281,284,460,284,461,281,282,285,282,286,285,281,285,284,286,387,405,285,286,405,461,284,403,461,403,462,284,285,404,285,405,404,284,404,403,11,405,387,139,11,387,303,139,138,302,303,138,143,462,403,143,477,462,145,404,405,11,145,405,144,403,404,144,143,403,145,144,404,304,11,139,303,304,139,299,303,302,90,299,302,89,299,90,307,477,143,307,476,477,142,145,11,304,142,11,310,143,144,310,307,143,313,144,145,142,313,145,313,310,144,299,300,303,300,304,303,89,296,299,296,300,299,467,296,89,467,468,296,468,297,296,296,297,300,468,469,297,300,301,304,301,142,304,297,301,300,469,298,297,297,298,301,469,470,298,301,141,142,298,141,301,141,313,142,470,140,298,298,140,141,470,471,140,141,312,313,140,312,141,312,310,313,471,311,140,140,311,312,471,479,311,312,309,310,311,309,312,309,307,310,479,308,311,311,308,309,479,478,308,309,306,307, +308,306,309,306,476,307,306,475,476,478,305,308,308,305,306,305,475,306,478,472,305,305,473,475,472,473,305,472,474,473,484,485,146,484,146,316,483,484,316,316,146,147,483,316,315,482,483,315,316,147,319,315,316,319,319,147,148,482,315,314,480,482,314,480,314,481,315,319,318,314,315,318,319,148,322,318,319,322,322,148,388,481,314,317,314,318,317,481,317,486,318,322,321,317,318,321,322,388,411,321,322,411,515,411,388,486,317,320,317,321,320,486,320,487,515,157,411,514,157,515,321,411,410,320,321,410,157,410,411,487,320,409,320,410,409,487,409,488,514,349,157,513,349,514,157,156,410,156,409,410,349,156,157,155,488,409,156,155,409,155,508,488,513,348,349,512,348,513,349,346,156,346,155,156,348,346,349,343,508,155,346,343,155,343,507,508,512,347,348,511,347,512,511,510,347,348,345,346,345,343,346,347,345,348,342,507,343,345,342,343,342,506,507,510,344,347,347,344,345,344,342,345,510,509,344,341,506,342,344,341,342,509,341,344,341,504,506,509,503,341,503,504,341,503,505,504,489,490,92,489,92,323,491,489,323,323,92,93,491,323,326,492,491,326,323,93,324,326,323,324,324,93,94,492,326,329,493,492,329,493,329,494,324,94,325,325,94,393,326,324,327,329,326,327,327,324,325,494,329,330,329,327,330,494,330,495,325,393,406,25,406,393,327,325,328,330,327,328,328,325,406,495,330,331,330,328,331,495,331,496,25,149,406,97,149,25,328,406,407,331,328,407,149,407,406,496,331,408,331,407,408,496,408,497,97,338,149,96,338,97,149,150,407,150,408,407,338,150,149,151,497,408,150,151,408,151,12,497,96,335,338,95,335,96,338,339,150,339,151,150,335,339,338,340,12,151,339,340,151,340,154,12,95,332,335,498,332,95,498,499,332,335,336,339,336,340,339,332,336,335,337,154,340,336,337,340,337,153,154,499,333,332,332,333,336,333,337,336,499,500,333,334,153,337,333,334,337,500,334,333,334,152,153,500,501,334,501,152,334,501,502,152,525,527,526,525,526,359,531,525,359,359,526,528,531,359,362,532,531,362,359,528,360,362,359,360,360,528,529,532,362,365,521,532,365,360,529,361,361,529,530,362,360,363,365,362,363,363,360,361,521,365,158,520,521,158,361,530,412, +541,412,530,363,361,364,364,361,412,365,363,366,158,365,366,366,363,364,520,158,352,519,520,352,541,161,412,540,161,541,158,366,159,352,158,159,364,412,413,161,413,412,366,364,367,159,366,367,367,364,413,519,352,351,518,519,351,540,374,161,539,374,540,352,159,355,351,352,355,159,367,160,355,159,160,367,413,414,160,367,414,161,162,413,374,162,161,162,414,413,518,351,350,516,518,350,516,350,517,351,355,354,350,351,354,517,350,353,350,354,353,517,353,522,355,160,358,354,355,358,160,414,389,358,160,389,162,163,414,163,389,414,522,353,356,522,356,523,353,354,357,354,358,357,353,357,356,358,389,417,357,358,417,523,356,415,523,415,524,356,357,416,357,417,416,356,416,415,13,417,389,163,13,389,375,163,162,374,375,162,167,524,415,167,547,524,169,416,417,13,169,417,168,415,416,168,167,415,169,168,416,376,13,163,375,376,163,371,375,374,539,371,374,534,371,539,379,547,167,379,546,547,166,169,13,376,166,13,382,167,168,382,379,167,385,168,169,166,385,169,385,382,168,371,372,375,372,376,375,534,368,371,368,372,371,533,368,534,533,535,368,535,369,368,368,369,372,535,536,369,372,373,376,373,166,376,369,373,372,536,370,369,369,370,373,536,537,370,373,165,166,370,165,373,165,385,166,537,164,370,370,164,165,537,538,164,165,384,385,164,384,165,384,382,385,538,383,164,164,383,384,538,549,383,384,381,382,383,381,384,381,379,382,549,380,383,383,380,381,549,548,380,381,378,379,380,378,381,378,546,379,378,545,546,548,377,380,380,377,378,377,545,378,548,542,377,377,543,545,542,543,377,542,544,543 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + Layer: 1 { + Version: 100 + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 1 + } + } + } + Geometry: 140631868305376, "Geometry::Scene", "Mesh" { + Vertices: *24 { + a: -50,-50,50,50,-50,50,-50,50,50,50,50,50,-50,50,-50,50,50,-50,-50,-50,-50,50,-50,-50 + } + PolygonVertexIndex: *36 { + a: 0,3,-3,0,1,-4,2,5,-5,2,3,-6,4,7,-7,4,5,-8,6,1,-1,6,7,-2,1,5,-4,1,7,-6,6,2,-5,6,0,-3 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *108 { + a: -0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0 + } + NormalsW: *36 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *108 { + a: 0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0 + } + BinormalsW: *36 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *108 { + a: 1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1 + } + TangentsW: *36 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "UVSet0" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *48 { + a: 0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0 + } + UVIndex: *36 { + a: 0,3,2,0,1,3,8,5,4,8,9,5,10,7,6,10,11,7,12,14,13,12,15,14,16,18,17,16,19,18,20,22,21,20,23,22 + } + } + LayerElementUV: 1 { + Version: 101 + Name: "UVSet1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *48 { + a: 0.690986514091492,0.347164392471313,0.996658086776733,0.347164392471313,0.690986514091492,0.652835845947266,0.996658086776733,0.652835845947266,0.309727311134338,0.347164243459702,0.00405576638877392,0.347164243459702,0.347164243459702,0.652835845947266,0.652835845947266,0.652835845947266,0.309727311134338,0.652835845947266,0.00405576638877392,0.652835845947266,0.347164243459702,0.347164243459702,0.652835845947266,0.347164243459702,0.347164243459702,0.00405576638877392,0.347164243459702,0.309727311134338,0.652835845947266,0.309727311134338,0.652835845947266,0.00405576638877392,0.690272808074951,0.309727311134338,0.995944261550903,0.309727311134338,0.995944261550903,0.00405576638877392,0.690272808074951,0.00405576638877392,0.309727311134338,0.00405576638877392,0.00405576638877392,0.00405576638877392,0.00405576638877392,0.309727311134338,0.309727311134338,0.309727311134338 + } + UVIndex: *36 { + a: 0,3,2,0,1,3,8,5,4,8,9,5,10,7,6,10,11,7,12,14,13,12,15,14,16,18,17,16,19,18,20,22,21,20,23,22 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + Layer: 1 { + Version: 100 + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 1 + } + } + } + Geometry: 140631868319408, "Geometry::Scene", "Mesh" { + Vertices: *363 { + a: -500,-1.11022302462516e-14,500,-400,-1.11022302462516e-14,500,-300,-1.11022302462516e-14,500,-199.999988079071,-1.11022302462516e-14,500,-99.9999940395355,-1.11022302462516e-14,500,-0,-1.11022302462516e-14,500,100.000023841858,-1.11022302462516e-14,500,199.999988079071,-1.11022302462516e-14,500,300,-1.11022302462516e-14,500,400.000047683716,-1.11022302462516e-14,500,500,-1.11022302462516e-14,500,-500,-8.88178432935015e-15,400,-400,-8.88178432935015e-15,400,-300,-8.88178432935015e-15,400,-199.999988079071,-8.88178432935015e-15,400,-99.9999940395355,-8.88178432935015e-15,400,-0,-8.88178432935015e-15,400,100.000023841858,-8.88178432935015e-15,400,199.999988079071,-8.88178432935015e-15,400,300,-8.88178432935015e-15,400,400.000047683716,-8.88178432935015e-15,400,500,-8.88178432935015e-15,400,-500,-6.66133841244874e-15,300,-400,-6.66133841244874e-15,300,-300,-6.66133841244874e-15,300,-199.999988079071,-6.66133841244874e-15,300,-99.9999940395355,-6.66133841244874e-15,300,-0,-6.66133841244874e-15,300,100.000023841858,-6.66133841244874e-15,300,199.999988079071,-6.66133841244874e-15,300,300,-6.66133841244874e-15,300,400.000047683716,-6.66133841244874e-15,300,500,-6.66133841244874e-15,300,-500,-4.44089183380283e-15,199.999988079071,-400,-4.44089183380283e-15,199.999988079071,-300,-4.44089183380283e-15,199.999988079071,-199.999988079071,-4.44089183380283e-15,199.999988079071,-99.9999940395355,-4.44089183380283e-15,199.999988079071,-0,-4.44089183380283e-15,199.999988079071,100.000023841858,-4.44089183380283e-15,199.999988079071,199.999988079071,-4.44089183380283e-15,199.999988079071,300,-4.44089183380283e-15,199.999988079071,400.000047683716,-4.44089183380283e-15,199.999988079071,500,-4.44089183380283e-15,199.999988079071,-500,-2.22044591690142e-15,99.9999940395355,-400,-2.22044591690142e-15,99.9999940395355,-300,-2.22044591690142e-15,99.9999940395355,-199.999988079071,-2.22044591690142e-15,99.9999940395355,-99.9999940395355,-2.22044591690142e-15,99.9999940395355,-0,-2.22044591690142e-15,99.9999940395355,100.000023841858,-2.22044591690142e-15,99.9999940395355, +199.999988079071,-2.22044591690142e-15,99.9999940395355,300,-2.22044591690142e-15,99.9999940395355,400.000047683716,-2.22044591690142e-15,99.9999940395355,500,-2.22044591690142e-15,99.9999940395355,-500,0,0,-400,0,0,-300,0,0,-199.999988079071,0,0,-99.9999940395355,0,0,-0,0,0,100.000023841858,0,0,199.999988079071,0,0,300,0,0,400.000047683716,0,0,500,0,0,-500,2.22044657864591e-15,-100.000023841858,-400,2.22044657864591e-15,-100.000023841858,-300,2.22044657864591e-15,-100.000023841858,-199.999988079071,2.22044657864591e-15,-100.000023841858,-99.9999940395355,2.22044657864591e-15,-100.000023841858,-0,2.22044657864591e-15,-100.000023841858,100.000023841858,2.22044657864591e-15,-100.000023841858,199.999988079071,2.22044657864591e-15,-100.000023841858,300,2.22044657864591e-15,-100.000023841858,400.000047683716,2.22044657864591e-15,-100.000023841858,500,2.22044657864591e-15,-100.000023841858,-500,4.44089183380283e-15,-199.999988079071,-400,4.44089183380283e-15,-199.999988079071,-300,4.44089183380283e-15,-199.999988079071,-199.999988079071,4.44089183380283e-15,-199.999988079071,-99.9999940395355,4.44089183380283e-15,-199.999988079071,-0,4.44089183380283e-15,-199.999988079071,100.000023841858,4.44089183380283e-15,-199.999988079071,199.999988079071,4.44089183380283e-15,-199.999988079071,300,4.44089183380283e-15,-199.999988079071,400.000047683716,4.44089183380283e-15,-199.999988079071,500,4.44089183380283e-15,-199.999988079071,-500,6.66133841244874e-15,-300,-400,6.66133841244874e-15,-300,-300,6.66133841244874e-15,-300,-199.999988079071,6.66133841244874e-15,-300,-99.9999940395355,6.66133841244874e-15,-300,-0,6.66133841244874e-15,-300,100.000023841858,6.66133841244874e-15,-300,199.999988079071,6.66133841244874e-15,-300,300,6.66133841244874e-15,-300,400.000047683716,6.66133841244874e-15,-300,500,6.66133841244874e-15,-300,-500,8.88178499109464e-15,-400.000047683716,-400,8.88178499109464e-15,-400.000047683716,-300,8.88178499109464e-15,-400.000047683716,-199.999988079071,8.88178499109464e-15,-400.000047683716,-99.9999940395355,8.88178499109464e-15,-400.000047683716, +-0,8.88178499109464e-15,-400.000047683716,100.000023841858,8.88178499109464e-15,-400.000047683716,199.999988079071,8.88178499109464e-15,-400.000047683716,300,8.88178499109464e-15,-400.000047683716,400.000047683716,8.88178499109464e-15,-400.000047683716,500,8.88178499109464e-15,-400.000047683716,-500,1.11022302462516e-14,-500,-400,1.11022302462516e-14,-500,-300,1.11022302462516e-14,-500,-199.999988079071,1.11022302462516e-14,-500,-99.9999940395355,1.11022302462516e-14,-500,-0,1.11022302462516e-14,-500,100.000023841858,1.11022302462516e-14,-500,199.999988079071,1.11022302462516e-14,-500,300,1.11022302462516e-14,-500,400.000047683716,1.11022302462516e-14,-500,500,1.11022302462516e-14,-500 + } + PolygonVertexIndex: *600 { + a: 9,10,-22,9,21,-21,8,9,-21,20,21,-33,8,20,-20,7,8,-20,20,32,-32,19,20,-32,31,32,-44,7,19,-19,6,7,-19,19,31,-31,18,19,-31,31,43,-43,30,31,-43,42,43,-55,6,18,-18,5,6,-18,18,30,-30,17,18,-30,30,42,-42,29,30,-42,42,54,-54,41,42,-54,53,54,-66,5,17,-17,4,5,-17,17,29,-29,16,17,-29,29,41,-41,28,29,-41,41,53,-53,40,41,-53,53,65,-65,52,53,-65,64,65,-77,4,16,-16,3,4,-16,16,28,-28,15,16,-28,28,40,-40,27,28,-40,40,52,-52,39,40,-52,52,64,-64,51,52,-64,64,76,-76,63,64,-76,75,76,-88,3,15,-15,2,3,-15,15,27,-27,14,15,-27,27,39,-39,26,27,-39,39,51,-51,38,39,-51,51,63,-63,50,51,-63,63,75,-75,62,63,-75,75,87,-87,74,75,-87,86,87,-99,86,98,-98,97,98,-110,74,86,-86,85,86,-98,62,74,-74,73,74,-86,50,62,-62,61,62,-74,38,50,-50,49,50,-62,97,109,-109,108,109,-121,108,120,-120,85,97,-97,96,97,-109,107,108,-120,96,108,-108,107,119,-119,73,85,-85,84,85,-97,61,73,-73,72,73,-85,95,96,-108,84,96,-96,106,107,-119,95,107,-107,106,118,-118,83,84,-96,72,84,-84,60,61,-73,49,61,-61,94,95,-107,83,95,-95,105,106,-118,94,106,-106,105,117,-117,71,72,-84,60,72,-72,82,83,-95,71,83,-83,93,94,-106,82,94,-94,104,105,-117,93,105,-105,104,116,-116,103,104,-116,103,115,-115,92,93,-105,92,104,-104,81,82,-94,81,93,-93,70,71,-83,70,82,-82,59,60,-72,59,71,-71,102,103,-115,102,114,-114,91,92,-104,91,103,-103,80,81,-93,80,92,-92,69,70,-82,69,81,-81,101,102,-114,101,113,-113,90,91,-103,90,102,-102,79,80,-92,79,91,-91,100,101,-113,100,112,-112,89,90,-102,89,101,-101,99,100,-112,99,111,-111,88,100,-100,88,89,-101,77,89,-89,78,90,-90,77,78,-90,78,79,-91,66,78,-78,66,67,-79,67,79,-79,55,67,-67,67,68,-80,68,80,-80,68,69,-81,55,56,-68,56,68,-68,44,56,-56,57,69,-69,56,57,-69,44,45,-57,45,57,-57,33,45,-45,57,58,-70,58,70,-70,58,59,-71,33,34,-46,22,34,-34,45,46,-58,46,58,-58,34,46,-46,47,59,-59,46,47,-59,22,23,-35,11,23,-23,34,35,-47,35,47,-47,23,35,-35,47,48,-60,48,60,-60,48,49,-61,11,12,-24,0,12,-12,0,1,-13,23,24,-36,12,24,-24,35,36,-48,36,48,-48,24,36,-36,37,49,-49,36,37,-49,37,38,-50,26,38,-38,1,13,-13,12,13,-25,1,2,-14,2,14,-14,24,25,-37,25,37,-37,25,26,-38,13, +25,-25,13,14,-26,14,26,-26 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *1800 { + a: -0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0, +-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0, +-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0 + } + NormalsW: *600 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *1800 { + a: 0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1, +0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1, +0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1 + } + BinormalsW: *600 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *1800 { + a: 1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0, +1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0 + } + TangentsW: *600 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "UVSet0" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *242 { + a: 0,0,0.100000001490116,0,0.200000002980232,0,0.300000011920929,0,0.400000005960464,0,0.5,0,0.600000023841858,0,0.699999988079071,0,0.800000011920929,0,0.900000035762787,0,1,0,0,0.100000001490116,0.100000001490116,0.100000001490116,0.200000002980232,0.100000001490116,0.300000011920929,0.100000001490116,0.400000005960464,0.100000001490116,0.5,0.100000001490116,0.600000023841858,0.100000001490116,0.699999988079071,0.100000001490116,0.800000011920929,0.100000001490116,0.900000035762787,0.100000001490116,1,0.100000001490116,0,0.200000002980232,0.100000001490116,0.200000002980232,0.200000002980232,0.200000002980232,0.300000011920929,0.200000002980232,0.400000005960464,0.200000002980232,0.5,0.200000002980232,0.600000023841858,0.200000002980232,0.699999988079071,0.200000002980232,0.800000011920929,0.200000002980232,0.900000035762787,0.200000002980232,1,0.200000002980232,0,0.300000011920929,0.100000001490116,0.300000011920929,0.200000002980232,0.300000011920929,0.300000011920929,0.300000011920929,0.400000005960464,0.300000011920929,0.5,0.300000011920929,0.600000023841858,0.300000011920929,0.699999988079071,0.300000011920929,0.800000011920929,0.300000011920929,0.900000035762787,0.300000011920929,1,0.300000011920929,0,0.400000005960464,0.100000001490116,0.400000005960464,0.200000002980232,0.400000005960464,0.300000011920929,0.400000005960464,0.400000005960464,0.400000005960464,0.5,0.400000005960464,0.600000023841858,0.400000005960464,0.699999988079071,0.400000005960464,0.800000011920929,0.400000005960464,0.900000035762787,0.400000005960464,1,0.400000005960464,0,0.5,0.100000001490116,0.5,0.200000002980232,0.5,0.300000011920929,0.5,0.400000005960464,0.5,0.5,0.5,0.600000023841858,0.5,0.699999988079071,0.5,0.800000011920929,0.5,0.900000035762787,0.5,1,0.5,0,0.600000023841858,0.100000001490116,0.600000023841858,0.200000002980232,0.600000023841858,0.300000011920929,0.600000023841858,0.400000005960464,0.600000023841858,0.5,0.600000023841858,0.600000023841858,0.600000023841858,0.699999988079071,0.600000023841858, +0.800000011920929,0.600000023841858,0.900000035762787,0.600000023841858,1,0.600000023841858,0,0.699999988079071,0.100000001490116,0.699999988079071,0.200000002980232,0.699999988079071,0.300000011920929,0.699999988079071,0.400000005960464,0.699999988079071,0.5,0.699999988079071,0.600000023841858,0.699999988079071,0.699999988079071,0.699999988079071,0.800000011920929,0.699999988079071,0.900000035762787,0.699999988079071,1,0.699999988079071,0,0.800000011920929,0.100000001490116,0.800000011920929,0.200000002980232,0.800000011920929,0.300000011920929,0.800000011920929,0.400000005960464,0.800000011920929,0.5,0.800000011920929,0.600000023841858,0.800000011920929,0.699999988079071,0.800000011920929,0.800000011920929,0.800000011920929,0.900000035762787,0.800000011920929,1,0.800000011920929,0,0.900000035762787,0.100000001490116,0.900000035762787,0.200000002980232,0.900000035762787,0.300000011920929,0.900000035762787,0.400000005960464,0.900000035762787,0.5,0.900000035762787,0.600000023841858,0.900000035762787,0.699999988079071,0.900000035762787,0.800000011920929,0.900000035762787,0.900000035762787,0.900000035762787,1,0.900000035762787,0,1,0.100000001490116,1,0.200000002980232,1,0.300000011920929,1,0.400000005960464,1,0.5,1,0.600000023841858,1,0.699999988079071,1,0.800000011920929,1,0.900000035762787,1,1,1 + } + UVIndex: *600 { + a: 9,10,21,9,21,20,8,9,20,20,21,32,8,20,19,7,8,19,20,32,31,19,20,31,31,32,43,7,19,18,6,7,18,19,31,30,18,19,30,31,43,42,30,31,42,42,43,54,6,18,17,5,6,17,18,30,29,17,18,29,30,42,41,29,30,41,42,54,53,41,42,53,53,54,65,5,17,16,4,5,16,17,29,28,16,17,28,29,41,40,28,29,40,41,53,52,40,41,52,53,65,64,52,53,64,64,65,76,4,16,15,3,4,15,16,28,27,15,16,27,28,40,39,27,28,39,40,52,51,39,40,51,52,64,63,51,52,63,64,76,75,63,64,75,75,76,87,3,15,14,2,3,14,15,27,26,14,15,26,27,39,38,26,27,38,39,51,50,38,39,50,51,63,62,50,51,62,63,75,74,62,63,74,75,87,86,74,75,86,86,87,98,86,98,97,97,98,109,74,86,85,85,86,97,62,74,73,73,74,85,50,62,61,61,62,73,38,50,49,49,50,61,97,109,108,108,109,120,108,120,119,85,97,96,96,97,108,107,108,119,96,108,107,107,119,118,73,85,84,84,85,96,61,73,72,72,73,84,95,96,107,84,96,95,106,107,118,95,107,106,106,118,117,83,84,95,72,84,83,60,61,72,49,61,60,94,95,106,83,95,94,105,106,117,94,106,105,105,117,116,71,72,83,60,72,71,82,83,94,71,83,82,93,94,105,82,94,93,104,105,116,93,105,104,104,116,115,103,104,115,103,115,114,92,93,104,92,104,103,81,82,93,81,93,92,70,71,82,70,82,81,59,60,71,59,71,70,102,103,114,102,114,113,91,92,103,91,103,102,80,81,92,80,92,91,69,70,81,69,81,80,101,102,113,101,113,112,90,91,102,90,102,101,79,80,91,79,91,90,100,101,112,100,112,111,89,90,101,89,101,100,99,100,111,99,111,110,88,100,99,88,89,100,77,89,88,78,90,89,77,78,89,78,79,90,66,78,77,66,67,78,67,79,78,55,67,66,67,68,79,68,80,79,68,69,80,55,56,67,56,68,67,44,56,55,57,69,68,56,57,68,44,45,56,45,57,56,33,45,44,57,58,69,58,70,69,58,59,70,33,34,45,22,34,33,45,46,57,46,58,57,34,46,45,47,59,58,46,47,58,22,23,34,11,23,22,34,35,46,35,47,46,23,35,34,47,48,59,48,60,59,48,49,60,11,12,23,0,12,11,0,1,12,23,24,35,12,24,23,35,36,47,36,48,47,24,36,35,37,49,48,36,37,48,37,38,49,26,38,37,1,13,12,12,13,24,1,2,13,2,14,13,24,25,36,25,37,36,25,26,37,13,25,24,13,14,25,14,26,25 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + } + Geometry: 140631868341152, "Geometry::Scene", "Mesh" { + Vertices: *1158 { + a: -28.7827134132385,-28.7827134132385,-28.7827134132385,-28.7827134132385,-28.7827134132385,28.7827134132385,28.7827134132385,-28.7827134132385,-28.7827134132385,28.7827134132385,-28.7827134132385,28.7827134132385,-28.8835436105728,28.7900388240814,-28.8835436105728,-28.8835436105728,28.7900388240814,28.8835436105728,28.8835436105728,28.7900388240814,-28.8835436105728,28.8835436105728,28.7900388240814,28.8835436105728,-0,-50,0,-4.76429695694947e-07,50,-4.76837147544984e-07,-50,-4.76429695694947e-07,-1.63912773132324e-05,-8.19558039211188e-06,-9.53707068873655e-07,50,50,4.76429695694947e-07,0,2.23517417907715e-05,3.27418078543626e-11,-50,5.34055288881063e-06,-35.2514654397964,-35.2514654397964,35.2514654397964,-35.2514654397964,0,-5.72204577053981e-06,-35.2514654397964,35.2514654397964,-35.2514654397964,-35.2514654397964,3.81469718035987e-06,-35.3691399097443,35.2788090705872,-1.14440915410796e-05,-5.72204577053981e-06,35.2788090705872,35.3691399097443,35.3691399097443,35.2788090705872,0,1.57356254248953e-05,35.2788090705872,-35.3691399097443,-35.3552252054214,-3.12866156593206e-09,35.3552252054214,-35.3691399097443,-0.0883646600414068,-35.3691399097443,35.3552252054214,3.12866156593206e-09,35.3552252054214,35.3691399097443,-0.0883611559402198,-35.3691399097443,-24.0192860364914,-30.8901369571686,-30.8901369571686,-17.0141592621803,-33.1347644329071,-33.1347644329071,-8.80602970719337,-34.6970200538635,-34.6970200538635,24.0192860364914,-30.8901369571686,-30.8901369571686,17.0141592621803,-33.1347644329071,-33.1347644329071,8.80602970719337,-34.6970200538635,-34.6970200538635,30.8901369571686,-30.8901369571686,-24.0192860364914,33.1347644329071,-33.1347644329071,-17.0141592621803,34.6970200538635,-34.6970200538635,-8.80602970719337,30.8901369571686,-30.8901369571686,24.0192860364914,33.1347644329071,-33.1347644329071,17.0141592621803,34.6970200538635,-34.6970200538635,8.80602970719337,24.0192860364914,-30.8901369571686,30.8901369571686,17.0141592621803,-33.1347644329071,33.1347644329071,8.80602970719337,-34.6970200538635,34.6970200538635, +-24.0192860364914,-30.8901369571686,30.8901369571686,-17.0141592621803,-33.1347644329071,33.1347644329071,-8.80602970719337,-34.6970200538635,34.6970200538635,-30.8901369571686,-30.8901369571686,24.0192860364914,-33.1347644329071,-33.1347644329071,17.0141592621803,-34.6970200538635,-34.6970200538635,8.80602970719337,-30.8901369571686,-30.8901369571686,-24.0192860364914,-33.1347644329071,-33.1347644329071,-17.0141592621803,-34.6970200538635,-34.6970200538635,-8.80602970719337,-30.9951156377792,30.9089362621307,-24.090576171875,-33.2473129034042,33.1569820642471,-17.0712888240814,-34.8127424716949,34.7226560115814,-8.83544906973839,-30.9951156377792,30.9089362621307,24.090576171875,-33.2473129034042,33.1569820642471,17.0712888240814,-34.8127424716949,34.7226560115814,8.83544906973839,-24.090576171875,30.9089362621307,30.9951156377792,-17.0712888240814,33.1569820642471,33.2473129034042,-8.83544906973839,34.7226560115814,34.8127424716949,24.090576171875,30.9089362621307,30.9951156377792,17.0712888240814,33.1569820642471,33.2473129034042,8.83544906973839,34.7226560115814,34.8127424716949,30.9951156377792,30.9089362621307,24.090576171875,33.2473129034042,33.1569820642471,17.0712888240814,34.8127424716949,34.7226560115814,8.83544906973839,30.9951156377792,30.9089362621307,-24.090576171875,33.2473129034042,33.1569820642471,-17.0712888240814,34.8127424716949,34.7226560115814,-8.83544906973839,24.090576171875,30.9089362621307,-30.9951156377792,17.0712888240814,33.1569820642471,-33.2473129034042,8.83544906973839,34.7226560115814,-34.8127424716949,-24.090576171875,30.9089362621307,-30.9951156377792,-17.0712888240814,33.1569820642471,-33.2473129034042,-8.83544906973839,34.7226560115814,-34.8127424716949,-30.8901369571686,-24.0192860364914,30.8901369571686,-33.1347644329071,-17.0141592621803,33.1347644329071,-34.6970200538635,-8.80602970719337,34.6970200538635,-30.9951156377792,24.017333984375,30.9951156377792,-33.2473129034042,16.9892579317093,33.2473129034042,-34.8127424716949,8.75067114830017,34.8127424716949,-30.9951156377792,24.017333984375,-30.9951156377792, +-33.2473129034042,16.9892579317093,-33.2473129034042,-34.8127424716949,8.75067114830017,-34.8127424716949,-30.8901369571686,-24.0192860364914,-30.8901369571686,-33.1347644329071,-17.0141592621803,-33.1347644329071,-34.6970200538635,-8.80602970719337,-34.6970200538635,30.8901369571686,-24.0192860364914,30.8901369571686,33.1347644329071,-17.0141592621803,33.1347644329071,34.6970200538635,-8.80602970719337,34.6970200538635,30.9951156377792,24.017333984375,30.9951156377792,33.2473129034042,16.9892579317093,33.2473129034042,34.8127424716949,8.75067114830017,34.8127424716949,30.8901369571686,-24.0192860364914,-30.8901369571686,33.1347644329071,-17.0141592621803,-33.1347644329071,34.6970200538635,-8.80602970719337,-34.6970200538635,30.9951156377792,24.017333984375,-30.9951156377792,33.2473129034042,16.9892579317093,-33.2473129034042,34.8127424716949,8.75067114830017,-34.8127424716949,1.8119752809298e-06,-41.2363260984421,-28.0158698558807,3.91007048961001e-06,-45.8554685115814,-19.5605471730232,1.18255405467949e-06,-48.8232403993607,-10.0794672966003,28.0158698558807,-41.2363260984421,1.90734859017994e-06,19.5605471730232,-45.8554685115814,-3.81469356103281e-08,10.0795283913612,-48.8232403993607,0,-4.76837129781416e-06,-41.2363260984421,28.0158698558807,2.00272189943007e-06,-45.8554685115814,19.5605471730232,2.13623572165034e-06,-48.8232403993607,10.0794672966003,-28.0158698558807,-41.2363260984421,3.81469718035987e-06,-19.5605471730232,-45.8554685115814,1.94548910315007e-06,-10.0794672966003,-48.8232403993607,-9.53674295089968e-07,-28.11498939991,41.2861317396164,-9.05990589217254e-06,-19.6275636553764,45.9101557731628,-6.19888282926695e-06,-10.1136475801468,48.8857418298721,-3.21865059049742e-06,-4.76837129781416e-06,41.2861317396164,28.11498939991,-3.09944141463347e-06,45.9101557731628,19.6275636553764,-1.54972070731674e-06,48.8857418298721,10.1135864853859,28.11498939991,41.2861317396164,0,19.6275636553764,45.9101557731628,0,10.1135864853859,48.8857418298721,0,1.23977656585339e-05,41.2861317396164,-28.11498939991,8.58306847817403e-06,45.9101557731628,-19.6275636553764, +4.41074377022233e-06,48.8857418298721,-10.1135864853859,-41.2363260984421,-28.0158698558807,-3.81469718035987e-06,-45.8554685115814,-19.5605471730232,-7.66752066283516e-06,-48.8232403993607,-10.0795283913612,-3.81469718035987e-06,-41.5734857320786,2.2700986923585e-09,27.7785629034042,-46.1938470602036,3.49245944664123e-09,19.1341549158096,-49.0390628576279,7.27595761418343e-10,9.75451618432999,-41.3747549057007,28.0222147703171,-1.33514404865309e-05,-45.9843724966049,19.5458978414536,-1.52587887214395e-05,-48.9658206701279,10.0296631455421,-1.62124635494365e-05,-41.3747549057007,-0.0883647182490677,-28.11498939991,-45.9843724966049,-0.0883646425791085,-19.6275636553764,-48.9658206701279,-0.0883650849573314,-10.1135864853859,-6.67572024326546e-06,-28.0158698558807,41.2363260984421,-7.57176863430686e-06,-19.5605471730232,45.8554685115814,-8.0381610700897e-06,-10.0795283913612,48.8232403993607,27.7785629034042,3.14321346728264e-09,41.5734857320786,19.1341549158096,-8.07631305582701e-10,46.1938470602036,9.75451618432999,3.58886600992925e-09,49.0390628576279,-6.67572024326546e-06,28.0222147703171,41.3747549057007,-7.62939436071974e-06,19.5458978414536,45.9843724966049,-7.62939436071974e-06,10.029724240303,48.9658206701279,-27.7785629034042,-3.14321346728264e-09,41.5734857320786,-19.1341549158096,8.07631305582701e-10,46.1938470602036,-9.75451618432999,-3.60523694231674e-09,49.0390628576279,41.2363260984421,-28.0158698558807,3.81469718035987e-06,45.8554685115814,-19.5605471730232,3.85285225945609e-06,48.8232403993607,-10.0794672966003,3.81469718035987e-06,41.3747549057007,-0.0883609754964709,-28.11498939991,45.9843724966049,-0.0883605738636106,-19.6275636553764,48.9658206701279,-0.088360597146675,-10.1135864853859,41.3747549057007,28.0222147703171,0,45.9843724966049,19.5458978414536,0,48.9658206701279,10.029724240303,0,41.5734857320786,-2.31375439641024e-09,27.7785629034042,46.1938470602036,-3.49245944664123e-09,19.1341549158096,49.0390628576279,-7.27595761418343e-10,9.75451618432999,-2.59399524082937e-06,-28.0158698558807,-41.2363260984421, +8.39230729354767e-07,-19.5605471730232,-45.8554685115814,-3.35692291741907e-06,-10.0795283913612,-48.8232403993607,-28.11498939991,-0.0883634202182293,-41.3747549057007,-19.6275636553764,-0.088363786926493,-45.9843724966049,-10.1135864853859,-0.0883628847077489,-48.9658206701279,1.81198117843451e-05,28.0222147703171,-41.3747549057007,2.09808348472507e-05,19.5458978414536,-45.9843724966049,2.19345082541622e-05,10.029724240303,-48.9658206701279,28.11498939991,-0.0883614702615887,-41.3747549057007,19.6275636553764,-0.0883618369698524,-45.9843724966049,10.1135864853859,-0.088362512178719,-48.9658206701279,-24.8503416776657,-35.3586405515671,-24.8503416776657,-17.4877926707268,-38.5236799716949,-26.3708502054214,-9.02123972773552,-40.5581057071686,-27.5495588779449,-26.3708502054214,-38.5236799716949,-17.4877926707268,-18.3942869305611,-42.5278306007385,-18.3942869305611,-9.45074409246445,-45.0263649225235,-19.1999509930611,-27.5495588779449,-40.5581057071686,-9.02123972773552,-19.1999509930611,-45.0263649225235,-9.45074409246445,-9.87524390220642,-47.8569328784943,-9.87524390220642,24.8503416776657,-35.3586405515671,-24.8503416776657,26.3708502054214,-38.5236799716949,-17.4877926707268,27.5495588779449,-40.5581057071686,-9.02123972773552,17.4877926707268,-38.5236799716949,-26.3708502054214,18.3942869305611,-42.5278306007385,-18.3942869305611,19.1999509930611,-45.0263649225235,-9.45074409246445,9.02123972773552,-40.5581057071686,-27.5495588779449,9.45074409246445,-45.0263649225235,-19.1999509930611,9.87524390220642,-47.8569328784943,-9.87524390220642,24.8503416776657,-35.3586405515671,24.8503416776657,17.4877926707268,-38.5236799716949,26.3708502054214,9.02123972773552,-40.5581057071686,27.5495588779449,26.3708502054214,-38.5236799716949,17.4877926707268,18.3942869305611,-42.5278306007385,18.3942869305611,9.45074409246445,-45.0263649225235,19.1999509930611,27.5495588779449,-40.5581057071686,9.02123972773552,19.1999509930611,-45.0263649225235,9.45074409246445,9.87524390220642,-47.8569328784943,9.87524390220642,-24.8503416776657,-35.3586405515671,24.8503416776657, +-26.3708502054214,-38.5236799716949,17.4877926707268,-27.5495588779449,-40.5581057071686,9.02123972773552,-17.4877926707268,-38.5236799716949,26.3708502054214,-18.3942869305611,-42.5278306007385,18.3942869305611,-19.1999509930611,-45.0263649225235,9.45074409246445,-9.02123972773552,-40.5581057071686,27.5495588779449,-9.45074409246445,-45.0263649225235,19.1999509930611,-9.87524390220642,-47.8569328784943,9.87524390220642,-24.9235838651657,35.3859841823578,-24.9235838651657,-26.4643549919128,38.5637193918228,-17.5456538796425,-27.6474595069885,40.6079083681107,-9.0519405901432,-17.5456538796425,38.5637193918228,-26.4643549919128,-18.4566646814346,42.578125,-18.4566646814346,-19.2635491490364,45.0810551643372,-9.48211625218391,-9.0519405901432,40.6079083681107,-27.6474595069885,-9.48211625218391,45.0810551643372,-19.2635491490364,-9.90875214338303,47.9199200868607,-9.90875214338303,-24.9235838651657,35.3859841823578,24.9235838651657,-17.5456538796425,38.5637193918228,26.4643549919128,-9.0519405901432,40.6079083681107,27.6474595069885,-26.4643549919128,38.5637193918228,17.5456538796425,-18.4566646814346,42.578125,18.4566646814346,-9.48211625218391,45.0810551643372,19.2635491490364,-27.6474595069885,40.6079083681107,9.0519405901432,-19.2635491490364,45.0810551643372,9.48211625218391,-9.90875214338303,47.9199200868607,9.90875214338303,24.9235838651657,35.3859841823578,24.9235838651657,26.4643549919128,38.5637193918228,17.5456538796425,27.6474595069885,40.6079083681107,9.0519405901432,17.5456538796425,38.5637193918228,26.4643549919128,18.4566646814346,42.578125,18.4566646814346,19.2635491490364,45.0810551643372,9.48211625218391,9.0519405901432,40.6079083681107,27.6474595069885,9.48211625218391,45.0810551643372,19.2635491490364,9.90875214338303,47.9199200868607,9.90875214338303,24.9235838651657,35.3859841823578,-24.9235838651657,17.5456538796425,38.5637193918228,-26.4643549919128,9.05187949538231,40.6079083681107,-27.6474595069885,26.4643549919128,38.5637193918228,-17.5456538796425,18.4566646814346,42.578125,-18.4566646814346, +9.48211625218391,45.0810551643372,-19.2635491490364,27.6474595069885,40.6079083681107,-9.0519405901432,19.2635491490364,45.0810551643372,-9.48211625218391,9.90875214338303,47.9199200868607,-9.90875214338303,-35.3586405515671,-24.8503416776657,-24.8503416776657,-38.5236799716949,-26.3708502054214,-17.4877926707268,-40.5581057071686,-27.5495588779449,-9.02123972773552,-38.5236799716949,-17.4879148602486,-26.3708502054214,-42.5278306007385,-18.3942869305611,-18.3942869305611,-45.0263649225235,-19.1999509930611,-9.45074409246445,-40.5581057071686,-9.02123972773552,-27.5495588779449,-45.0263649225235,-9.45074409246445,-19.1999509930611,-47.8569328784943,-9.87524390220642,-9.87524390220642,-35.3586405515671,-24.8503416776657,24.8503416776657,-38.5236799716949,-17.4879148602486,26.3708502054214,-40.5581057071686,-9.02123972773552,27.5495588779449,-38.5236799716949,-26.3708502054214,17.4877926707268,-42.5278306007385,-18.3942869305611,18.3942869305611,-45.0263649225235,-9.45074409246445,19.1999509930611,-40.5581057071686,-27.5495588779449,9.02123972773552,-45.0263649225235,-19.1999509930611,9.45074409246445,-47.8569328784943,-9.87524390220642,9.87524390220642,-35.4750961065292,24.8503416776657,24.9235838651657,-38.6508792638779,26.3747543096542,17.5456538796425,-40.6967759132385,27.555176615715,9.0519405901432,-38.6508792638779,17.4652099609375,26.4643549919128,-42.6503896713257,18.3742672204971,18.4566646814346,-45.1552718877792,19.1842034459114,9.48211625218391,-40.6967759132385,8.96771252155304,27.6474595069885,-45.1552718877792,9.39825400710106,19.2635491490364,-47.9956030845642,9.82379093766212,9.90875214338303,-35.4750961065292,24.8503416776657,-24.9235838651657,-38.6508792638779,17.4652099609375,-26.4643549919128,-40.6967759132385,8.96771252155304,-27.6474595069885,-38.6508792638779,26.3747543096542,-17.5456538796425,-42.6503896713257,18.3742672204971,-18.4566646814346,-45.1552718877792,9.39825400710106,-19.2635491490364,-40.6967759132385,27.555176615715,-9.05187949538231,-45.1552718877792,19.1842034459114,-9.48211625218391, +-47.9956030845642,9.82379093766212,-9.90875214338303,-24.8503416776657,-24.8503416776657,35.3586405515671,-17.4879148602486,-26.3708502054214,38.5236799716949,-9.02117863297462,-27.5495588779449,40.5581057071686,-26.3708502054214,-17.4879148602486,38.5236799716949,-18.3942869305611,-18.3942869305611,42.5278306007385,-9.45074409246445,-19.1999509930611,45.0263649225235,-27.5495588779449,-9.02123972773552,40.5581057071686,-19.1999509930611,-9.45074409246445,45.0263649225235,-9.87524390220642,-9.87524390220642,47.8569328784943,24.8503416776657,-24.8503416776657,35.3586405515671,26.3708502054214,-17.4877926707268,38.5236799716949,27.5495588779449,-9.02123972773552,40.5581057071686,17.4877926707268,-26.3708502054214,38.5236799716949,18.3942869305611,-18.3942869305611,42.5278306007385,19.1999509930611,-9.45074409246445,45.0263649225235,9.02117863297462,-27.5495588779449,40.5581057071686,9.45074409246445,-19.1999509930611,45.0263649225235,9.87524390220642,-9.87524390220642,47.8569328784943,24.9235838651657,24.8503416776657,35.4750961065292,17.5456538796425,26.3747543096542,38.6508792638779,9.0519405901432,27.555176615715,40.6967759132385,26.4643549919128,17.4653321504593,38.6508792638779,18.4566646814346,18.3742672204971,42.6503896713257,9.48211625218391,19.1842034459114,45.1552718877792,27.6474595069885,8.96771252155304,40.6967759132385,19.2635491490364,9.39825400710106,45.1552718877792,9.90875214338303,9.82379093766212,47.9956030845642,-24.9235838651657,24.8503416776657,35.4750961065292,-26.4643549919128,17.4653321504593,38.6508792638779,-27.6474595069885,8.96771252155304,40.6967759132385,-17.5456538796425,26.3747543096542,38.6508792638779,-18.4566646814346,18.3742672204971,42.6503896713257,-19.2635491490364,9.39825400710106,45.1552718877792,-9.0519405901432,27.555176615715,40.6967759132385,-9.48211625218391,19.1842034459114,45.1552718877792,-9.90875214338303,9.82379093766212,47.9956030845642,35.3586405515671,-24.8503416776657,24.8503416776657,38.5236799716949,-26.3708502054214,17.4879148602486,40.5581057071686,-27.5495588779449,9.02123972773552, +38.5236799716949,-17.4877926707268,26.3708502054214,42.5278306007385,-18.3942869305611,18.3942869305611,45.0263649225235,-19.1999509930611,9.45074409246445,40.5581057071686,-9.02123972773552,27.5495588779449,45.0263649225235,-9.45074409246445,19.1999509930611,47.8569328784943,-9.87524390220642,9.87524390220642,35.3586405515671,-24.8503416776657,-24.8503416776657,38.5236799716949,-17.4877926707268,-26.3708502054214,40.5581057071686,-9.02123972773552,-27.5495588779449,38.5236799716949,-26.3708502054214,-17.4877926707268,42.5278306007385,-18.3942869305611,-18.3942869305611,45.0263649225235,-9.45074409246445,-19.1999509930611,40.5581057071686,-27.5495588779449,-9.02123972773552,45.0263649225235,-19.1999509930611,-9.45074409246445,47.8569328784943,-9.87524390220642,-9.87524390220642,35.4750961065292,24.8503416776657,-24.9235838651657,38.6508792638779,26.3747543096542,-17.5456538796425,40.6967759132385,27.555176615715,-9.0519405901432,38.6508792638779,17.4653321504593,-26.4643549919128,42.6503896713257,18.3742672204971,-18.4566646814346,45.1552718877792,19.1842034459114,-9.48211625218391,40.6967759132385,8.96771252155304,-27.6474595069885,45.1552718877792,9.39825400710106,-19.2635491490364,47.9956030845642,9.82379093766212,-9.90875214338303,35.4750961065292,24.8503416776657,24.9235838651657,38.6508792638779,17.4653321504593,26.4643549919128,40.6967759132385,8.96771252155304,27.6474595069885,38.6508792638779,26.3747543096542,17.5456538796425,42.6503896713257,18.3742672204971,18.4566646814346,45.1552718877792,9.39825400710106,19.2635491490364,40.6967759132385,27.555176615715,9.0519405901432,45.1552718877792,19.1842034459114,9.48211625218391,47.9956030845642,9.82379093766212,9.90875214338303,24.8503416776657,-24.8503416776657,-35.3586405515671,17.4879148602486,-26.3708502054214,-38.5236799716949,9.02123972773552,-27.5495588779449,-40.5581057071686,26.3708502054214,-17.4877926707268,-38.5236799716949,18.3942869305611,-18.3942869305611,-42.5278306007385,9.45074409246445,-19.1999509930611,-45.0263649225235,27.5495588779449,-9.02123972773552,-40.5581057071686, +19.1999509930611,-9.45074409246445,-45.0263649225235,9.87524390220642,-9.87524390220642,-47.8569328784943,-24.8503416776657,-24.8503416776657,-35.3586405515671,-26.3708502054214,-17.4879148602486,-38.5236799716949,-27.5495588779449,-9.02123972773552,-40.5581057071686,-17.4877926707268,-26.3708502054214,-38.5236799716949,-18.3942869305611,-18.3942869305611,-42.5278306007385,-19.1999509930611,-9.45074409246445,-45.0263649225235,-9.02123972773552,-27.5495588779449,-40.5581057071686,-9.45074409246445,-19.1999509930611,-45.0263649225235,-9.87524390220642,-9.87524390220642,-47.8569328784943,-24.9235838651657,24.8503416776657,-35.4750961065292,-17.5456538796425,26.3747543096542,-38.6508792638779,-9.05187949538231,27.555176615715,-40.6967759132385,-26.4643549919128,17.4653321504593,-38.6508792638779,-18.4566646814346,18.3742672204971,-42.6503896713257,-9.48211625218391,19.1842034459114,-45.1552718877792,-27.6474595069885,8.96771252155304,-40.6967759132385,-19.2635491490364,9.39825400710106,-45.1552718877792,-9.90875214338303,9.82379093766212,-47.9956030845642,24.9235838651657,24.8503416776657,-35.4750961065292,26.4643549919128,17.4653321504593,-38.6508792638779,27.6474595069885,8.96771252155304,-40.6967759132385,17.5456538796425,26.3747543096542,-38.6508792638779,18.4566646814346,18.3742672204971,-42.6503896713257,19.2635491490364,9.39825400710106,-45.1552718877792,9.05187949538231,27.555176615715,-40.6967759132385,9.48211625218391,19.1842034459114,-45.1552718877792,9.90875214338303,9.82379093766212,-47.9956030845642 + } + PolygonVertexIndex: *2304 { + a: 177,178,-110,174,178,-178,173,174,-178,173,177,-177,176,177,-109,177,109,-109,178,8,-110,205,108,-110,174,175,-179,175,100,-179,178,100,-9,170,174,-174,171,175,-175,170,171,-175,48,173,-177,47,173,-49,47,170,-174,0,170,-48,0,26,-171,26,171,-171,48,176,-50,26,27,-172,49,176,-108,49,107,-18,176,108,-108,27,172,-172,171,172,-176,27,28,-173,199,17,-108,199,46,-18,202,107,-109,202,199,-108,205,202,-109,172,99,-176,175,99,-101,28,98,-173,172,98,-100,28,14,-99,198,46,-200,198,45,-47,201,199,-203,201,198,-200,14,185,-99,14,31,-186,98,186,-100,98,185,-187,99,187,-101,99,186,-188,197,45,-199,197,44,-46,31,182,-186,31,30,-183,100,187,-104,100,103,-9,187,102,-104,187,184,-103,186,184,-188,184,101,-103,185,183,-187,186,183,-185,185,182,-184,184,181,-102,183,181,-185,181,15,-102,181,34,-16,183,180,-182,180,34,-182,182,180,-184,180,33,-35,182,179,-181,179,33,-181,30,179,-183,179,32,-34,30,29,-180,29,32,-180,29,2,-33,106,109,-9,196,106,-9,193,106,-197,193,105,-107,105,205,-107,106,205,-110,105,204,-206,204,202,-206,204,201,-203,104,204,-106,203,201,-205,104,203,-205,190,105,-194,190,104,-106,203,200,-202,200,198,-202,200,197,-199,16,203,-105,40,16,-105,40,104,-191,16,43,-204,43,200,-204,43,42,-201,42,197,-201,42,41,-198,41,44,-198,41,1,-45,39,40,-191,39,190,-190,38,39,-190,189,190,-194,38,189,-189,3,38,-189,3,188,-36,189,193,-193,188,189,-193,192,193,-197,35,188,-192,188,192,-192,35,191,-37,192,196,-196,191,192,-196,36,191,-195,191,195,-195,36,194,-38,195,196,-104,196,8,-104,195,103,-103,194,195,-103,194,102,-102,37,194,-102,37,101,-16,214,9,-122,213,214,-122,210,214,-214,210,211,-215,211,112,-215,214,112,-10,213,121,-121,209,210,-214,212,213,-121,209,213,-213,207,211,-211,206,210,-210,206,207,-211,72,209,-213,71,209,-73,71,206,-210,4,206,-72,4,50,-207,50,207,-207,72,212,-74,50,51,-208,73,212,-120,212,120,-120,73,119,-22,51,208,-208,207,208,-212,51,52,-209,235,21,-120,235,70,-22,238,119,-121,238,235,-120,208,111,-212,211,111,-113,52,110,-209,208,110,-112,52,18,-111,234,70,-236,234,69,-71,18,221,-111,18,55,-222, +110,222,-112,110,221,-223,111,223,-113,111,222,-224,55,218,-222,55,54,-219,221,219,-223,221,218,-220,54,215,-219,54,53,-216,53,56,-216,53,5,-57,215,56,-58,218,215,-217,215,57,-217,218,216,-220,216,57,-59,216,58,-218,219,216,-218,217,58,-20,222,219,-221,219,217,-221,222,220,-224,217,19,-114,220,217,-114,61,113,-20,223,220,-115,220,113,-115,61,230,-114,230,114,-114,60,230,-62,223,114,-116,112,223,-116,112,115,-10,60,227,-231,59,227,-61,230,231,-115,231,115,-115,227,231,-231,59,224,-228,7,224,-60,7,62,-225,231,232,-116,232,9,-116,227,228,-232,224,228,-228,228,232,-232,62,225,-225,224,225,-229,62,63,-226,228,229,-233,225,229,-229,63,226,-226,225,226,-230,63,64,-227,229,118,-233,232,118,-10,229,117,-119,226,117,-230,226,116,-118,64,116,-227,64,20,-117,65,6,-69,65,68,-234,233,68,-70,66,65,-234,233,69,-235,66,233,-237,236,233,-235,67,66,-237,236,234,-238,237,234,-236,237,235,-239,67,236,-240,239,236,-238,20,67,-240,20,239,-117,239,237,-241,116,239,-241,240,237,-239,116,240,-118,240,238,-242,117,240,-242,241,238,-121,117,241,-119,241,120,-122,118,241,-122,118,121,-10,44,1,-75,44,74,-252,45,44,-252,251,74,-76,45,251,-255,46,45,-255,251,75,-253,254,251,-253,252,75,-77,46,254,-258,17,46,-258,252,76,-254,253,76,-23,254,252,-256,257,254,-256,255,252,-254,17,257,-123,49,17,-123,253,22,-126,79,125,-23,255,253,-257,256,253,-126,257,255,-259,122,257,-259,258,255,-257,49,122,-245,48,49,-245,79,266,-126,78,266,-80,122,258,-124,244,122,-124,256,125,-127,266,126,-126,258,256,-260,123,258,-260,259,256,-127,48,244,-244,47,48,-244,78,263,-267,77,263,-79,244,123,-248,243,244,-248,123,259,-125,247,123,-125,259,126,-128,124,259,-128,266,267,-127,263,267,-267,267,127,-127,47,243,-243,0,47,-243,0,242,-84,243,247,-247,242,243,-247,83,242,-246,242,246,-246,83,245,-85,247,124,-251,246,247,-251,124,127,-11,250,124,-11,267,268,-128,268,10,-128,84,245,-249,84,248,-86,245,246,-250,246,250,-250,245,249,-249,250,10,-134,249,250,-134,85,248,-132,85,131,-24,248,249,-133,249,133,-133,248,132,-132,130,133,-11,268,130,-11,264,268,-268,263,264,-268,271,23,-132, +271,82,-24,274,131,-133,274,271,-132,277,132,-134,130,277,-134,277,274,-133,265,130,-269,264,265,-269,260,264,-264,77,260,-264,5,260,-78,5,53,-261,260,261,-265,53,261,-261,261,265,-265,53,54,-262,54,262,-262,261,262,-266,54,55,-263,265,129,-131,262,129,-266,129,277,-131,55,128,-263,262,128,-130,55,18,-129,129,276,-278,128,276,-130,276,274,-278,18,275,-129,128,275,-277,18,52,-276,276,273,-275,275,273,-277,273,271,-275,52,272,-276,275,272,-274,52,51,-273,273,270,-272,272,270,-274,270,82,-272,270,81,-83,51,269,-273,272,269,-271,269,81,-271,51,50,-270,269,80,-82,50,80,-270,50,4,-81,38,3,-87,38,86,-288,39,38,-288,287,86,-88,39,287,-291,40,39,-291,287,87,-289,290,287,-289,288,87,-89,40,290,-294,16,40,-294,288,88,-290,289,88,-25,290,288,-292,293,290,-292,291,288,-290,16,293,-135,43,16,-135,289,24,-138,91,137,-25,291,289,-293,292,289,-138,293,291,-295,134,293,-295,294,291,-293,43,134,-281,42,43,-281,91,302,-138,90,302,-92,134,294,-136,280,134,-136,292,137,-139,302,138,-138,294,292,-296,135,294,-296,295,292,-139,42,280,-280,41,42,-280,90,299,-303,89,299,-91,280,135,-284,279,280,-284,135,295,-137,283,135,-137,295,138,-140,136,295,-140,302,303,-139,299,303,-303,303,139,-139,41,279,-279,1,41,-279,1,278,-75,279,283,-283,278,279,-283,74,278,-282,278,282,-282,74,281,-76,283,136,-287,282,283,-287,136,139,-12,286,136,-12,303,304,-140,304,11,-140,75,281,-285,75,284,-77,281,282,-286,282,286,-286,281,285,-285,286,11,-146,285,286,-146,76,284,-144,76,143,-23,284,285,-145,285,145,-145,284,144,-144,142,145,-12,304,142,-12,300,304,-304,299,300,-304,307,22,-144,307,79,-23,310,143,-145,310,307,-144,313,144,-146,142,313,-146,313,310,-145,301,142,-305,300,301,-305,296,300,-300,89,296,-300,7,296,-90,7,59,-297,296,297,-301,59,297,-297,297,301,-301,59,60,-298,60,298,-298,297,298,-302,60,61,-299,301,141,-143,298,141,-302,141,313,-143,61,140,-299,298,140,-142,61,19,-141,141,312,-314,140,312,-142,312,310,-314,19,311,-141,140,311,-313,19,58,-312,312,309,-311,311,309,-313,309,307,-311,58,308,-312,311,308,-310,58,57,-309,309,306,-308,308,306,-310,306, +79,-308,306,78,-80,57,305,-309,308,305,-307,305,78,-307,57,56,-306,305,77,-79,56,77,-306,56,5,-78,37,15,-147,37,146,-317,36,37,-317,316,146,-148,36,316,-316,35,36,-316,316,147,-320,315,316,-320,319,147,-149,35,315,-315,3,35,-315,3,314,-87,315,319,-319,314,315,-319,319,148,-323,318,319,-323,322,148,-13,86,314,-318,314,318,-318,86,317,-88,318,322,-322,317,318,-322,322,12,-158,321,322,-158,154,157,-13,87,317,-321,317,321,-321,87,320,-89,154,349,-158,153,349,-155,321,157,-157,320,321,-157,349,156,-158,88,320,-156,320,156,-156,88,155,-25,153,348,-350,152,348,-154,349,346,-157,346,155,-157,348,346,-350,343,24,-156,346,343,-156,343,91,-25,152,347,-349,20,347,-153,20,64,-348,348,345,-347,345,343,-347,347,345,-349,342,91,-344,345,342,-344,342,90,-92,64,344,-348,347,344,-346,344,342,-346,64,63,-345,341,90,-343,344,341,-343,63,341,-345,341,89,-91,63,62,-342,62,89,-342,62,7,-90,32,2,-93,32,92,-324,33,32,-324,323,92,-94,33,323,-327,34,33,-327,323,93,-325,326,323,-325,324,93,-95,34,326,-330,15,34,-330,15,329,-147,324,94,-326,325,94,-26,326,324,-328,329,326,-328,327,324,-326,146,329,-331,329,327,-331,146,330,-148,325,25,-150,97,149,-26,327,325,-329,330,327,-329,328,325,-150,147,330,-332,330,328,-332,147,331,-149,97,338,-150,96,338,-98,328,149,-151,331,328,-151,338,150,-150,148,331,-152,331,150,-152,148,151,-13,96,335,-339,95,335,-97,338,339,-151,339,151,-151,335,339,-339,340,12,-152,339,340,-152,340,154,-13,95,332,-336,6,332,-96,6,65,-333,335,336,-340,336,340,-340,332,336,-336,337,154,-341,336,337,-341,337,153,-155,65,333,-333,332,333,-337,333,337,-337,65,66,-334,334,153,-338,333,334,-338,66,334,-334,334,152,-154,66,67,-335,67,152,-335,67,20,-153,26,0,-84,26,83,-360,27,26,-360,359,83,-85,27,359,-363,28,27,-363,359,84,-361,362,359,-361,360,84,-86,28,362,-366,14,28,-366,360,85,-362,361,85,-24,362,360,-364,365,362,-364,363,360,-362,14,365,-159,31,14,-159,361,23,-162,82,161,-24,363,361,-365,364,361,-162,365,363,-367,158,365,-367,366,363,-365,31,158,-353,30,31,-353,82,374,-162,81,374,-83,158,366,-160,352,158,-160,364,161,-163,374,162, +-162,366,364,-368,159,366,-368,367,364,-163,30,352,-352,29,30,-352,81,371,-375,80,371,-82,352,159,-356,351,352,-356,159,367,-161,355,159,-161,367,162,-164,160,367,-164,374,375,-163,371,375,-375,375,163,-163,29,351,-351,2,29,-351,2,350,-93,351,355,-355,350,351,-355,92,350,-354,350,354,-354,92,353,-94,355,160,-359,354,355,-359,160,163,-14,358,160,-14,375,376,-164,376,13,-164,93,353,-357,93,356,-95,353,354,-358,354,358,-358,353,357,-357,358,13,-170,357,358,-170,94,356,-168,94,167,-26,356,357,-169,357,169,-169,356,168,-168,166,169,-14,376,166,-14,372,376,-376,371,372,-376,379,25,-168,379,97,-26,382,167,-169,382,379,-168,385,168,-170,166,385,-170,385,382,-169,373,166,-377,372,373,-377,368,372,-372,80,368,-372,4,368,-81,4,71,-369,368,369,-373,71,369,-369,369,373,-373,71,72,-370,72,370,-370,369,370,-374,72,73,-371,373,165,-167,370,165,-374,165,385,-167,73,164,-371,370,164,-166,73,21,-165,165,384,-386,164,384,-166,384,382,-386,21,383,-165,164,383,-385,21,70,-384,384,381,-383,383,381,-385,381,379,-383,70,380,-384,383,380,-382,70,69,-381,381,378,-380,380,378,-382,378,97,-380,378,96,-98,69,377,-381,380,377,-379,377,96,-379,69,68,-378,377,95,-97,68,95,-378,68,6,-96 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *6912 { + a: -0.382818788290024,-0.904339671134949,-0.188731148838997,-0.198211386799812,-0.959908545017242,-0.198211416602135,-0.203257322311401,-0.979125320911407,0,-0.367019444704056,-0.854747593402863,-0.367019444704056,-0.198211386799812,-0.959908545017242,-0.198211416602135,-0.382818788290024,-0.904339671134949,-0.188731148838997,-0.527262330055237,-0.774614274501801,-0.349237889051437,-0.367019444704056,-0.854747593402863,-0.367019444704056,-0.382818788290024,-0.904339671134949,-0.188731148838997,-0.527262330055237,-0.774614274501801,-0.349237889051437,-0.382818788290024,-0.904339671134949,-0.188731148838997,-0.55085414648056,-0.814839720726013,-0.180543690919876,-0.55085414648056,-0.814839720726013,-0.180543690919876,-0.382818788290024,-0.904339671134949,-0.188731148838997,-0.388972699642181,-0.921249330043793,0,-0.382818788290024,-0.904339671134949,-0.188731148838997,-0.203257322311401,-0.979125320911407,0,-0.388972699642181,-0.921249330043793,0,-0.198211386799812,-0.959908545017242,-0.198211416602135,-0,-1,0,-0.203257322311401,-0.979125320911407,0,-0.198211386799812,-0.959908545017242,0.198211416602135,-0.388972699642181,-0.921249330043793,0,-0.203257322311401,-0.979125320911407,0,-0.367019444704056,-0.854747593402863,-0.367019444704056,-0.188731148838997,-0.904339671134949,-0.382818758487701,-0.198211386799812,-0.959908545017242,-0.198211416602135,-0.188731148838997,-0.904339671134949,-0.382818758487701,-0,-0.979125320911407,-0.203257396817207,-0.198211386799812,-0.959908545017242,-0.198211416602135,-0.198211386799812,-0.959908545017242,-0.198211416602135,-0,-0.979125320911407,-0.203257396817207,-0,-1,0,-0.496352732181549,-0.712227404117584,-0.496352732181549,-0.367019444704056,-0.854747593402863,-0.367019444704056,-0.527262330055237,-0.774614274501801,-0.349237889051437,-0.349237889051437,-0.774614274501801,-0.527262330055237,-0.188731148838997,-0.904339671134949,-0.382818758487701,-0.367019444704056,-0.854747593402863,-0.367019444704056,-0.496352732181549,-0.712227404117584,-0.496352732181549, +-0.349237889051437,-0.774614274501801,-0.527262330055237,-0.367019444704056,-0.854747593402863,-0.367019444704056,-0.664699971675873,-0.664700031280518,-0.341098099946976,-0.527262330055237,-0.774614274501801,-0.349237889051437,-0.55085414648056,-0.814839720726013,-0.180543690919876,-0.620113670825958,-0.620113670825958,-0.480539411306381,-0.527262330055237,-0.774614274501801,-0.349237889051437,-0.664699971675873,-0.664700031280518,-0.341098099946976,-0.620113670825958,-0.620113670825958,-0.480539411306381,-0.496352732181549,-0.712227404117584,-0.496352732181549,-0.527262330055237,-0.774614274501801,-0.349237889051437,-0.577350258827209,-0.577350258827209,-0.577350318431854,-0.496352732181549,-0.712227404117584,-0.496352732181549,-0.620113670825958,-0.620113670825958,-0.480539411306381,-0.577350258827209,-0.577350258827209,-0.577350318431854,-0.480539411306381,-0.620113670825958,-0.620113670825958,-0.496352732181549,-0.712227404117584,-0.496352732181549,-0.480539411306381,-0.620113670825958,-0.620113670825958,-0.349237889051437,-0.774614274501801,-0.527262330055237,-0.496352732181549,-0.712227404117584,-0.496352732181549,-0.664699971675873,-0.664700031280518,-0.341098099946976,-0.55085414648056,-0.814839720726013,-0.180543690919876,-0.695950627326965,-0.69595068693161,-0.176933422684669,-0.480539411306381,-0.620113670825958,-0.620113670825958,-0.341098099946976,-0.664700031280518,-0.664699971675873,-0.349237889051437,-0.774614274501801,-0.527262330055237,-0.695950627326965,-0.69595068693161,-0.176933422684669,-0.55085414648056,-0.814839720726013,-0.180543690919876,-0.559616982936859,-0.828751385211945,0,-0.695950627326965,-0.69595068693161,-0.176933422684669,-0.559616982936859,-0.828751385211945,0,-0.707106828689575,-0.70710676908493,0,-0.55085414648056,-0.814839720726013,-0.180543690919876,-0.388972699642181,-0.921249330043793,0,-0.559616982936859,-0.828751385211945,0,-0.341098099946976,-0.664700031280518,-0.664699971675873,-0.180543690919876,-0.814839720726013,-0.550854086875916,-0.349237889051437,-0.774614274501801,-0.527262330055237, +-0.349237889051437,-0.774614274501801,-0.527262330055237,-0.180543690919876,-0.814839720726013,-0.550854086875916,-0.188731148838997,-0.904339671134949,-0.382818758487701,-0.341098099946976,-0.664700031280518,-0.664699971675873,-0.176933407783508,-0.695950627326965,-0.695950627326965,-0.180543690919876,-0.814839720726013,-0.550854086875916,-0.550854086875916,-0.814839720726013,0.18054373562336,-0.707106828689575,-0.70710676908493,0,-0.559616982936859,-0.828751385211945,0,-0.550854086875916,-0.814839720726013,0.18054373562336,-0.69595068693161,-0.695950627326965,0.176933422684669,-0.707106828689575,-0.70710676908493,0,-0.382818758487701,-0.904339671134949,0.188731148838997,-0.559616982936859,-0.828751385211945,0,-0.388972699642181,-0.921249330043793,0,-0.382818758487701,-0.904339671134949,0.188731148838997,-0.550854086875916,-0.814839720726013,0.18054373562336,-0.559616982936859,-0.828751385211945,0,-0.198211386799812,-0.959908545017242,0.198211416602135,-0.382818758487701,-0.904339671134949,0.188731148838997,-0.388972699642181,-0.921249330043793,0,-0.180543690919876,-0.814839720726013,-0.550854086875916,-0,-0.921249330043793,-0.388972699642181,-0.188731148838997,-0.904339671134949,-0.382818758487701,-0.188731148838997,-0.904339671134949,-0.382818758487701,-0,-0.921249330043793,-0.388972699642181,-0,-0.979125320911407,-0.203257396817207,-0.176933407783508,-0.695950627326965,-0.695950627326965,-0,-0.828751385211945,-0.559616982936859,-0.180543690919876,-0.814839720726013,-0.550854086875916,-0.180543690919876,-0.814839720726013,-0.550854086875916,-0,-0.828751385211945,-0.559616982936859,-0,-0.921249330043793,-0.388972699642181,-0.176933407783508,-0.695950627326965,-0.695950627326965,-0,-0.70710676908493,-0.70710676908493,-0,-0.828751385211945,-0.559616982936859,-0.527262330055237,-0.774614274501801,0.349237889051437,-0.69595068693161,-0.695950627326965,0.176933422684669,-0.550854086875916,-0.814839720726013,0.18054373562336,-0.527262330055237,-0.774614274501801,0.349237889051437,-0.664699971675873,-0.664700031280518,0.341098099946976, +-0.69595068693161,-0.695950627326965,0.176933422684669,-0.367019444704056,-0.854747593402863,0.367019444704056,-0.550854086875916,-0.814839720726013,0.18054373562336,-0.382818758487701,-0.904339671134949,0.188731148838997,-0.367019444704056,-0.854747593402863,0.367019444704056,-0.527262330055237,-0.774614274501801,0.349237889051437,-0.550854086875916,-0.814839720726013,0.18054373562336,-0,-0.70710676908493,-0.70710676908493,0.18054373562336,-0.814839720726013,-0.55085414648056,-0,-0.828751385211945,-0.559616982936859,-0,-0.70710676908493,-0.70710676908493,0.176932975649834,-0.695950984954834,-0.695950448513031,0.18054373562336,-0.814839720726013,-0.55085414648056,-0,-0.828751385211945,-0.559616982936859,0.188731178641319,-0.904339671134949,-0.382818758487701,-0,-0.921249330043793,-0.388972699642181,-0,-0.828751385211945,-0.559616982936859,0.18054373562336,-0.814839720726013,-0.55085414648056,0.188731178641319,-0.904339671134949,-0.382818758487701,-0,-0.921249330043793,-0.388972699642181,0.198211535811424,-0.959908545017242,-0.19821172952652,-0,-0.979125320911407,-0.203257396817207,-0,-0.921249330043793,-0.388972699642181,0.188731178641319,-0.904339671134949,-0.382818758487701,0.198211535811424,-0.959908545017242,-0.19821172952652,-0.496352732181549,-0.712227404117584,0.496352732181549,-0.664699971675873,-0.664700031280518,0.341098099946976,-0.527262330055237,-0.774614274501801,0.349237889051437,-0.496352732181549,-0.712227404117584,0.496352732181549,-0.620113670825958,-0.620113670825958,0.480539411306381,-0.664699971675873,-0.664700031280518,0.341098099946976,0.176932975649834,-0.695950984954834,-0.695950448513031,0.349237889051437,-0.774614274501801,-0.527262330055237,0.18054373562336,-0.814839720726013,-0.55085414648056,0.176932975649834,-0.695950984954834,-0.695950448513031,0.341098338365555,-0.6647008061409,-0.664698958396912,0.349237889051437,-0.774614274501801,-0.527262330055237,-0,-0.979125320911407,-0.203257396817207,0.198211535811424,-0.959908545017242,-0.19821172952652,0.203257605433464,-0.979125320911407,0, +-0,-0.979125320911407,-0.203257396817207,0.203257605433464,-0.979125320911407,0,-0,-1,0,0.198211535811424,-0.959908545017242,-0.19821172952652,0.388973116874695,-0.921249151229858,0,0.203257605433464,-0.979125320911407,0,0.198211535811424,-0.959908545017242,-0.19821172952652,0.382818996906281,-0.904339611530304,-0.188731417059898,0.388973116874695,-0.921249151229858,0,0.188731178641319,-0.904339671134949,-0.382818758487701,0.382818996906281,-0.904339611530304,-0.188731417059898,0.198211535811424,-0.959908545017242,-0.19821172952652,0.382818996906281,-0.904339611530304,-0.188731417059898,0.559616982936859,-0.828751385211945,0,0.388973116874695,-0.921249151229858,0,0.18054373562336,-0.814839720726013,-0.55085414648056,0.367019444704056,-0.854747593402863,-0.367019444704056,0.188731178641319,-0.904339671134949,-0.382818758487701,0.188731178641319,-0.904339671134949,-0.382818758487701,0.367019444704056,-0.854747593402863,-0.367019444704056,0.382818996906281,-0.904339611530304,-0.188731417059898,0.18054373562336,-0.814839720726013,-0.55085414648056,0.349237889051437,-0.774614274501801,-0.527262330055237,0.367019444704056,-0.854747593402863,-0.367019444704056,0.382818996906281,-0.904339611530304,-0.188731417059898,0.550854086875916,-0.814839720726013,-0.18054373562336,0.559616982936859,-0.828751385211945,0,0.367019444704056,-0.854747593402863,-0.367019444704056,0.550854086875916,-0.814839720726013,-0.18054373562336,0.382818996906281,-0.904339611530304,-0.188731417059898,0.550854086875916,-0.814839720726013,-0.18054373562336,0.70710676908493,-0.707106828689575,0,0.559616982936859,-0.828751385211945,0,0.550854086875916,-0.814839720726013,-0.18054373562336,0.695950627326965,-0.695950627326965,-0.176933407783508,0.70710676908493,-0.707106828689575,0,0.367019444704056,-0.854747593402863,-0.367019444704056,0.527262330055237,-0.774614274501801,-0.349237889051437,0.550854086875916,-0.814839720726013,-0.18054373562336,0.527262330055237,-0.774614274501801,-0.349237889051437,0.695950627326965,-0.695950627326965,-0.176933407783508, +0.550854086875916,-0.814839720726013,-0.18054373562336,0.349237889051437,-0.774614274501801,-0.527262330055237,0.527262330055237,-0.774614274501801,-0.349237889051437,0.367019444704056,-0.854747593402863,-0.367019444704056,0.527262330055237,-0.774614274501801,-0.349237889051437,0.664699971675873,-0.664700031280518,-0.341098099946976,0.695950627326965,-0.695950627326965,-0.176933407783508,0.349237889051437,-0.774614274501801,-0.527262330055237,0.496352732181549,-0.712227404117584,-0.496352732181549,0.527262330055237,-0.774614274501801,-0.349237889051437,0.496352732181549,-0.712227404117584,-0.496352732181549,0.664699971675873,-0.664700031280518,-0.341098099946976,0.527262330055237,-0.774614274501801,-0.349237889051437,0.341098338365555,-0.6647008061409,-0.664698958396912,0.496352732181549,-0.712227404117584,-0.496352732181549,0.349237889051437,-0.774614274501801,-0.527262330055237,0.496352732181549,-0.712227404117584,-0.496352732181549,0.620113670825958,-0.620113670825958,-0.480539411306381,0.664699971675873,-0.664700031280518,-0.341098099946976,0.341098338365555,-0.6647008061409,-0.664698958396912,0.480540037155151,-0.620114028453827,-0.620112836360931,0.496352732181549,-0.712227404117584,-0.496352732181549,0.480540037155151,-0.620114028453827,-0.620112836360931,0.620113670825958,-0.620113670825958,-0.480539411306381,0.496352732181549,-0.712227404117584,-0.496352732181549,0.480540037155151,-0.620114028453827,-0.620112836360931,0.577350258827209,-0.577350258827209,-0.577350318431854,0.620113670825958,-0.620113670825958,-0.480539411306381,-0,-0.979125320911407,0.203257396817207,-0.203257322311401,-0.979125320911407,0,-0,-1,0,0.198211535811424,-0.959908545017242,0.19821172952652,-0,-0.979125320911407,0.203257396817207,-0,-1,0,0.188731178641319,-0.904339671134949,0.382818758487701,-0,-0.979125320911407,0.203257396817207,0.198211535811424,-0.959908545017242,0.19821172952652,0.188731178641319,-0.904339671134949,0.382818758487701,-0,-0.921249330043793,0.388972699642181,-0,-0.979125320911407,0.203257396817207,-0,-0.921249330043793,0.388972699642181, +-0.198211386799812,-0.959908545017242,0.198211416602135,-0,-0.979125320911407,0.203257396817207,-0,-0.979125320911407,0.203257396817207,-0.198211386799812,-0.959908545017242,0.198211416602135,-0.203257322311401,-0.979125320911407,0,-0,-0.921249330043793,0.388972699642181,-0.188731148838997,-0.904339671134949,0.382818758487701,-0.198211386799812,-0.959908545017242,0.198211416602135,-0.188731148838997,-0.904339671134949,0.382818758487701,-0.382818758487701,-0.904339671134949,0.188731148838997,-0.198211386799812,-0.959908545017242,0.198211416602135,-0.188731148838997,-0.904339671134949,0.382818758487701,-0.367019444704056,-0.854747593402863,0.367019444704056,-0.382818758487701,-0.904339671134949,0.188731148838997,-0,-0.828751385211945,0.559616982936859,-0.188731148838997,-0.904339671134949,0.382818758487701,-0,-0.921249330043793,0.388972699642181,-0.180543750524521,-0.814839720726013,0.550854086875916,-0.367019444704056,-0.854747593402863,0.367019444704056,-0.188731148838997,-0.904339671134949,0.382818758487701,-0,-0.828751385211945,0.559616982936859,-0.180543750524521,-0.814839720726013,0.550854086875916,-0.188731148838997,-0.904339671134949,0.382818758487701,0.18054373562336,-0.814839720726013,0.550854086875916,-0,-0.921249330043793,0.388972699642181,0.188731178641319,-0.904339671134949,0.382818758487701,0.18054373562336,-0.814839720726013,0.550854086875916,-0,-0.828751385211945,0.559616982936859,-0,-0.921249330043793,0.388972699642181,-0.180543750524521,-0.814839720726013,0.550854086875916,-0.349237889051437,-0.774614274501801,0.527262330055237,-0.367019444704056,-0.854747593402863,0.367019444704056,-0.349237889051437,-0.774614274501801,0.527262330055237,-0.527262330055237,-0.774614274501801,0.349237889051437,-0.367019444704056,-0.854747593402863,0.367019444704056,-0.349237889051437,-0.774614274501801,0.527262330055237,-0.496352732181549,-0.712227404117584,0.496352732181549,-0.527262330055237,-0.774614274501801,0.349237889051437,-0,-0.707106649875641,0.70710688829422,-0.180543750524521,-0.814839720726013,0.550854086875916, +-0,-0.828751385211945,0.559616982936859,0.176933258771896,-0.695950508117676,0.695950865745544,-0,-0.707106649875641,0.70710688829422,-0,-0.828751385211945,0.559616982936859,0.176933258771896,-0.695950508117676,0.695950865745544,-0,-0.828751385211945,0.559616982936859,0.18054373562336,-0.814839720726013,0.550854086875916,-0,-0.707106649875641,0.70710688829422,-0.176932841539383,-0.695950746536255,0.69595068693161,-0.180543750524521,-0.814839720726013,0.550854086875916,-0.176932841539383,-0.695950746536255,0.69595068693161,-0.349237889051437,-0.774614274501801,0.527262330055237,-0.180543750524521,-0.814839720726013,0.550854086875916,-0.176932841539383,-0.695950746536255,0.69595068693161,-0.341098129749298,-0.66470068693161,0.664699137210846,-0.349237889051437,-0.774614274501801,0.527262330055237,-0.341098129749298,-0.66470068693161,0.664699137210846,-0.496352732181549,-0.712227404117584,0.496352732181549,-0.349237889051437,-0.774614274501801,0.527262330055237,-0.341098129749298,-0.66470068693161,0.664699137210846,-0.480540037155151,-0.620114028453827,0.620112836360931,-0.496352732181549,-0.712227404117584,0.496352732181549,-0.480540037155151,-0.620114028453827,0.620112836360931,-0.620113670825958,-0.620113670825958,0.480539411306381,-0.496352732181549,-0.712227404117584,0.496352732181549,-0.480540037155151,-0.620114028453827,0.620112836360931,-0.577350258827209,-0.577350258827209,0.577350318431854,-0.620113670825958,-0.620113670825958,0.480539411306381,0.341097921133041,-0.664699912071228,0.664700150489807,0.176933258771896,-0.695950508117676,0.695950865745544,0.18054373562336,-0.814839720726013,0.550854086875916,0.341097921133041,-0.664699912071228,0.664700150489807,0.18054373562336,-0.814839720726013,0.550854086875916,0.349237889051437,-0.774614274501801,0.527262330055237,0.480539411306381,-0.620113670825958,0.620113670825958,0.341097921133041,-0.664699912071228,0.664700150489807,0.349237889051437,-0.774614274501801,0.527262330055237,0.349237889051437,-0.774614274501801,0.527262330055237,0.18054373562336,-0.814839720726013,0.550854086875916, +0.188731178641319,-0.904339671134949,0.382818758487701,0.480539411306381,-0.620113670825958,0.620113670825958,0.349237889051437,-0.774614274501801,0.527262330055237,0.496352732181549,-0.712227404117584,0.496352732181549,0.577350318431854,-0.577350258827209,0.577350258827209,0.480539411306381,-0.620113670825958,0.620113670825958,0.496352732181549,-0.712227404117584,0.496352732181549,0.577350318431854,-0.577350258827209,0.577350258827209,0.496352732181549,-0.712227404117584,0.496352732181549,0.620112836360931,-0.620114028453827,0.480540037155151,0.349237889051437,-0.774614274501801,0.527262330055237,0.188731178641319,-0.904339671134949,0.382818758487701,0.367019444704056,-0.854747593402863,0.367019444704056,0.496352732181549,-0.712227404117584,0.496352732181549,0.349237889051437,-0.774614274501801,0.527262330055237,0.367019444704056,-0.854747593402863,0.367019444704056,0.367019444704056,-0.854747593402863,0.367019444704056,0.188731178641319,-0.904339671134949,0.382818758487701,0.198211535811424,-0.959908545017242,0.19821172952652,0.620112836360931,-0.620114028453827,0.480540037155151,0.496352732181549,-0.712227404117584,0.496352732181549,0.527262330055237,-0.774614274501801,0.349237889051437,0.496352732181549,-0.712227404117584,0.496352732181549,0.367019444704056,-0.854747593402863,0.367019444704056,0.527262330055237,-0.774614274501801,0.349237889051437,0.620112836360931,-0.620114028453827,0.480540037155151,0.527262330055237,-0.774614274501801,0.349237889051437,0.664698958396912,-0.6647008061409,0.341098338365555,0.367019444704056,-0.854747593402863,0.367019444704056,0.198211535811424,-0.959908545017242,0.19821172952652,0.382818996906281,-0.904339611530304,0.188731417059898,0.527262330055237,-0.774614274501801,0.349237889051437,0.367019444704056,-0.854747593402863,0.367019444704056,0.382818996906281,-0.904339611530304,0.188731417059898,0.664698958396912,-0.6647008061409,0.341098338365555,0.527262330055237,-0.774614274501801,0.349237889051437,0.55085414648056,-0.814839720726013,0.18054373562336,0.527262330055237,-0.774614274501801,0.349237889051437, +0.382818996906281,-0.904339611530304,0.188731417059898,0.55085414648056,-0.814839720726013,0.18054373562336,0.664698958396912,-0.6647008061409,0.341098338365555,0.55085414648056,-0.814839720726013,0.18054373562336,0.695950448513031,-0.695950984954834,0.176932975649834,0.382818996906281,-0.904339611530304,0.188731417059898,0.198211535811424,-0.959908545017242,0.19821172952652,0.203257605433464,-0.979125320911407,0,0.198211535811424,-0.959908545017242,0.19821172952652,-0,-1,0,0.203257605433464,-0.979125320911407,0,0.382818996906281,-0.904339611530304,0.188731417059898,0.203257605433464,-0.979125320911407,0,0.388973116874695,-0.921249151229858,0,0.55085414648056,-0.814839720726013,0.18054373562336,0.382818996906281,-0.904339611530304,0.188731417059898,0.388973116874695,-0.921249151229858,0,0.55085414648056,-0.814839720726013,0.18054373562336,0.388973116874695,-0.921249151229858,0,0.559616982936859,-0.828751385211945,0,0.695950448513031,-0.695950984954834,0.176932975649834,0.55085414648056,-0.814839720726013,0.18054373562336,0.559616982936859,-0.828751385211945,0,0.695950448513031,-0.695950984954834,0.176932975649834,0.559616982936859,-0.828751385211945,0,0.70710676908493,-0.707106828689575,0,-0.197208687663078,0.960321485996246,-0.197208911180496,-0,1,0,-0,0.979499578475952,-0.201445803046227,-0.188531711697578,0.904620766639709,-0.382252633571625,-0.197208687663078,0.960321485996246,-0.197208911180496,-0,0.979499578475952,-0.201445803046227,-0.366858839988708,0.854885458946228,-0.366858839988708,-0.197208687663078,0.960321485996246,-0.197208911180496,-0.188531711697578,0.904620766639709,-0.382252633571625,-0.366858839988708,0.854885458946228,-0.366858839988708,-0.382252842187881,0.90462064743042,-0.18853197991848,-0.197208687663078,0.960321485996246,-0.197208911180496,-0.382252842187881,0.90462064743042,-0.18853197991848,-0.201446071267128,0.979499578475952,0,-0.197208687663078,0.960321485996246,-0.197208911180496,-0.197208687663078,0.960321485996246,-0.197208911180496,-0.201446071267128,0.979499578475952,0,-0,1,0,-0.188531711697578,0.904620766639709,-0.382252633571625, +-0,0.979499578475952,-0.201445803046227,-0,0.921515762805939,-0.388340801000595,-0.349565058946609,0.774559915065765,-0.527125358581543,-0.366858839988708,0.854885458946228,-0.366858839988708,-0.188531711697578,0.904620766639709,-0.382252633571625,-0.18046997487545,0.814974248409271,-0.550679326057434,-0.188531711697578,0.904620766639709,-0.382252633571625,-0,0.921515762805939,-0.388340801000595,-0.349565058946609,0.774559915065765,-0.527125358581543,-0.188531711697578,0.904620766639709,-0.382252633571625,-0.18046997487545,0.814974248409271,-0.550679326057434,-0.527125358581543,0.774559915065765,-0.349565058946609,-0.382252842187881,0.90462064743042,-0.18853197991848,-0.366858839988708,0.854885458946228,-0.366858839988708,-0.496223598718643,0.712407350540161,-0.496223598718643,-0.366858839988708,0.854885458946228,-0.366858839988708,-0.349565058946609,0.774559915065765,-0.527125358581543,-0.496223598718643,0.712407350540161,-0.496223598718643,-0.527125358581543,0.774559915065765,-0.349565058946609,-0.366858839988708,0.854885458946228,-0.366858839988708,-0.341394424438477,0.664652168750763,-0.664595663547516,-0.349565058946609,0.774559915065765,-0.527125358581543,-0.18046997487545,0.814974248409271,-0.550679326057434,-0.48036190867424,0.620459377765656,-0.619905412197113,-0.349565058946609,0.774559915065765,-0.527125358581543,-0.341394424438477,0.664652168750763,-0.664595663547516,-0.48036190867424,0.620459377765656,-0.619905412197113,-0.496223598718643,0.712407350540161,-0.496223598718643,-0.349565058946609,0.774559915065765,-0.527125358581543,-0.577053427696228,0.577943503856659,-0.577053427696228,-0.496223598718643,0.712407350540161,-0.496223598718643,-0.48036190867424,0.620459377765656,-0.619905412197113,-0.577053427696228,0.577943503856659,-0.577053427696228,-0.619905412197113,0.620459377765656,-0.48036190867424,-0.496223598718643,0.712407350540161,-0.496223598718643,-0.619905412197113,0.620459377765656,-0.48036190867424,-0.527125358581543,0.774559915065765,-0.349565058946609,-0.496223598718643,0.712407350540161,-0.496223598718643, +-0.341394424438477,0.664652168750763,-0.664595663547516,-0.18046997487545,0.814974248409271,-0.550679326057434,-0.1768579185009,0.695869147777557,-0.696051299571991,-0.619905412197113,0.620459377765656,-0.48036190867424,-0.664595663547516,0.664652168750763,-0.341394424438477,-0.527125358581543,0.774559915065765,-0.349565058946609,-0.1768579185009,0.695869147777557,-0.696051299571991,-0.18046997487545,0.814974248409271,-0.550679326057434,-0,0.828896284103394,-0.559402287006378,-0.18046997487545,0.814974248409271,-0.550679326057434,-0,0.921515762805939,-0.388340801000595,-0,0.828896284103394,-0.559402287006378,-0.1768579185009,0.695869147777557,-0.696051299571991,-0,0.828896284103394,-0.559402287006378,-0,0.707008004188538,-0.707205593585968,-0.664595663547516,0.664652168750763,-0.341394424438477,-0.550679266452789,0.814974129199982,-0.180470064282417,-0.527125358581543,0.774559915065765,-0.349565058946609,-0.527125358581543,0.774559915065765,-0.349565058946609,-0.550679266452789,0.814974129199982,-0.180470064282417,-0.382252842187881,0.90462064743042,-0.18853197991848,-0.664595663547516,0.664652168750763,-0.341394424438477,-0.696051239967346,0.695869088172913,-0.176858022809029,-0.550679266452789,0.814974129199982,-0.180470064282417,0.180469766259193,0.814974248409271,-0.550679326057434,-0,0.707008004188538,-0.707205593585968,-0,0.828896284103394,-0.559402287006378,0.180469766259193,0.814974248409271,-0.550679326057434,0.1768579185009,0.695869386196136,-0.696051120758057,-0,0.707008004188538,-0.707205593585968,0.188531622290611,0.90462064743042,-0.382252931594849,-0,0.828896284103394,-0.559402287006378,-0,0.921515762805939,-0.388340801000595,0.188531622290611,0.90462064743042,-0.382252931594849,0.180469766259193,0.814974248409271,-0.550679326057434,-0,0.828896284103394,-0.559402287006378,-0.550679266452789,0.814974129199982,-0.180470064282417,-0.388341218233109,0.921515583992004,0,-0.382252842187881,0.90462064743042,-0.18853197991848,-0.382252842187881,0.90462064743042,-0.18853197991848,-0.388341218233109,0.921515583992004,0, +-0.201446071267128,0.979499578475952,0,-0.696051239967346,0.695869088172913,-0.176858022809029,-0.559402227401733,0.828896284103394,0,-0.550679266452789,0.814974129199982,-0.180470064282417,-0.550679266452789,0.814974129199982,-0.180470064282417,-0.559402227401733,0.828896284103394,0,-0.388341218233109,0.921515583992004,0,-0.696051239967346,0.695869088172913,-0.176858022809029,-0.707205593585968,0.707008004188538,0,-0.559402227401733,0.828896284103394,0,0.349564611911774,0.774560153484344,-0.527125418186188,0.1768579185009,0.695869386196136,-0.696051120758057,0.180469766259193,0.814974248409271,-0.550679326057434,0.349564611911774,0.774560153484344,-0.527125418186188,0.341394245624542,0.664652347564697,-0.664595484733582,0.1768579185009,0.695869386196136,-0.696051120758057,-0.707205593585968,0.707008004188538,0,-0.550679326057434,0.814974248409271,0.180470034480095,-0.559402227401733,0.828896284103394,0,-0.707205593585968,0.707008004188538,0,-0.696051061153412,0.695869386196136,0.176858067512512,-0.550679326057434,0.814974248409271,0.180470034480095,-0.559402227401733,0.828896284103394,0,-0.382252871990204,0.90462064743042,0.188531950116158,-0.388341218233109,0.921515583992004,0,-0.559402227401733,0.828896284103394,0,-0.550679326057434,0.814974248409271,0.180470034480095,-0.382252871990204,0.90462064743042,0.188531950116158,-0.388341218233109,0.921515583992004,0,-0.197208732366562,0.960321485996246,0.197208851575851,-0.201446071267128,0.979499578475952,0,-0.388341218233109,0.921515583992004,0,-0.382252871990204,0.90462064743042,0.188531950116158,-0.197208732366562,0.960321485996246,0.197208851575851,-0.696051061153412,0.695869386196136,0.176858067512512,-0.527125358581543,0.774559915065765,0.349565058946609,-0.550679326057434,0.814974248409271,0.180470034480095,-0.696051061153412,0.695869386196136,0.176858067512512,-0.664595365524292,0.664652287960052,0.341394633054733,-0.527125358581543,0.774559915065765,0.349565058946609,-0.550679326057434,0.814974248409271,0.180470034480095,-0.366858839988708,0.854885458946228,0.366858839988708, +-0.382252871990204,0.90462064743042,0.188531950116158,-0.550679326057434,0.814974248409271,0.180470034480095,-0.527125358581543,0.774559915065765,0.349565058946609,-0.366858839988708,0.854885458946228,0.366858839988708,-0.664595365524292,0.664652287960052,0.341394633054733,-0.496223598718643,0.712407350540161,0.496223598718643,-0.527125358581543,0.774559915065765,0.349565058946609,-0.664595365524292,0.664652287960052,0.341394633054733,-0.619905412197113,0.620459377765656,0.48036190867424,-0.496223598718643,0.712407350540161,0.496223598718643,-0.619905412197113,0.620459377765656,0.48036190867424,-0.48036190867424,0.620459377765656,0.619905412197113,-0.496223598718643,0.712407350540161,0.496223598718643,-0.619905412197113,0.620459377765656,0.48036190867424,-0.577053427696228,0.577943503856659,0.577053427696228,-0.48036190867424,0.620459377765656,0.619905412197113,-0.496223598718643,0.712407350540161,0.496223598718643,-0.48036190867424,0.620459377765656,0.619905412197113,-0.341394633054733,0.664652287960052,0.664595365524292,-0.527125358581543,0.774559915065765,0.349565058946609,-0.496223598718643,0.712407350540161,0.496223598718643,-0.349565058946609,0.774559915065765,0.527125358581543,-0.496223598718643,0.712407350540161,0.496223598718643,-0.341394633054733,0.664652287960052,0.664595365524292,-0.349565058946609,0.774559915065765,0.527125358581543,-0.527125358581543,0.774559915065765,0.349565058946609,-0.349565058946609,0.774559915065765,0.527125358581543,-0.366858839988708,0.854885458946228,0.366858839988708,-0.349565058946609,0.774559915065765,0.527125358581543,-0.341394633054733,0.664652287960052,0.664595365524292,-0.176858142018318,0.695869326591492,0.696051061153412,-0.349565058946609,0.774559915065765,0.527125358581543,-0.176858142018318,0.695869326591492,0.696051061153412,-0.180470064282417,0.814974129199982,0.550679266452789,-0.366858839988708,0.854885458946228,0.366858839988708,-0.349565058946609,0.774559915065765,0.527125358581543,-0.180470064282417,0.814974129199982,0.550679266452789,-0.180470064282417,0.814974129199982,0.550679266452789, +-0.176858142018318,0.695869326591492,0.696051061153412,-0,0.707008004188538,0.707205593585968,-0.382252871990204,0.90462064743042,0.188531950116158,-0.366858839988708,0.854885458946228,0.366858839988708,-0.188531771302223,0.904620766639709,0.382252633571625,-0.366858839988708,0.854885458946228,0.366858839988708,-0.180470064282417,0.814974129199982,0.550679266452789,-0.188531771302223,0.904620766639709,0.382252633571625,-0.382252871990204,0.90462064743042,0.188531950116158,-0.188531771302223,0.904620766639709,0.382252633571625,-0.197208732366562,0.960321485996246,0.197208851575851,-0.180470064282417,0.814974129199982,0.550679266452789,-0,0.707008004188538,0.707205593585968,-0,0.828896284103394,0.559402227401733,-0.188531771302223,0.904620766639709,0.382252633571625,-0.180470064282417,0.814974129199982,0.550679266452789,-0,0.828896284103394,0.559402227401733,0.176858082413673,0.695869386196136,0.696051061153412,-0,0.828896284103394,0.559402227401733,-0,0.707008004188538,0.707205593585968,-0.197208732366562,0.960321485996246,0.197208851575851,-0.188531771302223,0.904620766639709,0.382252633571625,-0,0.921515882015228,0.38834074139595,-0.188531771302223,0.904620766639709,0.382252633571625,-0,0.828896284103394,0.559402227401733,-0,0.921515882015228,0.38834074139595,0.176858082413673,0.695869386196136,0.696051061153412,0.180470034480095,0.814974248409271,0.550679326057434,-0,0.828896284103394,0.559402227401733,0.180470034480095,0.814974248409271,0.550679326057434,-0,0.921515882015228,0.38834074139595,-0,0.828896284103394,0.559402227401733,0.341394633054733,0.664652287960052,0.664595365524292,0.180470034480095,0.814974248409271,0.550679326057434,0.176858082413673,0.695869386196136,0.696051061153412,-0.197208732366562,0.960321485996246,0.197208851575851,-0,0.921515882015228,0.38834074139595,-0,0.979499578475952,0.201445803046227,-0.201446071267128,0.979499578475952,0,-0.197208732366562,0.960321485996246,0.197208851575851,-0,0.979499578475952,0.201445803046227,-0.201446071267128,0.979499578475952,0,-0,0.979499578475952,0.201445803046227, +-0,1,0,0.341394633054733,0.664652287960052,0.664595365524292,0.349565058946609,0.774559915065765,0.527125358581543,0.180470034480095,0.814974248409271,0.550679326057434,0.48036190867424,0.620459377765656,0.619905412197113,0.349565058946609,0.774559915065765,0.527125358581543,0.341394633054733,0.664652287960052,0.664595365524292,0.180470034480095,0.814974248409271,0.550679326057434,0.188531756401062,0.904620766639709,0.382252633571625,-0,0.921515882015228,0.38834074139595,0.188531756401062,0.904620766639709,0.382252633571625,-0,0.979499578475952,0.201445803046227,-0,0.921515882015228,0.38834074139595,0.349565058946609,0.774559915065765,0.527125358581543,0.188531756401062,0.904620766639709,0.382252633571625,0.180470034480095,0.814974248409271,0.550679326057434,0.48036190867424,0.620459377765656,0.619905412197113,0.496223598718643,0.712407350540161,0.496223598718643,0.349565058946609,0.774559915065765,0.527125358581543,0.577053427696228,0.577943503856659,0.577053427696228,0.496223598718643,0.712407350540161,0.496223598718643,0.48036190867424,0.620459377765656,0.619905412197113,0.577053427696228,0.577943503856659,0.577053427696228,0.619905412197113,0.620459377765656,0.48036190867424,0.496223598718643,0.712407350540161,0.496223598718643,0.188531756401062,0.904620766639709,0.382252633571625,0.197208628058434,0.960321605205536,0.197208628058434,-0,0.979499578475952,0.201445803046227,0.197208628058434,0.960321605205536,0.197208628058434,-0,1,0,-0,0.979499578475952,0.201445803046227,0.349565058946609,0.774559915065765,0.527125358581543,0.366858839988708,0.854885458946228,0.366858839988708,0.188531756401062,0.904620766639709,0.382252633571625,0.496223598718643,0.712407350540161,0.496223598718643,0.366858839988708,0.854885458946228,0.366858839988708,0.349565058946609,0.774559915065765,0.527125358581543,0.366858839988708,0.854885458946228,0.366858839988708,0.197208628058434,0.960321605205536,0.197208628058434,0.188531756401062,0.904620766639709,0.382252633571625,0.619905412197113,0.620459377765656,0.48036190867424,0.527125358581543,0.774559915065765,0.349565058946609, +0.496223598718643,0.712407350540161,0.496223598718643,0.496223598718643,0.712407350540161,0.496223598718643,0.527125358581543,0.774559915065765,0.349565058946609,0.366858839988708,0.854885458946228,0.366858839988708,0.619905412197113,0.620459377765656,0.48036190867424,0.664595365524292,0.664652287960052,0.341394633054733,0.527125358581543,0.774559915065765,0.349565058946609,0.366858839988708,0.854885458946228,0.366858839988708,0.382252633571625,0.904620766639709,0.188531771302223,0.197208628058434,0.960321605205536,0.197208628058434,0.527125358581543,0.774559915065765,0.349565058946609,0.382252633571625,0.904620766639709,0.188531771302223,0.366858839988708,0.854885458946228,0.366858839988708,0.664595365524292,0.664652287960052,0.341394633054733,0.550679326057434,0.814974248409271,0.180470079183578,0.527125358581543,0.774559915065765,0.349565058946609,0.527125358581543,0.774559915065765,0.349565058946609,0.550679326057434,0.814974248409271,0.180470079183578,0.382252633571625,0.904620766639709,0.188531771302223,0.664595365524292,0.664652287960052,0.341394633054733,0.696051120758057,0.695869386196136,0.176858142018318,0.550679326057434,0.814974248409271,0.180470079183578,0.382252633571625,0.904620766639709,0.188531771302223,0.201445758342743,0.979499697685242,0,0.197208628058434,0.960321605205536,0.197208628058434,0.197208628058434,0.960321605205536,0.197208628058434,0.201445758342743,0.979499697685242,0,-0,1,0,0.382252633571625,0.904620766639709,0.188531771302223,0.388340801000595,0.921515882015228,0,0.201445758342743,0.979499697685242,0,0.550679326057434,0.814974248409271,0.180470079183578,0.388340801000595,0.921515882015228,0,0.382252633571625,0.904620766639709,0.188531771302223,0.550679326057434,0.814974248409271,0.180470079183578,0.559402227401733,0.828896284103394,0,0.388340801000595,0.921515882015228,0,0.696051120758057,0.695869386196136,0.176858142018318,0.559402227401733,0.828896284103394,0,0.550679326057434,0.814974248409271,0.180470079183578,0.696051120758057,0.695869386196136,0.176858142018318,0.707205593585968,0.707008004188538,0, +0.559402227401733,0.828896284103394,0,0.619905412197113,0.620459377765656,-0.48036190867424,0.577053427696228,0.577943503856659,-0.577053427696228,0.48036190867424,0.620459377765656,-0.619905412197113,0.619905412197113,0.620459377765656,-0.48036190867424,0.48036190867424,0.620459377765656,-0.619905412197113,0.496223598718643,0.712407350540161,-0.496223598718643,0.496223598718643,0.712407350540161,-0.496223598718643,0.48036190867424,0.620459377765656,-0.619905412197113,0.341394245624542,0.664652347564697,-0.664595484733582,0.664595365524292,0.664652287960052,-0.341394633054733,0.619905412197113,0.620459377765656,-0.48036190867424,0.496223598718643,0.712407350540161,-0.496223598718643,0.496223598718643,0.712407350540161,-0.496223598718643,0.341394245624542,0.664652347564697,-0.664595484733582,0.349564611911774,0.774560153484344,-0.527125418186188,0.664595365524292,0.664652287960052,-0.341394633054733,0.496223598718643,0.712407350540161,-0.496223598718643,0.527125358581543,0.774559915065765,-0.349565058946609,0.527125358581543,0.774559915065765,-0.349565058946609,0.496223598718643,0.712407350540161,-0.496223598718643,0.349564611911774,0.774560153484344,-0.527125418186188,0.696051120758057,0.695869386196136,-0.176858142018318,0.664595365524292,0.664652287960052,-0.341394633054733,0.527125358581543,0.774559915065765,-0.349565058946609,0.527125358581543,0.774559915065765,-0.349565058946609,0.349564611911774,0.774560153484344,-0.527125418186188,0.366858661174774,0.854885458946228,-0.366859078407288,0.366858661174774,0.854885458946228,-0.366859078407288,0.349564611911774,0.774560153484344,-0.527125418186188,0.180469766259193,0.814974248409271,-0.550679326057434,0.366858661174774,0.854885458946228,-0.366859078407288,0.180469766259193,0.814974248409271,-0.550679326057434,0.188531622290611,0.90462064743042,-0.382252931594849,0.696051120758057,0.695869386196136,-0.176858142018318,0.527125358581543,0.774559915065765,-0.349565058946609,0.550679326057434,0.814974248409271,-0.180470034480095,0.550679326057434,0.814974248409271,-0.180470034480095, +0.527125358581543,0.774559915065765,-0.349565058946609,0.366858661174774,0.854885458946228,-0.366859078407288,0.707205593585968,0.707008004188538,0,0.696051120758057,0.695869386196136,-0.176858142018318,0.550679326057434,0.814974248409271,-0.180470034480095,0.707205593585968,0.707008004188538,0,0.550679326057434,0.814974248409271,-0.180470034480095,0.559402227401733,0.828896284103394,0,0.550679326057434,0.814974248409271,-0.180470034480095,0.366858661174774,0.854885458946228,-0.366859078407288,0.382252633571625,0.904620766639709,-0.188531771302223,0.559402227401733,0.828896284103394,0,0.550679326057434,0.814974248409271,-0.180470034480095,0.382252633571625,0.904620766639709,-0.188531771302223,0.382252633571625,0.904620766639709,-0.188531771302223,0.366858661174774,0.854885458946228,-0.366859078407288,0.188531622290611,0.90462064743042,-0.382252931594849,0.559402227401733,0.828896284103394,0,0.382252633571625,0.904620766639709,-0.188531771302223,0.388340801000595,0.921515882015228,0,0.382252633571625,0.904620766639709,-0.188531771302223,0.188531622290611,0.90462064743042,-0.382252931594849,0.197208628058434,0.960321605205536,-0.19720858335495,0.388340801000595,0.921515882015228,0,0.382252633571625,0.904620766639709,-0.188531771302223,0.197208628058434,0.960321605205536,-0.19720858335495,0.197208628058434,0.960321605205536,-0.19720858335495,0.188531622290611,0.90462064743042,-0.382252931594849,-0,0.921515762805939,-0.388340801000595,0.388340801000595,0.921515882015228,0,0.197208628058434,0.960321605205536,-0.19720858335495,0.201445758342743,0.979499697685242,0,0.197208628058434,0.960321605205536,-0.19720858335495,-0,0.921515762805939,-0.388340801000595,-0,0.979499578475952,-0.201445803046227,0.201445758342743,0.979499697685242,0,0.197208628058434,0.960321605205536,-0.19720858335495,-0,0.979499578475952,-0.201445803046227,0.201445758342743,0.979499697685242,0,-0,0.979499578475952,-0.201445803046227,-0,1,0,-0.620113670825958,-0.620113670825958,0.480539411306381,-0.577350258827209,-0.577350258827209,0.577350318431854,-0.620113134384155,-0.480540663003922,0.620113134384155, +-0.620113670825958,-0.620113670825958,0.480539411306381,-0.620113134384155,-0.480540663003922,0.620113134384155,-0.712226629257202,-0.496354192495346,0.496352404356003,-0.664699971675873,-0.664700031280518,0.341098099946976,-0.620113670825958,-0.620113670825958,0.480539411306381,-0.712226629257202,-0.496354192495346,0.496352404356003,-0.712226629257202,-0.496354192495346,0.496352404356003,-0.620113134384155,-0.480540663003922,0.620113134384155,-0.664699852466583,-0.341098606586456,0.664699792861938,-0.664699971675873,-0.664700031280518,0.341098099946976,-0.712226629257202,-0.496354192495346,0.496352404356003,-0.774614214897156,-0.527263045310974,0.349237143993378,-0.69595068693161,-0.695950627326965,0.176933422684669,-0.664699971675873,-0.664700031280518,0.341098099946976,-0.774614214897156,-0.527263045310974,0.349237143993378,-0.712226629257202,-0.496354192495346,0.496352404356003,-0.664699852466583,-0.341098606586456,0.664699792861938,-0.774613916873932,-0.349238693714142,0.527262270450592,-0.774614214897156,-0.527263045310974,0.349237143993378,-0.712226629257202,-0.496354192495346,0.496352404356003,-0.774613916873932,-0.349238693714142,0.527262270450592,-0.774613916873932,-0.349238693714142,0.527262270450592,-0.664699852466583,-0.341098606586456,0.664699792861938,-0.695038259029388,-0.183966562151909,0.695038259029388,-0.69595068693161,-0.695950627326965,0.176933422684669,-0.774614214897156,-0.527263045310974,0.349237143993378,-0.814839720726013,-0.550853967666626,0.180543690919876,-0.707106828689575,-0.70710676908493,0,-0.69595068693161,-0.695950627326965,0.176933422684669,-0.814839720726013,-0.550853967666626,0.180543690919876,-0.774613916873932,-0.349238693714142,0.527262270450592,-0.695038259029388,-0.183966562151909,0.695038259029388,-0.814563572406769,-0.187770694494247,0.54884260892868,-0.814563572406769,-0.187770694494247,0.54884260892868,-0.695038259029388,-0.183966562151909,0.695038259029388,-0.707077980041504,-0.00901631452143192,0.707078039646149,-0.774614214897156,-0.527263045310974,0.349237143993378, +-0.774613916873932,-0.349238693714142,0.527262270450592,-0.854747891426086,-0.367019683122635,0.367018282413483,-0.814839720726013,-0.550853967666626,0.180543690919876,-0.774614214897156,-0.527263045310974,0.349237143993378,-0.854747891426086,-0.367019683122635,0.367018282413483,-0.854747891426086,-0.367019683122635,0.367018282413483,-0.774613916873932,-0.349238693714142,0.527262270450592,-0.814563572406769,-0.187770694494247,0.54884260892868,-0.707106828689575,-0.70710676908493,0,-0.814839720726013,-0.550853967666626,0.180543690919876,-0.828751444816589,-0.559616982936859,0,-0.695950627326965,-0.69595068693161,-0.176933422684669,-0.707106828689575,-0.70710676908493,0,-0.828751444816589,-0.559616982936859,0,-0.814563572406769,-0.187770694494247,0.54884260892868,-0.707077980041504,-0.00901631452143192,0.707078039646149,-0.830622136592865,-0.00856000930070877,0.5567706823349,-0.696185231208801,0.175080239772797,0.696184635162354,-0.830622136592865,-0.00856000930070877,0.5567706823349,-0.707077980041504,-0.00901631452143192,0.707078039646149,-0.854747891426086,-0.367019683122635,0.367018282413483,-0.814563572406769,-0.187770694494247,0.54884260892868,-0.903776347637177,-0.196343123912811,0.380312591791153,-0.903776347637177,-0.196343123912811,0.380312591791153,-0.814563572406769,-0.187770694494247,0.54884260892868,-0.830622136592865,-0.00856000930070877,0.5567706823349,-0.814839720726013,-0.550853967666626,0.180543690919876,-0.854747891426086,-0.367019683122635,0.367018282413483,-0.904339611530304,-0.382818996906281,0.188731387257576,-0.828751444816589,-0.559616982936859,0,-0.814839720726013,-0.550853967666626,0.180543690919876,-0.904339611530304,-0.382818996906281,0.188731387257576,-0.904339611530304,-0.382818996906281,0.188731387257576,-0.854747891426086,-0.367019683122635,0.367018282413483,-0.903776347637177,-0.196343123912811,0.380312591791153,-0.695950627326965,-0.69595068693161,-0.176933422684669,-0.828751444816589,-0.559616982936859,0,-0.814839720726013,-0.550854086875916,-0.180543750524521,-0.664699971675873,-0.664700031280518,-0.341098099946976, +-0.695950627326965,-0.69595068693161,-0.176933422684669,-0.814839720726013,-0.550854086875916,-0.180543750524521,-0.696185231208801,0.175080239772797,0.696184635162354,-0.81633460521698,0.179389402270317,0.549014747142792,-0.830622136592865,-0.00856000930070877,0.5567706823349,-0.66462516784668,0.341392874717712,0.664623320102692,-0.81633460521698,0.179389402270317,0.549014747142792,-0.696185231208801,0.175080239772797,0.696184635162354,-0.828751444816589,-0.559616982936859,0,-0.904339611530304,-0.382818996906281,0.188731387257576,-0.921249151229858,-0.388973146677017,0,-0.814839720726013,-0.550854086875916,-0.180543750524521,-0.828751444816589,-0.559616982936859,0,-0.921249151229858,-0.388973146677017,0,-0.903776347637177,-0.196343123912811,0.380312591791153,-0.830622136592865,-0.00856000930070877,0.5567706823349,-0.923027396202087,-0.00756967486813664,0.384659588336945,-0.81633460521698,0.179389402270317,0.549014747142792,-0.923027396202087,-0.00756967486813664,0.384659588336945,-0.830622136592865,-0.00856000930070877,0.5567706823349,-0.904339611530304,-0.382818996906281,0.188731387257576,-0.903776347637177,-0.196343123912811,0.380312591791153,-0.95932948589325,-0.204361975193024,0.194738551974297,-0.921249151229858,-0.388973146677017,0,-0.904339611530304,-0.382818996906281,0.188731387257576,-0.95932948589325,-0.204361975193024,0.194738551974297,-0.95932948589325,-0.204361975193024,0.194738551974297,-0.903776347637177,-0.196343123912811,0.380312591791153,-0.923027396202087,-0.00756967486813664,0.384659588336945,-0.664699971675873,-0.664700031280518,-0.341098099946976,-0.814839720726013,-0.550854086875916,-0.180543750524521,-0.774614214897156,-0.527262926101685,-0.3492371737957,-0.620113670825958,-0.620113670825958,-0.480539411306381,-0.664699971675873,-0.664700031280518,-0.341098099946976,-0.774614214897156,-0.527262926101685,-0.3492371737957,-0.66462516784668,0.341392874717712,0.664623320102692,-0.775026500225067,0.349373489618301,0.52656626701355,-0.81633460521698,0.179389402270317,0.549014747142792,-0.619981110095978,0.480883091688156,0.619979798793793, +-0.775026500225067,0.349373489618301,0.52656626701355,-0.66462516784668,0.341392874717712,0.664623320102692,-0.814839720726013,-0.550854086875916,-0.180543750524521,-0.921249151229858,-0.388973146677017,0,-0.904339611530304,-0.382818996906281,-0.188731417059898,-0.774614214897156,-0.527262926101685,-0.3492371737957,-0.814839720726013,-0.550854086875916,-0.180543750524521,-0.904339611530304,-0.382818996906281,-0.188731417059898,-0.921249151229858,-0.388973146677017,0,-0.95932948589325,-0.204361975193024,0.194738551974297,-0.978279769420624,-0.20728862285614,-0.000337441771989688,-0.904339611530304,-0.382818996906281,-0.188731417059898,-0.921249151229858,-0.388973146677017,0,-0.978279769420624,-0.20728862285614,-0.000337441771989688,-0.95932948589325,-0.204361975193024,0.194738551974297,-0.923027396202087,-0.00756967486813664,0.384659588336945,-0.980437636375427,-0.00691010849550366,0.196708589792252,-0.978279769420624,-0.20728862285614,-0.000337441771989688,-0.95932948589325,-0.204361975193024,0.194738551974297,-0.980437636375427,-0.00691010849550366,0.196708589792252,-0.81633460521698,0.179389402270317,0.549014747142792,-0.905539155006409,0.188871428370476,0.379902988672256,-0.923027396202087,-0.00756967486813664,0.384659588336945,-0.775026500225067,0.349373489618301,0.52656626701355,-0.905539155006409,0.188871428370476,0.379902988672256,-0.81633460521698,0.179389402270317,0.549014747142792,-0.905539155006409,0.188871428370476,0.379902988672256,-0.980437636375427,-0.00691010849550366,0.196708589792252,-0.923027396202087,-0.00756967486813664,0.384659588336945,-0.620113670825958,-0.620113670825958,-0.480539411306381,-0.774614214897156,-0.527262926101685,-0.3492371737957,-0.712226629257202,-0.496354192495346,-0.496352404356003,-0.577350258827209,-0.577350258827209,-0.577350318431854,-0.620113670825958,-0.620113670825958,-0.480539411306381,-0.712226629257202,-0.496354192495346,-0.496352404356003,-0.577350258827209,-0.577350258827209,-0.577350318431854,-0.712226629257202,-0.496354192495346,-0.496352404356003,-0.620113134384155,-0.480540663003922,-0.620113134384155, +-0.774614214897156,-0.527262926101685,-0.3492371737957,-0.904339611530304,-0.382818996906281,-0.188731417059898,-0.854747891426086,-0.367019683122635,-0.367018282413483,-0.712226629257202,-0.496354192495346,-0.496352404356003,-0.774614214897156,-0.527262926101685,-0.3492371737957,-0.854747891426086,-0.367019683122635,-0.367018282413483,-0.620113134384155,-0.480540663003922,-0.620113134384155,-0.712226629257202,-0.496354192495346,-0.496352404356003,-0.774613916873932,-0.349238693714142,-0.527262270450592,-0.712226629257202,-0.496354192495346,-0.496352404356003,-0.854747891426086,-0.367019683122635,-0.367018282413483,-0.774613916873932,-0.349238693714142,-0.527262270450592,-0.620113134384155,-0.480540663003922,-0.620113134384155,-0.774613916873932,-0.349238693714142,-0.527262270450592,-0.664699852466583,-0.341098606586456,-0.664699792861938,-0.904339611530304,-0.382818996906281,-0.188731417059898,-0.978279769420624,-0.20728862285614,-0.000337441771989688,-0.959099769592285,-0.204040184617043,-0.19620206952095,-0.854747891426086,-0.367019683122635,-0.367018282413483,-0.904339611530304,-0.382818996906281,-0.188731417059898,-0.959099769592285,-0.204040184617043,-0.19620206952095,-0.978279769420624,-0.20728862285614,-0.000337441771989688,-0.980437636375427,-0.00691010849550366,0.196708589792252,-0.999974966049194,-0.00702718738466501,-0.000914106087293476,-0.959099769592285,-0.204040184617043,-0.19620206952095,-0.978279769420624,-0.20728862285614,-0.000337441771989688,-0.999974966049194,-0.00702718738466501,-0.000914106087293476,-0.905539155006409,0.188871428370476,0.379902988672256,-0.960723042488098,0.197564914822578,0.194882586598396,-0.980437636375427,-0.00691010849550366,0.196708589792252,-0.960723042488098,0.197564914822578,0.194882586598396,-0.999974966049194,-0.00702718738466501,-0.000914106087293476,-0.980437636375427,-0.00691010849550366,0.196708589792252,-0.664699852466583,-0.341098606586456,-0.664699792861938,-0.774613916873932,-0.349238693714142,-0.527262270450592,-0.813445210456848,-0.189825028181076,-0.549794018268585, +-0.664699852466583,-0.341098606586456,-0.664699792861938,-0.813445210456848,-0.189825028181076,-0.549794018268585,-0.694678962230682,-0.186661079525948,-0.694679021835327,-0.774613916873932,-0.349238693714142,-0.527262270450592,-0.854747891426086,-0.367019683122635,-0.367018282413483,-0.902869760990143,-0.197031900286674,-0.382105678319931,-0.854747891426086,-0.367019683122635,-0.367018282413483,-0.959099769592285,-0.204040184617043,-0.19620206952095,-0.902869760990143,-0.197031900286674,-0.382105678319931,-0.774613916873932,-0.349238693714142,-0.527262270450592,-0.902869760990143,-0.197031900286674,-0.382105678319931,-0.813445210456848,-0.189825028181076,-0.549794018268585,-0.959099769592285,-0.204040184617043,-0.19620206952095,-0.999974966049194,-0.00702718738466501,-0.000914106087293476,-0.979799151420593,-0.00764034921303391,-0.199837923049927,-0.902869760990143,-0.197031900286674,-0.382105678319931,-0.959099769592285,-0.204040184617043,-0.19620206952095,-0.979799151420593,-0.00764034921303391,-0.199837923049927,-0.694678962230682,-0.186661079525948,-0.694679021835327,-0.813445210456848,-0.189825028181076,-0.549794018268585,-0.829044103622437,-0.00954402238130569,-0.559101760387421,-0.694678962230682,-0.186661079525948,-0.694679021835327,-0.829044103622437,-0.00954402238130569,-0.559101760387421,-0.707071542739868,-0.00997658353298903,-0.707071542739868,-0.813445210456848,-0.189825028181076,-0.549794018268585,-0.902869760990143,-0.197031900286674,-0.382105678319931,-0.9214768409729,-0.00855846982449293,-0.388339132070541,-0.902869760990143,-0.197031900286674,-0.382105678319931,-0.979799151420593,-0.00764034921303391,-0.199837923049927,-0.9214768409729,-0.00855846982449293,-0.388339132070541,-0.813445210456848,-0.189825028181076,-0.549794018268585,-0.9214768409729,-0.00855846982449293,-0.388339132070541,-0.829044103622437,-0.00954402238130569,-0.559101760387421,-0.97970312833786,0.200452893972397,-0.000575495942030102,-0.979799151420593,-0.00764034921303391,-0.199837923049927,-0.999974966049194,-0.00702718738466501,-0.000914106087293476, +-0.960723042488098,0.197564914822578,0.194882586598396,-0.97970312833786,0.200452893972397,-0.000575495942030102,-0.999974966049194,-0.00702718738466501,-0.000914106087293476,-0.855252385139465,0.366519182920456,0.366342753171921,-0.960723042488098,0.197564914822578,0.194882586598396,-0.905539155006409,0.188871428370476,0.379902988672256,-0.775026500225067,0.349373489618301,0.52656626701355,-0.855252385139465,0.366519182920456,0.366342753171921,-0.905539155006409,0.188871428370476,0.379902988672256,-0.81538861989975,0.180479481816292,-0.550062239170074,-0.707071542739868,-0.00997658353298903,-0.707071542739868,-0.829044103622437,-0.00954402238130569,-0.559101760387421,-0.81538861989975,0.180479481816292,-0.550062239170074,-0.695963561534882,0.176833614706993,-0.695963025093079,-0.707071542739868,-0.00997658353298903,-0.707071542739868,-0.904820084571838,0.188590243458748,-0.38175156712532,-0.829044103622437,-0.00954402238130569,-0.559101760387421,-0.9214768409729,-0.00855846982449293,-0.388339132070541,-0.904820084571838,0.188590243458748,-0.38175156712532,-0.81538861989975,0.180479481816292,-0.550062239170074,-0.829044103622437,-0.00954402238130569,-0.559101760387421,-0.960587084293365,0.196522727608681,-0.196599394083023,-0.9214768409729,-0.00855846982449293,-0.388339132070541,-0.979799151420593,-0.00764034921303391,-0.199837923049927,-0.97970312833786,0.200452893972397,-0.000575495942030102,-0.960587084293365,0.196522727608681,-0.196599394083023,-0.979799151420593,-0.00764034921303391,-0.199837923049927,-0.960587084293365,0.196522727608681,-0.196599394083023,-0.904820084571838,0.188590243458748,-0.38175156712532,-0.9214768409729,-0.00855846982449293,-0.388339132070541,-0.904723465442657,0.381952583789825,0.188646897673607,-0.97970312833786,0.200452893972397,-0.000575495942030102,-0.960723042488098,0.197564914822578,0.194882586598396,-0.855252385139465,0.366519182920456,0.366342753171921,-0.904723465442657,0.381952583789825,0.188646897673607,-0.960723042488098,0.197564914822578,0.194882586598396,-0.712536811828613,0.496405899524689,0.495855361223221, +-0.855252385139465,0.366519182920456,0.366342753171921,-0.775026500225067,0.349373489618301,0.52656626701355,-0.619981110095978,0.480883091688156,0.619979798793793,-0.712536811828613,0.496405899524689,0.495855361223221,-0.775026500225067,0.349373489618301,0.52656626701355,-0.577053427696228,0.577943503856659,0.577053427696228,-0.712536811828613,0.496405899524689,0.495855361223221,-0.619981110095978,0.480883091688156,0.619979798793793,-0.577053427696228,0.577943503856659,0.577053427696228,-0.619905412197113,0.620459377765656,0.48036190867424,-0.712536811828613,0.496405899524689,0.495855361223221,-0.712536811828613,0.496405899524689,0.495855361223221,-0.774905681610107,0.526864945888519,0.349191218614578,-0.855252385139465,0.366519182920456,0.366342753171921,-0.619905412197113,0.620459377765656,0.48036190867424,-0.774905681610107,0.526864945888519,0.349191218614578,-0.712536811828613,0.496405899524689,0.495855361223221,-0.774905681610107,0.526864945888519,0.349191218614578,-0.904723465442657,0.381952583789825,0.188646897673607,-0.855252385139465,0.366519182920456,0.366342753171921,-0.619905412197113,0.620459377765656,0.48036190867424,-0.664595365524292,0.664652287960052,0.341394633054733,-0.774905681610107,0.526864945888519,0.349191218614578,-0.664595365524292,0.664652287960052,0.341394633054733,-0.815262854099274,0.550244867801666,0.180491492152214,-0.774905681610107,0.526864945888519,0.349191218614578,-0.774905681610107,0.526864945888519,0.349191218614578,-0.815262854099274,0.550244867801666,0.180491492152214,-0.904723465442657,0.381952583789825,0.188646897673607,-0.664595365524292,0.664652287960052,0.341394633054733,-0.696051061153412,0.695869386196136,0.176858067512512,-0.815262854099274,0.550244867801666,0.180491492152214,-0.904723465442657,0.381952583789825,0.188646897673607,-0.921611964702606,0.388112545013428,0,-0.97970312833786,0.200452893972397,-0.000575495942030102,-0.815262854099274,0.550244867801666,0.180491492152214,-0.921611964702606,0.388112545013428,0,-0.904723465442657,0.381952583789825,0.188646897673607, +-0.921611964702606,0.388112545013428,0,-0.960587084293365,0.196522727608681,-0.196599394083023,-0.97970312833786,0.200452893972397,-0.000575495942030102,-0.696051061153412,0.695869386196136,0.176858067512512,-0.829180955886841,0.558980345726013,0,-0.815262854099274,0.550244867801666,0.180491492152214,-0.815262854099274,0.550244867801666,0.180491492152214,-0.829180955886841,0.558980345726013,0,-0.921611964702606,0.388112545013428,0,-0.696051061153412,0.695869386196136,0.176858067512512,-0.707205593585968,0.707008004188538,0,-0.829180955886841,0.558980345726013,0,-0.921611964702606,0.388112545013428,0,-0.904723286628723,0.381952881813049,-0.188646912574768,-0.960587084293365,0.196522727608681,-0.196599394083023,-0.829180955886841,0.558980345726013,0,-0.904723286628723,0.381952881813049,-0.188646912574768,-0.921611964702606,0.388112545013428,0,-0.904723286628723,0.381952881813049,-0.188646912574768,-0.904820084571838,0.188590243458748,-0.38175156712532,-0.960587084293365,0.196522727608681,-0.196599394083023,-0.707205593585968,0.707008004188538,0,-0.815262854099274,0.550244927406311,-0.180491298437119,-0.829180955886841,0.558980345726013,0,-0.829180955886841,0.558980345726013,0,-0.815262854099274,0.550244927406311,-0.180491298437119,-0.904723286628723,0.381952881813049,-0.188646912574768,-0.707205593585968,0.707008004188538,0,-0.696051239967346,0.695869088172913,-0.176858022809029,-0.815262854099274,0.550244927406311,-0.180491298437119,-0.904723286628723,0.381952881813049,-0.188646912574768,-0.855252385139465,0.366519421339035,-0.366342514753342,-0.904820084571838,0.188590243458748,-0.38175156712532,-0.815262854099274,0.550244927406311,-0.180491298437119,-0.855252385139465,0.366519421339035,-0.366342514753342,-0.904723286628723,0.381952881813049,-0.188646912574768,-0.855252385139465,0.366519421339035,-0.366342514753342,-0.81538861989975,0.180479481816292,-0.550062239170074,-0.904820084571838,0.188590243458748,-0.38175156712532,-0.696051239967346,0.695869088172913,-0.176858022809029,-0.774905860424042,0.526865005493164,-0.349190801382065, +-0.815262854099274,0.550244927406311,-0.180491298437119,-0.815262854099274,0.550244927406311,-0.180491298437119,-0.774905860424042,0.526865005493164,-0.349190801382065,-0.855252385139465,0.366519421339035,-0.366342514753342,-0.696051239967346,0.695869088172913,-0.176858022809029,-0.664595663547516,0.664652168750763,-0.341394424438477,-0.774905860424042,0.526865005493164,-0.349190801382065,-0.855252385139465,0.366519421339035,-0.366342514753342,-0.775026500225067,0.349373400211334,-0.526566207408905,-0.81538861989975,0.180479481816292,-0.550062239170074,-0.774905860424042,0.526865005493164,-0.349190801382065,-0.775026500225067,0.349373400211334,-0.526566207408905,-0.855252385139465,0.366519421339035,-0.366342514753342,-0.775026500225067,0.349373400211334,-0.526566207408905,-0.695963561534882,0.176833614706993,-0.695963025093079,-0.81538861989975,0.180479481816292,-0.550062239170074,-0.775026500225067,0.349373400211334,-0.526566207408905,-0.66462516784668,0.341392874717712,-0.664623320102692,-0.695963561534882,0.176833614706993,-0.695963025093079,-0.664595663547516,0.664652168750763,-0.341394424438477,-0.712536811828613,0.496405899524689,-0.495855361223221,-0.774905860424042,0.526865005493164,-0.349190801382065,-0.774905860424042,0.526865005493164,-0.349190801382065,-0.712536811828613,0.496405899524689,-0.495855361223221,-0.775026500225067,0.349373400211334,-0.526566207408905,-0.712536811828613,0.496405899524689,-0.495855361223221,-0.66462516784668,0.341392874717712,-0.664623320102692,-0.775026500225067,0.349373400211334,-0.526566207408905,-0.664595663547516,0.664652168750763,-0.341394424438477,-0.619905412197113,0.620459377765656,-0.48036190867424,-0.712536811828613,0.496405899524689,-0.495855361223221,-0.712536811828613,0.496405899524689,-0.495855361223221,-0.619981110095978,0.480883091688156,-0.619979798793793,-0.66462516784668,0.341392874717712,-0.664623320102692,-0.619905412197113,0.620459377765656,-0.48036190867424,-0.619981110095978,0.480883091688156,-0.619979798793793,-0.712536811828613,0.496405899524689,-0.495855361223221, +-0.619905412197113,0.620459377765656,-0.48036190867424,-0.577053427696228,0.577943503856659,-0.577053427696228,-0.619981110095978,0.480883091688156,-0.619979798793793,0.480539411306381,-0.620113670825958,0.620113670825958,0.577350318431854,-0.577350258827209,0.577350258827209,0.620113670825958,-0.480539411306381,0.620113670825958,0.480539411306381,-0.620113670825958,0.620113670825958,0.620113670825958,-0.480539411306381,0.620113670825958,0.496352732181549,-0.496352732181549,0.712227404117584,0.341097921133041,-0.664699912071228,0.664700150489807,0.480539411306381,-0.620113670825958,0.620113670825958,0.496352732181549,-0.496352732181549,0.712227404117584,0.496352732181549,-0.496352732181549,0.712227404117584,0.620113670825958,-0.480539411306381,0.620113670825958,0.664699971675873,-0.341098099946976,0.664700031280518,0.341097921133041,-0.664699912071228,0.664700150489807,0.496352732181549,-0.496352732181549,0.712227404117584,0.349237501621246,-0.527262389659882,0.774614453315735,0.176933258771896,-0.695950508117676,0.695950865745544,0.341097921133041,-0.664699912071228,0.664700150489807,0.349237501621246,-0.527262389659882,0.774614453315735,0.496352732181549,-0.496352732181549,0.712227404117584,0.664699971675873,-0.341098099946976,0.664700031280518,0.527262330055237,-0.349237889051437,0.774614274501801,0.349237501621246,-0.527262389659882,0.774614453315735,0.496352732181549,-0.496352732181549,0.712227404117584,0.527262330055237,-0.349237889051437,0.774614274501801,0.527262330055237,-0.349237889051437,0.774614274501801,0.664699971675873,-0.341098099946976,0.664700031280518,0.695038080215454,-0.183967456221581,0.695038080215454,0.176933258771896,-0.695950508117676,0.695950865745544,0.349237501621246,-0.527262389659882,0.774614453315735,0.18054336309433,-0.550854086875916,0.814839720726013,-0,-0.707106649875641,0.70710688829422,0.176933258771896,-0.695950508117676,0.695950865745544,0.18054336309433,-0.550854086875916,0.814839720726013,0.527262330055237,-0.349237889051437,0.774614274501801,0.695038080215454,-0.183967456221581,0.695038080215454, +0.54884272813797,-0.187771618366241,0.814563453197479,0.54884272813797,-0.187771618366241,0.814563453197479,0.695038080215454,-0.183967456221581,0.695038080215454,0.707078039646149,-0.00901631452143192,0.707077980041504,0.349237501621246,-0.527262389659882,0.774614453315735,0.527262330055237,-0.349237889051437,0.774614274501801,0.367019176483154,-0.367019683122635,0.854747593402863,0.18054336309433,-0.550854086875916,0.814839720726013,0.349237501621246,-0.527262389659882,0.774614453315735,0.367019176483154,-0.367019683122635,0.854747593402863,0.367019176483154,-0.367019683122635,0.854747593402863,0.527262330055237,-0.349237889051437,0.774614274501801,0.54884272813797,-0.187771618366241,0.814563453197479,-0,-0.707106649875641,0.70710688829422,0.18054336309433,-0.550854086875916,0.814839720726013,-0,-0.559616982936859,0.828751385211945,-0.176932841539383,-0.695950746536255,0.69595068693161,-0,-0.707106649875641,0.70710688829422,-0,-0.559616982936859,0.828751385211945,0.54884272813797,-0.187771618366241,0.814563453197479,0.707078039646149,-0.00901631452143192,0.707077980041504,0.5567706823349,-0.00856000930070877,0.830622136592865,0.696184992790222,0.175079762935638,0.696184992790222,0.5567706823349,-0.00856000930070877,0.830622136592865,0.707078039646149,-0.00901631452143192,0.707077980041504,0.367019176483154,-0.367019683122635,0.854747593402863,0.54884272813797,-0.187771618366241,0.814563453197479,0.380313009023666,-0.196343541145325,0.903776049613953,0.380313009023666,-0.196343541145325,0.903776049613953,0.54884272813797,-0.187771618366241,0.814563453197479,0.5567706823349,-0.00856000930070877,0.830622136592865,0.18054336309433,-0.550854086875916,0.814839720726013,0.367019176483154,-0.367019683122635,0.854747593402863,0.188731208443642,-0.38281923532486,0.904339492321014,-0,-0.559616982936859,0.828751385211945,0.18054336309433,-0.550854086875916,0.814839720726013,0.188731208443642,-0.38281923532486,0.904339492321014,0.188731208443642,-0.38281923532486,0.904339492321014,0.367019176483154,-0.367019683122635,0.854747593402863, +0.380313009023666,-0.196343541145325,0.903776049613953,-0.176932841539383,-0.695950746536255,0.69595068693161,-0,-0.559616982936859,0.828751385211945,-0.180542528629303,-0.550854086875916,0.814839959144592,-0.341098129749298,-0.66470068693161,0.664699137210846,-0.176932841539383,-0.695950746536255,0.69595068693161,-0.180542528629303,-0.550854086875916,0.814839959144592,0.696184992790222,0.175079762935638,0.696184992790222,0.549014747142792,0.179388508200645,0.816334843635559,0.5567706823349,-0.00856000930070877,0.830622136592865,0.664624214172363,0.341393172740936,0.664624214172363,0.549014747142792,0.179388508200645,0.816334843635559,0.696184992790222,0.175079762935638,0.696184992790222,-0,-0.559616982936859,0.828751385211945,0.188731208443642,-0.38281923532486,0.904339492321014,-0,-0.388973265886307,0.921249032020569,-0.180542528629303,-0.550854086875916,0.814839959144592,-0,-0.559616982936859,0.828751385211945,-0,-0.388973265886307,0.921249032020569,0.380313009023666,-0.196343541145325,0.903776049613953,0.5567706823349,-0.00856000930070877,0.830622136592865,0.384659588336945,-0.00756967486813664,0.923027396202087,0.549014747142792,0.179388508200645,0.816334843635559,0.384659588336945,-0.00756967486813664,0.923027396202087,0.5567706823349,-0.00856000930070877,0.830622136592865,0.188731208443642,-0.38281923532486,0.904339492321014,0.380313009023666,-0.196343541145325,0.903776049613953,0.194738566875458,-0.204361975193024,0.95932948589325,-0,-0.388973265886307,0.921249032020569,0.188731208443642,-0.38281923532486,0.904339492321014,0.194738566875458,-0.204361975193024,0.95932948589325,0.194738566875458,-0.204361975193024,0.95932948589325,0.380313009023666,-0.196343541145325,0.903776049613953,0.384659588336945,-0.00756967486813664,0.923027396202087,-0.341098129749298,-0.66470068693161,0.664699137210846,-0.180542528629303,-0.550854086875916,0.814839959144592,-0.349237442016602,-0.527262985706329,0.774614095687866,-0.480540037155151,-0.620114028453827,0.620112836360931,-0.341098129749298,-0.66470068693161,0.664699137210846, +-0.349237442016602,-0.527262985706329,0.774614095687866,0.664624214172363,0.341393172740936,0.664624214172363,0.52656626701355,0.349374145269394,0.775026321411133,0.549014747142792,0.179388508200645,0.816334843635559,0.619980156421661,0.480883747339249,0.619980216026306,0.52656626701355,0.349374145269394,0.775026321411133,0.664624214172363,0.341393172740936,0.664624214172363,-0.180542528629303,-0.550854086875916,0.814839959144592,-0,-0.388973265886307,0.921249032020569,-0.188730806112289,-0.382818847894669,0.904339671134949,-0.349237442016602,-0.527262985706329,0.774614095687866,-0.180542528629303,-0.550854086875916,0.814839959144592,-0.188730806112289,-0.382818847894669,0.904339671134949,-0,-0.388973265886307,0.921249032020569,0.194738566875458,-0.204361975193024,0.95932948589325,-0,-0.207611441612244,0.978211283683777,-0.188730806112289,-0.382818847894669,0.904339671134949,-0,-0.388973265886307,0.921249032020569,-0,-0.207611441612244,0.978211283683777,0.194738566875458,-0.204361975193024,0.95932948589325,0.384659588336945,-0.00756967486813664,0.923027396202087,0.196708664298058,-0.00691020814701915,0.980437636375427,-0,-0.207611441612244,0.978211283683777,0.194738566875458,-0.204361975193024,0.95932948589325,0.196708664298058,-0.00691020814701915,0.980437636375427,0.549014747142792,0.179388508200645,0.816334843635559,0.379902601242065,0.188870996236801,0.905539453029633,0.384659588336945,-0.00756967486813664,0.923027396202087,0.52656626701355,0.349374145269394,0.775026321411133,0.379902601242065,0.188870996236801,0.905539453029633,0.549014747142792,0.179388508200645,0.816334843635559,0.379902601242065,0.188870996236801,0.905539453029633,0.196708664298058,-0.00691020814701915,0.980437636375427,0.384659588336945,-0.00756967486813664,0.923027396202087,-0.480540037155151,-0.620114028453827,0.620112836360931,-0.349237442016602,-0.527262985706329,0.774614095687866,-0.496353894472122,-0.496353894472122,0.712225914001465,-0.577350258827209,-0.577350258827209,0.577350318431854,-0.480540037155151,-0.620114028453827,0.620112836360931, +-0.496353894472122,-0.496353894472122,0.712225914001465,-0.577350258827209,-0.577350258827209,0.577350318431854,-0.496353894472122,-0.496353894472122,0.712225914001465,-0.620113134384155,-0.480540663003922,0.620113134384155,-0.349237442016602,-0.527262985706329,0.774614095687866,-0.188730806112289,-0.382818847894669,0.904339671134949,-0.367018401622772,-0.367018818855286,0.854748249053955,-0.496353894472122,-0.496353894472122,0.712225914001465,-0.349237442016602,-0.527262985706329,0.774614095687866,-0.367018401622772,-0.367018818855286,0.854748249053955,-0.620113134384155,-0.480540663003922,0.620113134384155,-0.496353894472122,-0.496353894472122,0.712225914001465,-0.527262926101685,-0.349237889051437,0.774613916873932,-0.496353894472122,-0.496353894472122,0.712225914001465,-0.367018401622772,-0.367018818855286,0.854748249053955,-0.527262926101685,-0.349237889051437,0.774613916873932,-0.620113134384155,-0.480540663003922,0.620113134384155,-0.527262926101685,-0.349237889051437,0.774613916873932,-0.664699852466583,-0.341098606586456,0.664699792861938,-0.188730806112289,-0.382818847894669,0.904339671134949,-0,-0.207611441612244,0.978211283683777,-0.194738626480103,-0.204361975193024,0.95932948589325,-0.367018401622772,-0.367018818855286,0.854748249053955,-0.188730806112289,-0.382818847894669,0.904339671134949,-0.194738626480103,-0.204361975193024,0.95932948589325,-0,-0.207611441612244,0.978211283683777,0.196708664298058,-0.00691020814701915,0.980437636375427,-0,-0.00678358506411314,0.999976992607117,-0.194738626480103,-0.204361975193024,0.95932948589325,-0,-0.207611441612244,0.978211283683777,-0,-0.00678358506411314,0.999976992607117,0.379902601242065,0.188870996236801,0.905539453029633,0.194882899522781,0.197565078735352,0.960722923278809,0.196708664298058,-0.00691020814701915,0.980437636375427,0.194882899522781,0.197565078735352,0.960722923278809,-0,-0.00678358506411314,0.999976992607117,0.196708664298058,-0.00691020814701915,0.980437636375427,-0.664699852466583,-0.341098606586456,0.664699792861938,-0.527262926101685,-0.349237889051437,0.774613916873932, +-0.54884260892868,-0.187770694494247,0.814563572406769,-0.664699852466583,-0.341098606586456,0.664699792861938,-0.54884260892868,-0.187770694494247,0.814563572406769,-0.695038259029388,-0.183966562151909,0.695038259029388,-0.527262926101685,-0.349237889051437,0.774613916873932,-0.367018401622772,-0.367018818855286,0.854748249053955,-0.380312621593475,-0.196343079209328,0.903776347637177,-0.367018401622772,-0.367018818855286,0.854748249053955,-0.194738626480103,-0.204361975193024,0.95932948589325,-0.380312621593475,-0.196343079209328,0.903776347637177,-0.527262926101685,-0.349237889051437,0.774613916873932,-0.380312621593475,-0.196343079209328,0.903776347637177,-0.54884260892868,-0.187770694494247,0.814563572406769,-0.194738626480103,-0.204361975193024,0.95932948589325,-0,-0.00678358506411314,0.999976992607117,-0.196708753705025,-0.00691020349040627,0.980437576770782,-0.380312621593475,-0.196343079209328,0.903776347637177,-0.194738626480103,-0.204361975193024,0.95932948589325,-0.196708753705025,-0.00691020349040627,0.980437576770782,-0.695038259029388,-0.183966562151909,0.695038259029388,-0.54884260892868,-0.187770694494247,0.814563572406769,-0.5567706823349,-0.00856000930070877,0.830622136592865,-0.695038259029388,-0.183966562151909,0.695038259029388,-0.5567706823349,-0.00856000930070877,0.830622136592865,-0.707077980041504,-0.00901631452143192,0.707078039646149,-0.54884260892868,-0.187770694494247,0.814563572406769,-0.380312621593475,-0.196343079209328,0.903776347637177,-0.384659588336945,-0.00756967486813664,0.923027396202087,-0.380312621593475,-0.196343079209328,0.903776347637177,-0.196708753705025,-0.00691020349040627,0.980437576770782,-0.384659588336945,-0.00756967486813664,0.923027396202087,-0.54884260892868,-0.187770694494247,0.814563572406769,-0.384659588336945,-0.00756967486813664,0.923027396202087,-0.5567706823349,-0.00856000930070877,0.830622136592865,-0,0.201010167598724,0.97958916425705,-0.196708753705025,-0.00691020349040627,0.980437576770782,-0,-0.00678358506411314,0.999976992607117,0.194882899522781,0.197565078735352,0.960722923278809, +-0,0.201010167598724,0.97958916425705,-0,-0.00678358506411314,0.999976992607117,0.366341561079025,0.366519451141357,0.855252742767334,0.194882899522781,0.197565078735352,0.960722923278809,0.379902601242065,0.188870996236801,0.905539453029633,0.52656626701355,0.349374145269394,0.775026321411133,0.366341561079025,0.366519451141357,0.855252742767334,0.379902601242065,0.188870996236801,0.905539453029633,-0.549014806747437,0.179388493299484,0.816334784030914,-0.707077980041504,-0.00901631452143192,0.707078039646149,-0.5567706823349,-0.00856000930070877,0.830622136592865,-0.549014806747437,0.179388493299484,0.816334784030914,-0.696185231208801,0.175080239772797,0.696184635162354,-0.707077980041504,-0.00901631452143192,0.707078039646149,-0.379902601242065,0.188870996236801,0.905539453029633,-0.5567706823349,-0.00856000930070877,0.830622136592865,-0.384659588336945,-0.00756967486813664,0.923027396202087,-0.379902601242065,0.188870996236801,0.905539453029633,-0.549014806747437,0.179388493299484,0.816334784030914,-0.5567706823349,-0.00856000930070877,0.830622136592865,-0.19488300383091,0.197565108537674,0.960722923278809,-0.384659588336945,-0.00756967486813664,0.923027396202087,-0.196708753705025,-0.00691020349040627,0.980437576770782,-0,0.201010167598724,0.97958916425705,-0.19488300383091,0.197565108537674,0.960722923278809,-0.196708753705025,-0.00691020349040627,0.980437576770782,-0.19488300383091,0.197565108537674,0.960722923278809,-0.379902601242065,0.188870996236801,0.905539453029633,-0.384659588336945,-0.00756967486813664,0.923027396202087,0.188647136092186,0.381952792406082,0.904723286628723,-0,0.201010167598724,0.97958916425705,0.194882899522781,0.197565078735352,0.960722923278809,0.366341561079025,0.366519451141357,0.855252742767334,0.188647136092186,0.381952792406082,0.904723286628723,0.194882899522781,0.197565078735352,0.960722923278809,0.495855003595352,0.496407330036163,0.712536036968231,0.366341561079025,0.366519451141357,0.855252742767334,0.52656626701355,0.349374145269394,0.775026321411133,0.619980156421661,0.480883747339249,0.619980216026306, +0.495855003595352,0.496407330036163,0.712536036968231,0.52656626701355,0.349374145269394,0.775026321411133,0.577053427696228,0.577943503856659,0.577053427696228,0.495855003595352,0.496407330036163,0.712536036968231,0.619980156421661,0.480883747339249,0.619980216026306,0.577053427696228,0.577943503856659,0.577053427696228,0.48036190867424,0.620459377765656,0.619905412197113,0.495855003595352,0.496407330036163,0.712536036968231,0.495855003595352,0.496407330036163,0.712536036968231,0.349190473556519,0.526865661144257,0.774905622005463,0.366341561079025,0.366519451141357,0.855252742767334,0.48036190867424,0.620459377765656,0.619905412197113,0.349190473556519,0.526865661144257,0.774905622005463,0.495855003595352,0.496407330036163,0.712536036968231,0.349190473556519,0.526865661144257,0.774905622005463,0.188647136092186,0.381952792406082,0.904723286628723,0.366341561079025,0.366519451141357,0.855252742767334,0.48036190867424,0.620459377765656,0.619905412197113,0.341394633054733,0.664652287960052,0.664595365524292,0.349190473556519,0.526865661144257,0.774905622005463,0.341394633054733,0.664652287960052,0.664595365524292,0.180491507053375,0.550244867801666,0.815262854099274,0.349190473556519,0.526865661144257,0.774905622005463,0.349190473556519,0.526865661144257,0.774905622005463,0.180491507053375,0.550244867801666,0.815262854099274,0.188647136092186,0.381952792406082,0.904723286628723,0.341394633054733,0.664652287960052,0.664595365524292,0.176858082413673,0.695869386196136,0.696051061153412,0.180491507053375,0.550244867801666,0.815262854099274,0.188647136092186,0.381952792406082,0.904723286628723,-0,0.388112872838974,0.921611785888672,-0,0.201010167598724,0.97958916425705,0.180491507053375,0.550244867801666,0.815262854099274,-0,0.388112872838974,0.921611785888672,0.188647136092186,0.381952792406082,0.904723286628723,-0,0.388112872838974,0.921611785888672,-0.19488300383091,0.197565108537674,0.960722923278809,-0,0.201010167598724,0.97958916425705,0.176858082413673,0.695869386196136,0.696051061153412,-0,0.558980345726013,0.829180955886841, +0.180491507053375,0.550244867801666,0.815262854099274,0.180491507053375,0.550244867801666,0.815262854099274,-0,0.558980345726013,0.829180955886841,-0,0.388112872838974,0.921611785888672,0.176858082413673,0.695869386196136,0.696051061153412,-0,0.707008004188538,0.707205593585968,-0,0.558980345726013,0.829180955886841,-0,0.388112872838974,0.921611785888672,-0.188647240400314,0.381952822208405,0.904723286628723,-0.19488300383091,0.197565108537674,0.960722923278809,-0,0.558980345726013,0.829180955886841,-0.188647240400314,0.381952822208405,0.904723286628723,-0,0.388112872838974,0.921611785888672,-0.188647240400314,0.381952822208405,0.904723286628723,-0.379902601242065,0.188870996236801,0.905539453029633,-0.19488300383091,0.197565108537674,0.960722923278809,-0,0.707008004188538,0.707205593585968,-0.18049156665802,0.550244808197021,0.815262794494629,-0,0.558980345726013,0.829180955886841,-0,0.558980345726013,0.829180955886841,-0.18049156665802,0.550244808197021,0.815262794494629,-0.188647240400314,0.381952822208405,0.904723286628723,-0,0.707008004188538,0.707205593585968,-0.176858142018318,0.695869326591492,0.696051061153412,-0.18049156665802,0.550244808197021,0.815262794494629,-0.188647240400314,0.381952822208405,0.904723286628723,-0.36634162068367,0.366519451141357,0.855252742767334,-0.379902601242065,0.188870996236801,0.905539453029633,-0.18049156665802,0.550244808197021,0.815262794494629,-0.36634162068367,0.366519451141357,0.855252742767334,-0.188647240400314,0.381952822208405,0.904723286628723,-0.36634162068367,0.366519451141357,0.855252742767334,-0.549014806747437,0.179388493299484,0.816334784030914,-0.379902601242065,0.188870996236801,0.905539453029633,-0.176858142018318,0.695869326591492,0.696051061153412,-0.349190443754196,0.526865601539612,0.774905622005463,-0.18049156665802,0.550244808197021,0.815262794494629,-0.18049156665802,0.550244808197021,0.815262794494629,-0.349190443754196,0.526865601539612,0.774905622005463,-0.36634162068367,0.366519451141357,0.855252742767334,-0.176858142018318,0.695869326591492,0.696051061153412, +-0.341394633054733,0.664652287960052,0.664595365524292,-0.349190443754196,0.526865601539612,0.774905622005463,-0.36634162068367,0.366519451141357,0.855252742767334,-0.52656626701355,0.349374145269394,0.775026321411133,-0.549014806747437,0.179388493299484,0.816334784030914,-0.349190443754196,0.526865601539612,0.774905622005463,-0.52656626701355,0.349374145269394,0.775026321411133,-0.36634162068367,0.366519451141357,0.855252742767334,-0.52656626701355,0.349374145269394,0.775026321411133,-0.696185231208801,0.175080239772797,0.696184635162354,-0.549014806747437,0.179388493299484,0.816334784030914,-0.52656626701355,0.349374145269394,0.775026321411133,-0.66462516784668,0.341392874717712,0.664623320102692,-0.696185231208801,0.175080239772797,0.696184635162354,-0.341394633054733,0.664652287960052,0.664595365524292,-0.495855003595352,0.496407330036163,0.712536036968231,-0.349190443754196,0.526865601539612,0.774905622005463,-0.349190443754196,0.526865601539612,0.774905622005463,-0.495855003595352,0.496407330036163,0.712536036968231,-0.52656626701355,0.349374145269394,0.775026321411133,-0.495855003595352,0.496407330036163,0.712536036968231,-0.66462516784668,0.341392874717712,0.664623320102692,-0.52656626701355,0.349374145269394,0.775026321411133,-0.341394633054733,0.664652287960052,0.664595365524292,-0.48036190867424,0.620459377765656,0.619905412197113,-0.495855003595352,0.496407330036163,0.712536036968231,-0.495855003595352,0.496407330036163,0.712536036968231,-0.619981110095978,0.480883091688156,0.619979798793793,-0.66462516784668,0.341392874717712,0.664623320102692,-0.48036190867424,0.620459377765656,0.619905412197113,-0.619981110095978,0.480883091688156,0.619979798793793,-0.495855003595352,0.496407330036163,0.712536036968231,-0.48036190867424,0.620459377765656,0.619905412197113,-0.577053427696228,0.577943503856659,0.577053427696228,-0.619981110095978,0.480883091688156,0.619979798793793,0.695950448513031,-0.695950984954834,0.176932975649834,0.70710676908493,-0.707106828689575,0,0.828751444816589,-0.559616982936859,0,0.695950448513031,-0.695950984954834,0.176932975649834, +0.828751444816589,-0.559616982936859,0,0.814839899539948,-0.55085414648056,0.180542856454849,0.664698958396912,-0.6647008061409,0.341098338365555,0.695950448513031,-0.695950984954834,0.176932975649834,0.814839899539948,-0.55085414648056,0.180542856454849,0.814839899539948,-0.55085414648056,0.180542856454849,0.828751444816589,-0.559616982936859,0,0.921249330043793,-0.388972699642181,0,0.664698958396912,-0.6647008061409,0.341098338365555,0.814839899539948,-0.55085414648056,0.180542856454849,0.774613916873932,-0.527262270450592,0.349238693714142,0.620112836360931,-0.620114028453827,0.480540037155151,0.664698958396912,-0.6647008061409,0.341098338365555,0.774613916873932,-0.527262270450592,0.349238693714142,0.814839899539948,-0.55085414648056,0.180542856454849,0.921249330043793,-0.388972699642181,0,0.904339969158173,-0.38281837105751,0.188730746507645,0.774613916873932,-0.527262270450592,0.349238693714142,0.814839899539948,-0.55085414648056,0.180542856454849,0.904339969158173,-0.38281837105751,0.188730746507645,0.904339969158173,-0.38281837105751,0.188730746507645,0.921249330043793,-0.388972699642181,0,0.978279888629913,-0.2072883695364,-0.000337345903972164,0.620112836360931,-0.620114028453827,0.480540037155151,0.774613916873932,-0.527262270450592,0.349238693714142,0.712226629257202,-0.496352404356003,0.496354192495346,0.577350318431854,-0.577350258827209,0.577350258827209,0.620112836360931,-0.620114028453827,0.480540037155151,0.712226629257202,-0.496352404356003,0.496354192495346,0.577350318431854,-0.577350258827209,0.577350258827209,0.712226629257202,-0.496352404356003,0.496354192495346,0.620113670825958,-0.480539411306381,0.620113670825958,0.774613916873932,-0.527262270450592,0.349238693714142,0.904339969158173,-0.38281837105751,0.188730746507645,0.854747891426086,-0.367018282413483,0.367019683122635,0.712226629257202,-0.496352404356003,0.496354192495346,0.774613916873932,-0.527262270450592,0.349238693714142,0.854747891426086,-0.367018282413483,0.367019683122635,0.904339969158173,-0.38281837105751,0.188730746507645, +0.978279888629913,-0.2072883695364,-0.000337345903972164,0.959329545497894,-0.204361826181412,0.194738253951073,0.854747891426086,-0.367018282413483,0.367019683122635,0.904339969158173,-0.38281837105751,0.188730746507645,0.959329545497894,-0.204361826181412,0.194738253951073,0.959329545497894,-0.204361826181412,0.194738253951073,0.978279888629913,-0.2072883695364,-0.000337345903972164,0.999974966049194,-0.00702750962227583,-0.000913970521651208,0.620113670825958,-0.480539411306381,0.620113670825958,0.712226629257202,-0.496352404356003,0.496354192495346,0.774614214897156,-0.349237143993378,0.527263045310974,0.712226629257202,-0.496352404356003,0.496354192495346,0.854747891426086,-0.367018282413483,0.367019683122635,0.774614214897156,-0.349237143993378,0.527263045310974,0.620113670825958,-0.480539411306381,0.620113670825958,0.774614214897156,-0.349237143993378,0.527263045310974,0.664699971675873,-0.341098099946976,0.664700031280518,0.854747891426086,-0.367018282413483,0.367019683122635,0.959329545497894,-0.204361826181412,0.194738253951073,0.903776049613953,-0.196343541145325,0.380313009023666,0.774614214897156,-0.349237143993378,0.527263045310974,0.854747891426086,-0.367018282413483,0.367019683122635,0.903776049613953,-0.196343541145325,0.380313009023666,0.959329545497894,-0.204361826181412,0.194738253951073,0.999974966049194,-0.00702750962227583,-0.000913970521651208,0.980437636375427,-0.00691028870642185,0.196708649396896,0.903776049613953,-0.196343541145325,0.380313009023666,0.959329545497894,-0.204361826181412,0.194738253951073,0.980437636375427,-0.00691028870642185,0.196708649396896,0.97970312833786,0.200453236699104,-0.000575322948861867,0.980437636375427,-0.00691028870642185,0.196708649396896,0.999974966049194,-0.00702750962227583,-0.000913970521651208,0.664699971675873,-0.341098099946976,0.664700031280518,0.774614214897156,-0.349237143993378,0.527263045310974,0.814563453197479,-0.187771618366241,0.54884272813797,0.774614214897156,-0.349237143993378,0.527263045310974,0.903776049613953,-0.196343541145325,0.380313009023666, +0.814563453197479,-0.187771618366241,0.54884272813797,0.664699971675873,-0.341098099946976,0.664700031280518,0.814563453197479,-0.187771618366241,0.54884272813797,0.695038080215454,-0.183967456221581,0.695038080215454,0.97970312833786,0.200453236699104,-0.000575322948861867,0.960722923278809,0.197565078735352,0.194882959127426,0.980437636375427,-0.00691028870642185,0.196708649396896,0.921611845493317,0.388112843036652,0,0.960722923278809,0.197565078735352,0.194882959127426,0.97970312833786,0.200453236699104,-0.000575322948861867,0.903776049613953,-0.196343541145325,0.380313009023666,0.980437636375427,-0.00691028870642185,0.196708649396896,0.923027396202087,-0.00756967486813664,0.384659588336945,0.814563453197479,-0.187771618366241,0.54884272813797,0.903776049613953,-0.196343541145325,0.380313009023666,0.923027396202087,-0.00756967486813664,0.384659588336945,0.960722923278809,0.197565078735352,0.194882959127426,0.923027396202087,-0.00756967486813664,0.384659588336945,0.980437636375427,-0.00691028870642185,0.196708649396896,0.695038080215454,-0.183967456221581,0.695038080215454,0.814563453197479,-0.187771618366241,0.54884272813797,0.830622136592865,-0.00856000930070877,0.5567706823349,0.814563453197479,-0.187771618366241,0.54884272813797,0.923027396202087,-0.00756967486813664,0.384659588336945,0.830622136592865,-0.00856000930070877,0.5567706823349,0.695038080215454,-0.183967456221581,0.695038080215454,0.830622136592865,-0.00856000930070877,0.5567706823349,0.707078039646149,-0.00901631452143192,0.707077980041504,0.921611845493317,0.388112843036652,0,0.904723286628723,0.381952792406082,0.18864718079567,0.960722923278809,0.197565078735352,0.194882959127426,0.829180955886841,0.558980345726013,0,0.904723286628723,0.381952792406082,0.18864718079567,0.921611845493317,0.388112843036652,0,0.960722923278809,0.197565078735352,0.194882959127426,0.905539453029633,0.188870996236801,0.379902601242065,0.923027396202087,-0.00756967486813664,0.384659588336945,0.905539453029633,0.188870996236801,0.379902601242065,0.830622136592865,-0.00856000930070877,0.5567706823349, +0.923027396202087,-0.00756967486813664,0.384659588336945,0.904723286628723,0.381952792406082,0.18864718079567,0.905539453029633,0.188870996236801,0.379902601242065,0.960722923278809,0.197565078735352,0.194882959127426,0.816334784030914,0.179388493299484,0.549014806747437,0.707078039646149,-0.00901631452143192,0.707077980041504,0.830622136592865,-0.00856000930070877,0.5567706823349,0.905539453029633,0.188870996236801,0.379902601242065,0.816334784030914,0.179388493299484,0.549014806747437,0.830622136592865,-0.00856000930070877,0.5567706823349,0.816334784030914,0.179388493299484,0.549014806747437,0.696184992790222,0.175079762935638,0.696184992790222,0.707078039646149,-0.00901631452143192,0.707077980041504,0.829180955886841,0.558980345726013,0,0.815262794494629,0.550244808197021,0.180491536855698,0.904723286628723,0.381952792406082,0.18864718079567,0.707205593585968,0.707008004188538,0,0.815262794494629,0.550244808197021,0.180491536855698,0.829180955886841,0.558980345726013,0,0.707205593585968,0.707008004188538,0,0.696051120758057,0.695869386196136,0.176858142018318,0.815262794494629,0.550244808197021,0.180491536855698,0.904723286628723,0.381952792406082,0.18864718079567,0.855252742767334,0.366519451141357,0.36634162068367,0.905539453029633,0.188870996236801,0.379902601242065,0.855252742767334,0.366519451141357,0.36634162068367,0.816334784030914,0.179388493299484,0.549014806747437,0.905539453029633,0.188870996236801,0.379902601242065,0.815262794494629,0.550244808197021,0.180491536855698,0.855252742767334,0.366519451141357,0.36634162068367,0.904723286628723,0.381952792406082,0.18864718079567,0.775026321411133,0.349374145269394,0.52656626701355,0.696184992790222,0.175079762935638,0.696184992790222,0.816334784030914,0.179388493299484,0.549014806747437,0.855252742767334,0.366519451141357,0.36634162068367,0.775026321411133,0.349374145269394,0.52656626701355,0.816334784030914,0.179388493299484,0.549014806747437,0.775026321411133,0.349374145269394,0.52656626701355,0.664624214172363,0.341393172740936,0.664624214172363,0.696184992790222,0.175079762935638,0.696184992790222, +0.696051120758057,0.695869386196136,0.176858142018318,0.774905622005463,0.526865601539612,0.349190443754196,0.815262794494629,0.550244808197021,0.180491536855698,0.815262794494629,0.550244808197021,0.180491536855698,0.774905622005463,0.526865601539612,0.349190443754196,0.855252742767334,0.366519451141357,0.36634162068367,0.774905622005463,0.526865601539612,0.349190443754196,0.775026321411133,0.349374145269394,0.52656626701355,0.855252742767334,0.366519451141357,0.36634162068367,0.696051120758057,0.695869386196136,0.176858142018318,0.664595365524292,0.664652287960052,0.341394633054733,0.774905622005463,0.526865601539612,0.349190443754196,0.712536036968231,0.496407330036163,0.495855003595352,0.664624214172363,0.341393172740936,0.664624214172363,0.775026321411133,0.349374145269394,0.52656626701355,0.774905622005463,0.526865601539612,0.349190443754196,0.712536036968231,0.496407330036163,0.495855003595352,0.775026321411133,0.349374145269394,0.52656626701355,0.664595365524292,0.664652287960052,0.341394633054733,0.712536036968231,0.496407330036163,0.495855003595352,0.774905622005463,0.526865601539612,0.349190443754196,0.712536036968231,0.496407330036163,0.495855003595352,0.619980156421661,0.480883747339249,0.619980216026306,0.664624214172363,0.341393172740936,0.664624214172363,0.664595365524292,0.664652287960052,0.341394633054733,0.619905412197113,0.620459377765656,0.48036190867424,0.712536036968231,0.496407330036163,0.495855003595352,0.619905412197113,0.620459377765656,0.48036190867424,0.619980156421661,0.480883747339249,0.619980216026306,0.712536036968231,0.496407330036163,0.495855003595352,0.619905412197113,0.620459377765656,0.48036190867424,0.577053427696228,0.577943503856659,0.577053427696228,0.619980156421661,0.480883747339249,0.619980216026306,0.620113670825958,-0.620113670825958,-0.480539411306381,0.577350258827209,-0.577350258827209,-0.577350318431854,0.620113670825958,-0.480539411306381,-0.620113670825958,0.620113670825958,-0.620113670825958,-0.480539411306381,0.620113670825958,-0.480539411306381,-0.620113670825958, +0.712227404117584,-0.496352732181549,-0.496352732181549,0.664699971675873,-0.664700031280518,-0.341098099946976,0.620113670825958,-0.620113670825958,-0.480539411306381,0.712227404117584,-0.496352732181549,-0.496352732181549,0.712227404117584,-0.496352732181549,-0.496352732181549,0.620113670825958,-0.480539411306381,-0.620113670825958,0.664700031280518,-0.341098099946976,-0.664699971675873,0.664699971675873,-0.664700031280518,-0.341098099946976,0.712227404117584,-0.496352732181549,-0.496352732181549,0.774614274501801,-0.527262330055237,-0.349237889051437,0.695950627326965,-0.695950627326965,-0.176933407783508,0.664699971675873,-0.664700031280518,-0.341098099946976,0.774614274501801,-0.527262330055237,-0.349237889051437,0.712227404117584,-0.496352732181549,-0.496352732181549,0.664700031280518,-0.341098099946976,-0.664699971675873,0.774614274501801,-0.349237889051437,-0.527262330055237,0.774614274501801,-0.527262330055237,-0.349237889051437,0.712227404117584,-0.496352732181549,-0.496352732181549,0.774614274501801,-0.349237889051437,-0.527262330055237,0.774614274501801,-0.349237889051437,-0.527262330055237,0.664700031280518,-0.341098099946976,-0.664699971675873,0.694678843021393,-0.186661973595619,-0.694678843021393,0.695950627326965,-0.695950627326965,-0.176933407783508,0.774614274501801,-0.527262330055237,-0.349237889051437,0.814839720726013,-0.550854027271271,-0.180543690919876,0.70710676908493,-0.707106828689575,0,0.695950627326965,-0.695950627326965,-0.176933407783508,0.814839720726013,-0.550854027271271,-0.180543690919876,0.70710676908493,-0.707106828689575,0,0.814839720726013,-0.550854027271271,-0.180543690919876,0.828751444816589,-0.559616982936859,0,0.774614274501801,-0.349237889051437,-0.527262330055237,0.694678843021393,-0.186661973595619,-0.694678843021393,0.813445031642914,-0.189825877547264,-0.549793839454651,0.813445031642914,-0.189825877547264,-0.549793839454651,0.694678843021393,-0.186661973595619,-0.694678843021393,0.707071602344513,-0.00997655279934406,-0.707071542739868,0.774614274501801,-0.527262330055237,-0.349237889051437, +0.774614274501801,-0.349237889051437,-0.527262330055237,0.854747593402863,-0.367019444704056,-0.367019444704056,0.814839720726013,-0.550854027271271,-0.180543690919876,0.774614274501801,-0.527262330055237,-0.349237889051437,0.854747593402863,-0.367019444704056,-0.367019444704056,0.854747593402863,-0.367019444704056,-0.367019444704056,0.774614274501801,-0.349237889051437,-0.527262330055237,0.813445031642914,-0.189825877547264,-0.549793839454651,0.828751444816589,-0.559616982936859,0,0.814839720726013,-0.550854027271271,-0.180543690919876,0.904339671134949,-0.382818758487701,-0.188731148838997,0.814839720726013,-0.550854027271271,-0.180543690919876,0.854747593402863,-0.367019444704056,-0.367019444704056,0.904339671134949,-0.382818758487701,-0.188731148838997,0.828751444816589,-0.559616982936859,0,0.904339671134949,-0.382818758487701,-0.188731148838997,0.921249330043793,-0.388972699642181,0,0.813445031642914,-0.189825877547264,-0.549793839454651,0.707071602344513,-0.00997655279934406,-0.707071542739868,0.829044103622437,-0.00954398326575756,-0.559101760387421,0.695963382720947,0.17683319747448,-0.695963382720947,0.829044103622437,-0.00954398326575756,-0.559101760387421,0.707071602344513,-0.00997655279934406,-0.707071542739868,0.854747593402863,-0.367019444704056,-0.367019444704056,0.813445031642914,-0.189825877547264,-0.549793839454651,0.902869462966919,-0.197032302618027,-0.382106006145477,0.904339671134949,-0.382818758487701,-0.188731148838997,0.854747593402863,-0.367019444704056,-0.367019444704056,0.902869462966919,-0.197032302618027,-0.382106006145477,0.902869462966919,-0.197032302618027,-0.382106006145477,0.813445031642914,-0.189825877547264,-0.549793839454651,0.829044103622437,-0.00954398326575756,-0.559101760387421,0.921249330043793,-0.388972699642181,0,0.904339671134949,-0.382818758487701,-0.188731148838997,0.959099888801575,-0.204040050506592,-0.196201667189598,0.904339671134949,-0.382818758487701,-0.188731148838997,0.902869462966919,-0.197032302618027,-0.382106006145477,0.959099888801575,-0.204040050506592,-0.196201667189598, +0.921249330043793,-0.388972699642181,0,0.959099888801575,-0.204040050506592,-0.196201667189598,0.978279888629913,-0.2072883695364,-0.000337345903972164,0.695963382720947,0.17683319747448,-0.695963382720947,0.815388858318329,0.180478632450104,-0.550062239170074,0.829044103622437,-0.00954398326575756,-0.559101760387421,0.664624214172363,0.341393172740936,-0.664624214172363,0.815388858318329,0.180478632450104,-0.550062239170074,0.695963382720947,0.17683319747448,-0.695963382720947,0.902869462966919,-0.197032302618027,-0.382106006145477,0.829044103622437,-0.00954398326575756,-0.559101760387421,0.9214768409729,-0.00855842884629965,-0.388339132070541,0.959099888801575,-0.204040050506592,-0.196201667189598,0.902869462966919,-0.197032302618027,-0.382106006145477,0.9214768409729,-0.00855842884629965,-0.388339132070541,0.815388858318329,0.180478632450104,-0.550062239170074,0.9214768409729,-0.00855842884629965,-0.388339132070541,0.829044103622437,-0.00954398326575756,-0.559101760387421,0.978279888629913,-0.2072883695364,-0.000337345903972164,0.959099888801575,-0.204040050506592,-0.196201667189598,0.979799211025238,-0.00764046888798475,-0.19983783364296,0.959099888801575,-0.204040050506592,-0.196201667189598,0.9214768409729,-0.00855842884629965,-0.388339132070541,0.979799211025238,-0.00764046888798475,-0.19983783364296,0.978279888629913,-0.2072883695364,-0.000337345903972164,0.979799211025238,-0.00764046888798475,-0.19983783364296,0.999974966049194,-0.00702750962227583,-0.000913970521651208,0.664624214172363,0.341393172740936,-0.664624214172363,0.775026321411133,0.349374145269394,-0.52656626701355,0.815388858318329,0.180478632450104,-0.550062239170074,0.619980216026306,0.480883747339249,-0.619980156421661,0.775026321411133,0.349374145269394,-0.52656626701355,0.664624214172363,0.341393172740936,-0.664624214172363,0.815388858318329,0.180478632450104,-0.550062239170074,0.904820382595062,0.188589811325073,-0.381751149892807,0.9214768409729,-0.00855842884629965,-0.388339132070541,0.904820382595062,0.188589811325073,-0.381751149892807, +0.979799211025238,-0.00764046888798475,-0.19983783364296,0.9214768409729,-0.00855842884629965,-0.388339132070541,0.775026321411133,0.349374145269394,-0.52656626701355,0.904820382595062,0.188589811325073,-0.381751149892807,0.815388858318329,0.180478632450104,-0.550062239170074,0.960586965084076,0.196522891521454,-0.196599587798119,0.999974966049194,-0.00702750962227583,-0.000913970521651208,0.979799211025238,-0.00764046888798475,-0.19983783364296,0.904820382595062,0.188589811325073,-0.381751149892807,0.960586965084076,0.196522891521454,-0.196599587798119,0.979799211025238,-0.00764046888798475,-0.19983783364296,0.960586965084076,0.196522891521454,-0.196599587798119,0.97970312833786,0.200453236699104,-0.000575322948861867,0.999974966049194,-0.00702750962227583,-0.000913970521651208,0.619980216026306,0.480883747339249,-0.619980156421661,0.712536036968231,0.496407330036163,-0.495855003595352,0.775026321411133,0.349374145269394,-0.52656626701355,0.577053427696228,0.577943503856659,-0.577053427696228,0.712536036968231,0.496407330036163,-0.495855003595352,0.619980216026306,0.480883747339249,-0.619980156421661,0.577053427696228,0.577943503856659,-0.577053427696228,0.619905412197113,0.620459377765656,-0.48036190867424,0.712536036968231,0.496407330036163,-0.495855003595352,0.775026321411133,0.349374145269394,-0.52656626701355,0.855252742767334,0.366519451141357,-0.366341561079025,0.904820382595062,0.188589811325073,-0.381751149892807,0.855252742767334,0.366519451141357,-0.366341561079025,0.960586965084076,0.196522891521454,-0.196599587798119,0.904820382595062,0.188589811325073,-0.381751149892807,0.712536036968231,0.496407330036163,-0.495855003595352,0.855252742767334,0.366519451141357,-0.366341561079025,0.775026321411133,0.349374145269394,-0.52656626701355,0.904723286628723,0.381952792406082,-0.188647195696831,0.97970312833786,0.200453236699104,-0.000575322948861867,0.960586965084076,0.196522891521454,-0.196599587798119,0.855252742767334,0.366519451141357,-0.366341561079025,0.904723286628723,0.381952792406082,-0.188647195696831, +0.960586965084076,0.196522891521454,-0.196599587798119,0.904723286628723,0.381952792406082,-0.188647195696831,0.921611845493317,0.388112843036652,0,0.97970312833786,0.200453236699104,-0.000575322948861867,0.619905412197113,0.620459377765656,-0.48036190867424,0.774905622005463,0.526865661144257,-0.349190473556519,0.712536036968231,0.496407330036163,-0.495855003595352,0.712536036968231,0.496407330036163,-0.495855003595352,0.774905622005463,0.526865661144257,-0.349190473556519,0.855252742767334,0.366519451141357,-0.366341561079025,0.774905622005463,0.526865661144257,-0.349190473556519,0.904723286628723,0.381952792406082,-0.188647195696831,0.855252742767334,0.366519451141357,-0.366341561079025,0.619905412197113,0.620459377765656,-0.48036190867424,0.664595365524292,0.664652287960052,-0.341394633054733,0.774905622005463,0.526865661144257,-0.349190473556519,0.815262854099274,0.550244867801666,-0.180491521954536,0.921611845493317,0.388112843036652,0,0.904723286628723,0.381952792406082,-0.188647195696831,0.774905622005463,0.526865661144257,-0.349190473556519,0.815262854099274,0.550244867801666,-0.180491521954536,0.904723286628723,0.381952792406082,-0.188647195696831,0.664595365524292,0.664652287960052,-0.341394633054733,0.815262854099274,0.550244867801666,-0.180491521954536,0.774905622005463,0.526865661144257,-0.349190473556519,0.815262854099274,0.550244867801666,-0.180491521954536,0.829180955886841,0.558980345726013,0,0.921611845493317,0.388112843036652,0,0.664595365524292,0.664652287960052,-0.341394633054733,0.696051120758057,0.695869386196136,-0.176858142018318,0.815262854099274,0.550244867801666,-0.180491521954536,0.696051120758057,0.695869386196136,-0.176858142018318,0.829180955886841,0.558980345726013,0,0.815262854099274,0.550244867801666,-0.180491521954536,0.696051120758057,0.695869386196136,-0.176858142018318,0.707205593585968,0.707008004188538,0,0.829180955886841,0.558980345726013,0,-0.480539411306381,-0.620113670825958,-0.620113670825958,-0.577350258827209,-0.577350258827209,-0.577350318431854,-0.620113134384155,-0.480540663003922,-0.620113134384155, +-0.480539411306381,-0.620113670825958,-0.620113670825958,-0.620113134384155,-0.480540663003922,-0.620113134384155,-0.496352404356003,-0.496354192495346,-0.712226629257202,-0.341098099946976,-0.664700031280518,-0.664699971675873,-0.480539411306381,-0.620113670825958,-0.620113670825958,-0.496352404356003,-0.496354192495346,-0.712226629257202,-0.496352404356003,-0.496354192495346,-0.712226629257202,-0.620113134384155,-0.480540663003922,-0.620113134384155,-0.664699852466583,-0.341098606586456,-0.664699792861938,-0.341098099946976,-0.664700031280518,-0.664699971675873,-0.496352404356003,-0.496354192495346,-0.712226629257202,-0.349237143993378,-0.527263045310974,-0.774614214897156,-0.176933407783508,-0.695950627326965,-0.695950627326965,-0.341098099946976,-0.664700031280518,-0.664699971675873,-0.349237143993378,-0.527263045310974,-0.774614214897156,-0.496352404356003,-0.496354192495346,-0.712226629257202,-0.664699852466583,-0.341098606586456,-0.664699792861938,-0.527262270450592,-0.349238693714142,-0.774613916873932,-0.349237143993378,-0.527263045310974,-0.774614214897156,-0.496352404356003,-0.496354192495346,-0.712226629257202,-0.527262270450592,-0.349238693714142,-0.774613916873932,-0.527262270450592,-0.349238693714142,-0.774613916873932,-0.664699852466583,-0.341098606586456,-0.664699792861938,-0.694678962230682,-0.186661079525948,-0.694679021835327,-0.176933407783508,-0.695950627326965,-0.695950627326965,-0.349237143993378,-0.527263045310974,-0.774614214897156,-0.18054373562336,-0.55085414648056,-0.814839720726013,-0,-0.70710676908493,-0.70710676908493,-0.176933407783508,-0.695950627326965,-0.695950627326965,-0.18054373562336,-0.55085414648056,-0.814839720726013,-0.527262270450592,-0.349238693714142,-0.774613916873932,-0.694678962230682,-0.186661079525948,-0.694679021835327,-0.549794018268585,-0.189825028181076,-0.813445210456848,-0.549794018268585,-0.189825028181076,-0.813445210456848,-0.694678962230682,-0.186661079525948,-0.694679021835327,-0.707071542739868,-0.00997658353298903,-0.707071542739868,-0.349237143993378,-0.527263045310974,-0.774614214897156, +-0.527262270450592,-0.349238693714142,-0.774613916873932,-0.367018282413483,-0.367019683122635,-0.854747891426086,-0.18054373562336,-0.55085414648056,-0.814839720726013,-0.349237143993378,-0.527263045310974,-0.774614214897156,-0.367018282413483,-0.367019683122635,-0.854747891426086,-0.367018282413483,-0.367019683122635,-0.854747891426086,-0.527262270450592,-0.349238693714142,-0.774613916873932,-0.549794018268585,-0.189825028181076,-0.813445210456848,-0,-0.70710676908493,-0.70710676908493,-0.18054373562336,-0.55085414648056,-0.814839720726013,-0,-0.559616982936859,-0.828751385211945,0.176932975649834,-0.695950984954834,-0.695950448513031,-0,-0.70710676908493,-0.70710676908493,-0,-0.559616982936859,-0.828751385211945,-0.549794018268585,-0.189825028181076,-0.813445210456848,-0.707071542739868,-0.00997658353298903,-0.707071542739868,-0.559101760387421,-0.0095440186560154,-0.829044103622437,-0.695963561534882,0.176833614706993,-0.695963025093079,-0.559101760387421,-0.0095440186560154,-0.829044103622437,-0.707071542739868,-0.00997658353298903,-0.707071542739868,-0.367018282413483,-0.367019683122635,-0.854747891426086,-0.549794018268585,-0.189825028181076,-0.813445210456848,-0.382105618715286,-0.197031870484352,-0.902869760990143,-0.382105618715286,-0.197031870484352,-0.902869760990143,-0.549794018268585,-0.189825028181076,-0.813445210456848,-0.559101760387421,-0.0095440186560154,-0.829044103622437,-0.18054373562336,-0.55085414648056,-0.814839720726013,-0.367018282413483,-0.367019683122635,-0.854747891426086,-0.188731417059898,-0.382818996906281,-0.904339611530304,-0,-0.559616982936859,-0.828751385211945,-0.18054373562336,-0.55085414648056,-0.814839720726013,-0.188731417059898,-0.382818996906281,-0.904339611530304,-0.188731417059898,-0.382818996906281,-0.904339611530304,-0.367018282413483,-0.367019683122635,-0.854747891426086,-0.382105618715286,-0.197031870484352,-0.902869760990143,0.176932975649834,-0.695950984954834,-0.695950448513031,-0,-0.559616982936859,-0.828751385211945,0.180542841553688,-0.550854086875916,-0.814839899539948, +0.341098338365555,-0.6647008061409,-0.664698958396912,0.176932975649834,-0.695950984954834,-0.695950448513031,0.180542841553688,-0.550854086875916,-0.814839899539948,-0.695963561534882,0.176833614706993,-0.695963025093079,-0.550062239170074,0.180478602647781,-0.815388858318329,-0.559101760387421,-0.0095440186560154,-0.829044103622437,-0.66462516784668,0.341392874717712,-0.664623320102692,-0.550062239170074,0.180478602647781,-0.815388858318329,-0.695963561534882,0.176833614706993,-0.695963025093079,-0,-0.559616982936859,-0.828751385211945,-0.188731417059898,-0.382818996906281,-0.904339611530304,-0,-0.388973146677017,-0.921249151229858,0.180542841553688,-0.550854086875916,-0.814839899539948,-0,-0.559616982936859,-0.828751385211945,-0,-0.388973146677017,-0.921249151229858,-0.382105618715286,-0.197031870484352,-0.902869760990143,-0.559101760387421,-0.0095440186560154,-0.829044103622437,-0.388339042663574,-0.00855845864862204,-0.9214768409729,-0.550062239170074,0.180478602647781,-0.815388858318329,-0.388339042663574,-0.00855845864862204,-0.9214768409729,-0.559101760387421,-0.0095440186560154,-0.829044103622437,-0.188731417059898,-0.382818996906281,-0.904339611530304,-0.382105618715286,-0.197031870484352,-0.902869760990143,-0.196202009916306,-0.204040125012398,-0.959099769592285,-0,-0.388973146677017,-0.921249151229858,-0.188731417059898,-0.382818996906281,-0.904339611530304,-0.196202009916306,-0.204040125012398,-0.959099769592285,-0.196202009916306,-0.204040125012398,-0.959099769592285,-0.382105618715286,-0.197031870484352,-0.902869760990143,-0.388339042663574,-0.00855845864862204,-0.9214768409729,0.341098338365555,-0.6647008061409,-0.664698958396912,0.180542841553688,-0.550854086875916,-0.814839899539948,0.349238693714142,-0.527262270450592,-0.774613916873932,0.480540037155151,-0.620114028453827,-0.620112836360931,0.341098338365555,-0.6647008061409,-0.664698958396912,0.349238693714142,-0.527262270450592,-0.774613916873932,-0.66462516784668,0.341392874717712,-0.664623320102692,-0.52656626701355,0.349374145269394,-0.775026321411133, +-0.550062239170074,0.180478602647781,-0.815388858318329,-0.619981110095978,0.480883091688156,-0.619979798793793,-0.52656626701355,0.349374145269394,-0.775026321411133,-0.66462516784668,0.341392874717712,-0.664623320102692,0.180542841553688,-0.550854086875916,-0.814839899539948,-0,-0.388973146677017,-0.921249151229858,0.18873094022274,-0.382818549871445,-0.904339909553528,0.349238693714142,-0.527262270450592,-0.774613916873932,0.180542841553688,-0.550854086875916,-0.814839899539948,0.18873094022274,-0.382818549871445,-0.904339909553528,-0,-0.388973146677017,-0.921249151229858,-0.196202009916306,-0.204040125012398,-0.959099769592285,-0,-0.206965759396553,-0.978348195552826,0.18873094022274,-0.382818549871445,-0.904339909553528,-0,-0.388973146677017,-0.921249151229858,-0,-0.206965759396553,-0.978348195552826,-0.196202009916306,-0.204040125012398,-0.959099769592285,-0.388339042663574,-0.00855845864862204,-0.9214768409729,-0.19983783364296,-0.00764035899192095,-0.979799211025238,-0,-0.206965759396553,-0.978348195552826,-0.196202009916306,-0.204040125012398,-0.959099769592285,-0.19983783364296,-0.00764035899192095,-0.979799211025238,-0.550062239170074,0.180478602647781,-0.815388858318329,-0.381751149892807,0.188589796423912,-0.904820382595062,-0.388339042663574,-0.00855845864862204,-0.9214768409729,-0.52656626701355,0.349374145269394,-0.775026321411133,-0.381751149892807,0.188589796423912,-0.904820382595062,-0.550062239170074,0.180478602647781,-0.815388858318329,-0.381751149892807,0.188589796423912,-0.904820382595062,-0.19983783364296,-0.00764035899192095,-0.979799211025238,-0.388339042663574,-0.00855845864862204,-0.9214768409729,0.480540037155151,-0.620114028453827,-0.620112836360931,0.349238693714142,-0.527262270450592,-0.774613916873932,0.496354192495346,-0.496352404356003,-0.712226629257202,0.577350258827209,-0.577350258827209,-0.577350318431854,0.480540037155151,-0.620114028453827,-0.620112836360931,0.496354192495346,-0.496352404356003,-0.712226629257202,0.577350258827209,-0.577350258827209,-0.577350318431854,0.496354192495346,-0.496352404356003,-0.712226629257202, +0.620113670825958,-0.480539411306381,-0.620113670825958,0.349238693714142,-0.527262270450592,-0.774613916873932,0.18873094022274,-0.382818549871445,-0.904339909553528,0.367019683122635,-0.367018282413483,-0.854747891426086,0.496354192495346,-0.496352404356003,-0.712226629257202,0.349238693714142,-0.527262270450592,-0.774613916873932,0.367019683122635,-0.367018282413483,-0.854747891426086,0.620113670825958,-0.480539411306381,-0.620113670825958,0.496354192495346,-0.496352404356003,-0.712226629257202,0.527263045310974,-0.349237143993378,-0.774614214897156,0.496354192495346,-0.496352404356003,-0.712226629257202,0.367019683122635,-0.367018282413483,-0.854747891426086,0.527263045310974,-0.349237143993378,-0.774614214897156,0.620113670825958,-0.480539411306381,-0.620113670825958,0.527263045310974,-0.349237143993378,-0.774614214897156,0.664700031280518,-0.341098099946976,-0.664699971675873,0.18873094022274,-0.382818549871445,-0.904339909553528,-0,-0.206965759396553,-0.978348195552826,0.196202039718628,-0.204040169715881,-0.959099769592285,0.367019683122635,-0.367018282413483,-0.854747891426086,0.18873094022274,-0.382818549871445,-0.904339909553528,0.196202039718628,-0.204040169715881,-0.959099769592285,-0,-0.206965759396553,-0.978348195552826,-0.19983783364296,-0.00764035899192095,-0.979799211025238,-0,-0.00727108679711819,-0.99997353553772,0.196202039718628,-0.204040169715881,-0.959099769592285,-0,-0.206965759396553,-0.978348195552826,-0,-0.00727108679711819,-0.99997353553772,-0.381751149892807,0.188589796423912,-0.904820382595062,-0.196599468588829,0.196522891521454,-0.960586965084076,-0.19983783364296,-0.00764035899192095,-0.979799211025238,-0.196599468588829,0.196522891521454,-0.960586965084076,-0,-0.00727108679711819,-0.99997353553772,-0.19983783364296,-0.00764035899192095,-0.979799211025238,0.664700031280518,-0.341098099946976,-0.664699971675873,0.527263045310974,-0.349237143993378,-0.774614214897156,0.549793839454651,-0.189825877547264,-0.813445031642914,0.664700031280518,-0.341098099946976,-0.664699971675873,0.549793839454651,-0.189825877547264,-0.813445031642914, +0.694678843021393,-0.186661973595619,-0.694678843021393,0.527263045310974,-0.349237143993378,-0.774614214897156,0.367019683122635,-0.367018282413483,-0.854747891426086,0.382106006145477,-0.197032302618027,-0.902869462966919,0.367019683122635,-0.367018282413483,-0.854747891426086,0.196202039718628,-0.204040169715881,-0.959099769592285,0.382106006145477,-0.197032302618027,-0.902869462966919,0.527263045310974,-0.349237143993378,-0.774614214897156,0.382106006145477,-0.197032302618027,-0.902869462966919,0.549793839454651,-0.189825877547264,-0.813445031642914,0.196202039718628,-0.204040169715881,-0.959099769592285,-0,-0.00727108679711819,-0.99997353553772,0.199837997555733,-0.00764041719958186,-0.979799151420593,0.382106006145477,-0.197032302618027,-0.902869462966919,0.196202039718628,-0.204040169715881,-0.959099769592285,0.199837997555733,-0.00764041719958186,-0.979799151420593,0.694678843021393,-0.186661973595619,-0.694678843021393,0.549793839454651,-0.189825877547264,-0.813445031642914,0.559101760387421,-0.00954399351030588,-0.829044103622437,0.694678843021393,-0.186661973595619,-0.694678843021393,0.559101760387421,-0.00954399351030588,-0.829044103622437,0.707071602344513,-0.00997655279934406,-0.707071542739868,0.549793839454651,-0.189825877547264,-0.813445031642914,0.382106006145477,-0.197032302618027,-0.902869462966919,0.388339072465897,-0.00855843815952539,-0.9214768409729,0.382106006145477,-0.197032302618027,-0.902869462966919,0.199837997555733,-0.00764041719958186,-0.979799151420593,0.388339072465897,-0.00855843815952539,-0.9214768409729,0.549793839454651,-0.189825877547264,-0.813445031642914,0.388339072465897,-0.00855843815952539,-0.9214768409729,0.559101760387421,-0.00954399351030588,-0.829044103622437,-0,0.199896171689034,-0.979817092418671,0.199837997555733,-0.00764041719958186,-0.979799151420593,-0,-0.00727108679711819,-0.99997353553772,-0.196599468588829,0.196522891521454,-0.960586965084076,-0,0.199896171689034,-0.979817092418671,-0,-0.00727108679711819,-0.99997353553772,-0.366341382265091,0.366519749164581,-0.855252742767334, +-0.196599468588829,0.196522891521454,-0.960586965084076,-0.381751149892807,0.188589796423912,-0.904820382595062,-0.52656626701355,0.349374145269394,-0.775026321411133,-0.366341382265091,0.366519749164581,-0.855252742767334,-0.381751149892807,0.188589796423912,-0.904820382595062,0.55006217956543,0.180478617548943,-0.815388917922974,0.707071602344513,-0.00997655279934406,-0.707071542739868,0.559101760387421,-0.00954399351030588,-0.829044103622437,0.55006217956543,0.180478617548943,-0.815388917922974,0.695963382720947,0.17683319747448,-0.695963382720947,0.707071602344513,-0.00997655279934406,-0.707071542739868,0.381751179695129,0.188589811325073,-0.904820382595062,0.559101760387421,-0.00954399351030588,-0.829044103622437,0.388339072465897,-0.00855843815952539,-0.9214768409729,0.381751179695129,0.188589811325073,-0.904820382595062,0.55006217956543,0.180478617548943,-0.815388917922974,0.559101760387421,-0.00954399351030588,-0.829044103622437,0.196599721908569,0.196522921323776,-0.960586965084076,0.388339072465897,-0.00855843815952539,-0.9214768409729,0.199837997555733,-0.00764041719958186,-0.979799151420593,-0,0.199896171689034,-0.979817092418671,0.196599721908569,0.196522921323776,-0.960586965084076,0.199837997555733,-0.00764041719958186,-0.979799151420593,0.196599721908569,0.196522921323776,-0.960586965084076,0.381751179695129,0.188589811325073,-0.904820382595062,0.388339072465897,-0.00855843815952539,-0.9214768409729,-0.188646957278252,0.381953060626984,-0.904723227024078,-0,0.199896171689034,-0.979817092418671,-0.196599468588829,0.196522891521454,-0.960586965084076,-0.366341382265091,0.366519749164581,-0.855252742767334,-0.188646957278252,0.381953060626984,-0.904723227024078,-0.196599468588829,0.196522891521454,-0.960586965084076,-0.495855003595352,0.496407330036163,-0.712536036968231,-0.366341382265091,0.366519749164581,-0.855252742767334,-0.52656626701355,0.349374145269394,-0.775026321411133,-0.619981110095978,0.480883091688156,-0.619979798793793,-0.495855003595352,0.496407330036163,-0.712536036968231,-0.52656626701355,0.349374145269394,-0.775026321411133, +-0.577053427696228,0.577943503856659,-0.577053427696228,-0.495855003595352,0.496407330036163,-0.712536036968231,-0.619981110095978,0.480883091688156,-0.619979798793793,-0.577053427696228,0.577943503856659,-0.577053427696228,-0.48036190867424,0.620459377765656,-0.619905412197113,-0.495855003595352,0.496407330036163,-0.712536036968231,-0.495855003595352,0.496407330036163,-0.712536036968231,-0.349189937114716,0.526865720748901,-0.774905741214752,-0.366341382265091,0.366519749164581,-0.855252742767334,-0.48036190867424,0.620459377765656,-0.619905412197113,-0.349189937114716,0.526865720748901,-0.774905741214752,-0.495855003595352,0.496407330036163,-0.712536036968231,-0.349189937114716,0.526865720748901,-0.774905741214752,-0.188646957278252,0.381953060626984,-0.904723227024078,-0.366341382265091,0.366519749164581,-0.855252742767334,-0.48036190867424,0.620459377765656,-0.619905412197113,-0.341394424438477,0.664652168750763,-0.664595663547516,-0.349189937114716,0.526865720748901,-0.774905741214752,-0.341394424438477,0.664652168750763,-0.664595663547516,-0.180491149425507,0.550244927406311,-0.815262854099274,-0.349189937114716,0.526865720748901,-0.774905741214752,-0.349189937114716,0.526865720748901,-0.774905741214752,-0.180491149425507,0.550244927406311,-0.815262854099274,-0.188646957278252,0.381953060626984,-0.904723227024078,-0.341394424438477,0.664652168750763,-0.664595663547516,-0.1768579185009,0.695869147777557,-0.696051299571991,-0.180491149425507,0.550244927406311,-0.815262854099274,-0.188646957278252,0.381953060626984,-0.904723227024078,-0,0.388113021850586,-0.921611785888672,-0,0.199896171689034,-0.979817092418671,-0.180491149425507,0.550244927406311,-0.815262854099274,-0,0.388113021850586,-0.921611785888672,-0.188646957278252,0.381953060626984,-0.904723227024078,-0,0.388113021850586,-0.921611785888672,0.196599721908569,0.196522921323776,-0.960586965084076,-0,0.199896171689034,-0.979817092418671,-0.1768579185009,0.695869147777557,-0.696051299571991,-0,0.558980405330658,-0.829180836677551,-0.180491149425507,0.550244927406311,-0.815262854099274, +-0.180491149425507,0.550244927406311,-0.815262854099274,-0,0.558980405330658,-0.829180836677551,-0,0.388113021850586,-0.921611785888672,-0.1768579185009,0.695869147777557,-0.696051299571991,-0,0.707008004188538,-0.707205593585968,-0,0.558980405330658,-0.829180836677551,-0,0.388113021850586,-0.921611785888672,0.18864718079567,0.381953150033951,-0.904723227024078,0.196599721908569,0.196522921323776,-0.960586965084076,-0,0.558980405330658,-0.829180836677551,0.18864718079567,0.381953150033951,-0.904723227024078,-0,0.388113021850586,-0.921611785888672,0.18864718079567,0.381953150033951,-0.904723227024078,0.381751179695129,0.188589811325073,-0.904820382595062,0.196599721908569,0.196522921323776,-0.960586965084076,-0,0.707008004188538,-0.707205593585968,0.18049131333828,0.550244927406311,-0.815262854099274,-0,0.558980405330658,-0.829180836677551,-0,0.558980405330658,-0.829180836677551,0.18049131333828,0.550244927406311,-0.815262854099274,0.18864718079567,0.381953150033951,-0.904723227024078,-0,0.707008004188538,-0.707205593585968,0.1768579185009,0.695869386196136,-0.696051120758057,0.18049131333828,0.550244927406311,-0.815262854099274,0.18864718079567,0.381953150033951,-0.904723227024078,0.366341412067413,0.366519749164581,-0.855252742767334,0.381751179695129,0.188589811325073,-0.904820382595062,0.18049131333828,0.550244927406311,-0.815262854099274,0.366341412067413,0.366519749164581,-0.855252742767334,0.18864718079567,0.381953150033951,-0.904723227024078,0.366341412067413,0.366519749164581,-0.855252742767334,0.55006217956543,0.180478617548943,-0.815388917922974,0.381751179695129,0.188589811325073,-0.904820382595062,0.1768579185009,0.695869386196136,-0.696051120758057,0.349189937114716,0.526865720748901,-0.774905741214752,0.18049131333828,0.550244927406311,-0.815262854099274,0.18049131333828,0.550244927406311,-0.815262854099274,0.349189937114716,0.526865720748901,-0.774905741214752,0.366341412067413,0.366519749164581,-0.855252742767334,0.1768579185009,0.695869386196136,-0.696051120758057,0.341394245624542,0.664652347564697,-0.664595484733582, +0.349189937114716,0.526865720748901,-0.774905741214752,0.366341412067413,0.366519749164581,-0.855252742767334,0.52656626701355,0.349374145269394,-0.775026321411133,0.55006217956543,0.180478617548943,-0.815388917922974,0.349189937114716,0.526865720748901,-0.774905741214752,0.52656626701355,0.349374145269394,-0.775026321411133,0.366341412067413,0.366519749164581,-0.855252742767334,0.52656626701355,0.349374145269394,-0.775026321411133,0.695963382720947,0.17683319747448,-0.695963382720947,0.55006217956543,0.180478617548943,-0.815388917922974,0.52656626701355,0.349374145269394,-0.775026321411133,0.664624214172363,0.341393172740936,-0.664624214172363,0.695963382720947,0.17683319747448,-0.695963382720947,0.341394245624542,0.664652347564697,-0.664595484733582,0.495855003595352,0.496407330036163,-0.712536036968231,0.349189937114716,0.526865720748901,-0.774905741214752,0.349189937114716,0.526865720748901,-0.774905741214752,0.495855003595352,0.496407330036163,-0.712536036968231,0.52656626701355,0.349374145269394,-0.775026321411133,0.495855003595352,0.496407330036163,-0.712536036968231,0.664624214172363,0.341393172740936,-0.664624214172363,0.52656626701355,0.349374145269394,-0.775026321411133,0.341394245624542,0.664652347564697,-0.664595484733582,0.48036190867424,0.620459377765656,-0.619905412197113,0.495855003595352,0.496407330036163,-0.712536036968231,0.495855003595352,0.496407330036163,-0.712536036968231,0.619980216026306,0.480883747339249,-0.619980156421661,0.664624214172363,0.341393172740936,-0.664624214172363,0.48036190867424,0.620459377765656,-0.619905412197113,0.619980216026306,0.480883747339249,-0.619980156421661,0.495855003595352,0.496407330036163,-0.712536036968231,0.48036190867424,0.620459377765656,-0.619905412197113,0.577053427696228,0.577943503856659,-0.577053427696228,0.619980216026306,0.480883747339249,-0.619980156421661 + } + NormalsW: *2304 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *6912 { + a: -0.809513211250305,0.426810562610626,-0.403138935565948,-0.627910375595093,0.279633820056915,-0.726314961910248,-0.976083874702454,0.202625945210457,0.078759104013443,-0.54912656545639,0.517554104328156,-0.656199514865875,-0.627910375595093,0.279633820056915,-0.726314961910248,-0.809513211250305,0.426810562610626,-0.403138935565948,-0.632554709911346,0.632256925106049,-0.447354048490524,-0.54912656545639,0.517554104328156,-0.656199514865875,-0.809513211250305,0.426810562610626,-0.403138935565948,-0.632554709911346,0.632256925106049,-0.447354048490524,-0.809513211250305,0.426810562610626,-0.403138935565948,-0.804730236530304,0.575918853282928,-0.143968343734741,-0.804730236530304,0.575918853282928,-0.143968343734741,-0.809513211250305,0.426810562610626,-0.403138935565948,-0.915226399898529,0.386429667472839,0.114161670207977,-0.809513211250305,0.426810562610626,-0.403138935565948,-0.967160284519196,0.200773492455482,0.15585546195507,-0.915226399898529,0.386429667472839,0.114161670207977,-0.627910375595093,0.279633820056915,-0.726314961910248,-0.969811201095581,0,0.243857055902481,-0.967160284519196,0.200773492455482,0.15585546195507,-0.631661474704742,0.279727756977081,0.723018765449524,-0.915226399898529,0.386429667472839,0.114161670207977,-0.967160284519196,0.200773492455482,0.15585546195507,-0.54912656545639,0.517554104328156,-0.656199514865875,-0.359352141618729,0.426385849714279,-0.830097019672394,-0.627910375595093,0.279633820056915,-0.726314961910248,-0.359352141618729,0.426385849714279,-0.830097019672394,0.212471678853035,0.198616474866867,-0.956769168376923,-0.627910375595093,0.279633820056915,-0.726314961910248,-0.627910375595093,0.279633820056915,-0.726314961910248,0.212471678853035,0.198616474866867,-0.956769168376923,-0.276159107685089,0,0.961111962795258,-0.503620743751526,0.701948761940002,-0.50362092256546,-0.54912656545639,0.517554104328156,-0.656199514865875,-0.632554709911346,0.632256925106049,-0.447354048490524,-0.434820502996445,0.632411062717438,-0.641082882881165,-0.359352141618729,0.426385849714279,-0.830097019672394, +-0.54912656545639,0.517554104328156,-0.656199514865875,-0.503620743751526,0.701948761940002,-0.50362092256546,-0.434820502996445,0.632411062717438,-0.641082882881165,-0.54912656545639,0.517554104328156,-0.656199514865875,-0.606589257717133,0.746676802635193,-0.27298966050148,-0.632554709911346,0.632256925106049,-0.447354048490524,-0.804730236530304,0.575918853282928,-0.143968343734741,-0.463009268045425,0.783766865730286,-0.413922697305679,-0.632554709911346,0.632256925106049,-0.447354048490524,-0.606589257717133,0.746676802635193,-0.27298966050148,-0.463009268045425,0.783766865730286,-0.413922697305679,-0.503620743751526,0.701948761940002,-0.50362092256546,-0.632554709911346,0.632256925106049,-0.447354048490524,-0.409590780735016,0.81649512052536,-0.406904309988022,-0.503620743751526,0.701948761940002,-0.50362092256546,-0.463009268045425,0.783766865730286,-0.413922697305679,-0.409590780735016,0.81649512052536,-0.406904309988022,-0.415003061294556,0.783718287944794,-0.462123483419418,-0.503620743751526,0.701948761940002,-0.50362092256546,-0.415003061294556,0.783718287944794,-0.462123483419418,-0.434820502996445,0.632411062717438,-0.641082882881165,-0.503620743751526,0.701948761940002,-0.50362092256546,-0.606589257717133,0.746676802635193,-0.27298966050148,-0.804730236530304,0.575918853282928,-0.143968343734741,-0.679082453250885,0.717958331108093,-0.152914956212044,-0.415003061294556,0.783718287944794,-0.462123483419418,-0.271557867527008,0.746635377407074,-0.607282519340515,-0.434820502996445,0.632411062717438,-0.641082882881165,-0.679082453250885,0.717958331108093,-0.152914956212044,-0.804730236530304,0.575918853282928,-0.143968343734741,-0.828495800495148,0.559444427490234,0.0248333197087049,-0.679082453250885,0.717958331108093,-0.152914956212044,-0.828495800495148,0.559444427490234,0.0248333197087049,-0.707105696201324,0.707105755805969,0.00177184725180268,-0.804730236530304,0.575918853282928,-0.143968343734741,-0.915226399898529,0.386429667472839,0.114161670207977,-0.828495800495148,0.559444427490234,0.0248333197087049, +-0.271557867527008,0.746635377407074,-0.607282519340515,-0.179771080613136,0.577961266040802,-0.796017050743103,-0.434820502996445,0.632411062717438,-0.641082882881165,-0.434820502996445,0.632411062717438,-0.641082882881165,-0.179771080613136,0.577961266040802,-0.796017050743103,-0.359352141618729,0.426385849714279,-0.830097019672394,-0.271557867527008,0.746635377407074,-0.607282519340515,-0.150834590196609,0.71792733669281,-0.679580211639404,-0.179771080613136,0.577961266040802,-0.796017050743103,-0.786285996437073,0.579211115837097,0.215102225542068,-0.707105696201324,0.707105755805969,0.00177184725180268,-0.828495800495148,0.559444427490234,0.0248333197087049,-0.786285996437073,0.579211115837097,0.215102225542068,-0.678749859333038,0.717977166175842,0.154296606779099,-0.707105696201324,0.707105755805969,0.00177184725180268,-0.814756512641907,0.426798731088638,0.392446875572205,-0.828495800495148,0.559444427490234,0.0248333197087049,-0.915226399898529,0.386429667472839,0.114161670207977,-0.814756512641907,0.426798731088638,0.392446875572205,-0.786285996437073,0.579211115837097,0.215102225542068,-0.828495800495148,0.559444427490234,0.0248333197087049,-0.631661474704742,0.279727756977081,0.723018765449524,-0.814756512641907,0.426798731088638,0.392446875572205,-0.915226399898529,0.386429667472839,0.114161670207977,-0.179771080613136,0.577961266040802,-0.796017050743103,0.101642556488514,0.386958211660385,-0.916478216648102,-0.359352141618729,0.426385849714279,-0.830097019672394,-0.359352141618729,0.426385849714279,-0.830097019672394,0.101642556488514,0.386958211660385,-0.916478216648102,0.212471678853035,0.198616474866867,-0.956769168376923,-0.150834590196609,0.71792733669281,-0.679580211639404,0.0238408800214529,0.559457898139954,-0.828515827655792,-0.179771080613136,0.577961266040802,-0.796017050743103,-0.179771080613136,0.577961266040802,-0.796017050743103,0.0238408800214529,0.559457898139954,-0.828515827655792,0.101642556488514,0.386958211660385,-0.916478216648102,-0.150834590196609,0.71792733669281,-0.679580211639404, +0.00385216274298728,0.70710152387619,-0.70710152387619,0.0238408800214529,0.559457898139954,-0.828515827655792,-0.645679235458374,0.632433891296387,0.427931815385818,-0.678749859333038,0.717977166175842,0.154296606779099,-0.786285996437073,0.579211115837097,0.215102225542068,-0.645679235458374,0.632433891296387,0.427931815385818,-0.586218416690826,0.747063338756561,0.313439607620239,-0.678749859333038,0.717977166175842,0.154296606779099,-0.596617043018341,0.519012749195099,0.612106144428253,-0.786285996437073,0.579211115837097,0.215102225542068,-0.814756512641907,0.426798731088638,0.392446875572205,-0.596617043018341,0.519012749195099,0.612106144428253,-0.645679235458374,0.632433891296387,0.427931815385818,-0.786285996437073,0.579211115837097,0.215102225542068,0.00385216274298728,0.70710152387619,-0.70710152387619,0.196769341826439,0.578658521175385,-0.791477203369141,0.0238408800214529,0.559457898139954,-0.828515827655792,0.00385216274298728,0.70710152387619,-0.70710152387619,0.156406134366989,0.718002736568451,-0.678239822387695,0.196769341826439,0.578658521175385,-0.791477203369141,0.0238408800214529,0.559457898139954,-0.828515827655792,0.365021079778671,0.426496267318726,-0.827562987804413,0.101642556488514,0.386958211660385,-0.916478216648102,0.0238408800214529,0.559457898139954,-0.828515827655792,0.196769341826439,0.578658521175385,-0.791477203369141,0.365021079778671,0.426496267318726,-0.827562987804413,0.101642556488514,0.386958211660385,-0.916478216648102,0.711637020111084,0.279996007680893,-0.644340872764587,0.212471678853035,0.198616474866867,-0.956769168376923,0.101642556488514,0.386958211660385,-0.916478216648102,0.365021079778671,0.426496267318726,-0.827562987804413,0.711637020111084,0.279996007680893,-0.644340872764587,-0.503620624542236,0.701948761940002,0.503620982170105,-0.586218416690826,0.747063338756561,0.313439607620239,-0.645679235458374,0.632433891296387,0.427931815385818,-0.503620624542236,0.701948761940002,0.503620982170105,-0.483973234891891,0.784472227096558,0.387779921293259,-0.586218416690826,0.747063338756561,0.313439607620239, +0.156406134366989,0.718002736568451,-0.678239822387695,0.418789148330688,0.632397592067719,-0.65168160200119,0.196769341826439,0.578658521175385,-0.791477203369141,0.156406134366989,0.718002736568451,-0.678239822387695,0.314648985862732,0.74705046415329,-0.585586607456207,0.418789148330688,0.632397592067719,-0.65168160200119,0.212471678853035,0.198616474866867,-0.956769168376923,0.711637020111084,0.279996007680893,-0.644340872764587,0.970620214939117,0.20149202644825,-0.131519734859467,0.212471678853035,0.198616474866867,-0.956769168376923,0.970620214939117,0.20149202644825,-0.131519734859467,0.742665886878967,-0,-0.669662117958069,0.711637020111084,0.279996007680893,-0.644340872764587,0.917748153209686,0.387494921684265,-0.0870984420180321,0.970620214939117,0.20149202644825,-0.131519734859467,0.711637020111084,0.279996007680893,-0.644340872764587,0.825847446918488,0.426561325788498,-0.36881086230278,0.917748153209686,0.387494921684265,-0.0870984420180321,0.365021079778671,0.426496267318726,-0.827562987804413,0.825847446918488,0.426561325788498,-0.36881086230278,0.711637020111084,0.279996007680893,-0.644340872764587,0.825847446918488,0.426561325788498,-0.36881086230278,0.828362345695496,0.559354245662689,-0.0306385420262814,0.917748153209686,0.387494921684265,-0.0870984420180321,0.196769341826439,0.578658521175385,-0.791477203369141,0.608417689800262,0.519035458564758,-0.600358366966248,0.365021079778671,0.426496267318726,-0.827562987804413,0.365021079778671,0.426496267318726,-0.827562987804413,0.608417689800262,0.519035458564758,-0.600358366966248,0.825847446918488,0.426561325788498,-0.36881086230278,0.196769341826439,0.578658521175385,-0.791477203369141,0.418789148330688,0.632397592067719,-0.65168160200119,0.608417689800262,0.519035458564758,-0.600358366966248,0.825847446918488,0.426561325788498,-0.36881086230278,0.791770100593567,0.578619956970215,-0.195701628923416,0.828362345695496,0.559354245662689,-0.0306385420262814,0.608417689800262,0.519035458564758,-0.600358366966248,0.791770100593567,0.578619956970215,-0.195701628923416, +0.825847446918488,0.426561325788498,-0.36881086230278,0.791770100593567,0.578619956970215,-0.195701628923416,0.707105755805969,0.707105696201324,-0.00177195575088263,0.828362345695496,0.559354245662689,-0.0306385420262814,0.791770100593567,0.578619956970215,-0.195701628923416,0.678749859333038,0.717977106571198,-0.154296562075615,0.707105755805969,0.707105696201324,-0.00177195575088263,0.608417689800262,0.519035458564758,-0.600358366966248,0.651681542396545,0.632397592067719,-0.418789207935333,0.791770100593567,0.578619956970215,-0.195701628923416,0.651681542396545,0.632397592067719,-0.418789207935333,0.678749859333038,0.717977106571198,-0.154296562075615,0.791770100593567,0.578619956970215,-0.195701628923416,0.418789148330688,0.632397592067719,-0.65168160200119,0.651681542396545,0.632397592067719,-0.418789207935333,0.608417689800262,0.519035458564758,-0.600358366966248,0.651681542396545,0.632397592067719,-0.418789207935333,0.586218357086182,0.747063338756561,-0.313439726829529,0.678749859333038,0.717977106571198,-0.154296562075615,0.418789148330688,0.632397592067719,-0.65168160200119,0.503620803356171,0.701948761940002,-0.503620862960815,0.651681542396545,0.632397592067719,-0.418789207935333,0.503620803356171,0.701948761940002,-0.503620862960815,0.586218357086182,0.747063338756561,-0.313439726829529,0.651681542396545,0.632397592067719,-0.418789207935333,0.314648985862732,0.74705046415329,-0.585586607456207,0.503620803356171,0.701948761940002,-0.503620862960815,0.418789148330688,0.632397592067719,-0.65168160200119,0.503620803356171,0.701948761940002,-0.503620862960815,0.483972817659378,0.784472227096558,-0.387780487537384,0.586218357086182,0.747063338756561,-0.313439726829529,0.314648985862732,0.74705046415329,-0.585586607456207,0.386694520711899,0.78448212146759,-0.484824955463409,0.503620803356171,0.701948761940002,-0.503620862960815,0.386694520711899,0.78448212146759,-0.484824955463409,0.483972817659378,0.784472227096558,-0.387780487537384,0.503620803356171,0.701948761940002,-0.503620862960815,0.386694520711899,0.78448212146759,-0.484824955463409, +0.40679869055748,0.816494882106781,-0.409696191549301,0.483972817659378,0.784472227096558,-0.387780487537384,-0.0998248532414436,0.202242121100426,0.974234580993652,-0.967160284519196,0.200773492455482,0.15585546195507,-0.665472328662872,0,0.746422529220581,0.676015496253967,0.280311495065689,0.681490063667297,-0.0998248532414436,0.202242121100426,0.974234580993652,-0.175045326352119,0,0.984560370445251,0.371284335851669,0.426599323749542,0.824718654155731,-0.0998248532414436,0.202242121100426,0.974234580993652,0.676015496253967,0.280311495065689,0.681490063667297,0.371284335851669,0.426599323749542,0.824718654155731,-0.0849146917462349,0.387567818164825,0.917921960353851,-0.0998248532414436,0.202242121100426,0.974234580993652,-0.0849146917462349,0.387567818164825,0.917921960353851,-0.631661474704742,0.279727756977081,0.723018765449524,-0.0998248532414436,0.202242121100426,0.974234580993652,-0.0998248532414436,0.202242121100426,0.974234580993652,-0.631661474704742,0.279727756977081,0.723018765449524,-0.951337039470673,0.197488740086555,0.236550137400627,-0.0849146917462349,0.387567818164825,0.917921960353851,-0.359325289726257,0.426385283470154,0.830108880996704,-0.631661474704742,0.279727756977081,0.723018765449524,-0.359325289726257,0.426385283470154,0.830108880996704,-0.814756512641907,0.426798731088638,0.392446875572205,-0.631661474704742,0.279727756977081,0.723018765449524,-0.359325289726257,0.426385283470154,0.830108880996704,-0.596617043018341,0.519012749195099,0.612106144428253,-0.814756512641907,0.426798731088638,0.392446875572205,-0.017936984077096,0.559526979923248,0.828618049621582,-0.359325289726257,0.426385283470154,0.830108880996704,-0.0849146917462349,0.387567818164825,0.917921960353851,-0.21339613199234,0.579168438911438,0.786782085895538,-0.596617043018341,0.519012749195099,0.612106144428253,-0.359325289726257,0.426385283470154,0.830108880996704,-0.017936984077096,0.559526979923248,0.828618049621582,-0.21339613199234,0.579168438911438,0.786782085895538,-0.359325289726257,0.426385283470154,0.830108880996704, +0.160576030611992,0.576962351799011,0.800830721855164,-0.0849146917462349,0.387567818164825,0.917921960353851,0.371284335851669,0.426599323749542,0.824718654155731,0.160576030611992,0.576962351799011,0.800830721855164,-0.017936984077096,0.559526979923248,0.828618049621582,-0.0849146917462349,0.387567818164825,0.917921960353851,-0.21339613199234,0.579168438911438,0.786782085895538,-0.427931725978851,0.632433891296387,0.645679295063019,-0.596617043018341,0.519012749195099,0.612106144428253,-0.427931725978851,0.632433891296387,0.645679295063019,-0.645679235458374,0.632433891296387,0.427931815385818,-0.596617043018341,0.519012749195099,0.612106144428253,-0.427931725978851,0.632433891296387,0.645679295063019,-0.503620624542236,0.701948761940002,0.503620982170105,-0.645679235458374,0.632433891296387,0.427931815385818,-0.00385215878486633,0.70710164308548,0.707101404666901,-0.21339613199234,0.579168438911438,0.786782085895538,-0.017936984077096,0.559526979923248,0.828618049621582,0.15083484351635,0.717927515506744,0.67958003282547,-0.00385215878486633,0.70710164308548,0.707101404666901,-0.017936984077096,0.559526979923248,0.828618049621582,0.15083484351635,0.717927515506744,0.67958003282547,-0.017936984077096,0.559526979923248,0.828618049621582,0.160576030611992,0.576962351799011,0.800830721855164,-0.00385215878486633,0.70710164308548,0.707101404666901,-0.15640614926815,0.718002915382385,0.678239583969116,-0.21339613199234,0.579168438911438,0.786782085895538,-0.15640614926815,0.718002915382385,0.678239583969116,-0.427931725978851,0.632433891296387,0.645679295063019,-0.21339613199234,0.579168438911438,0.786782085895538,-0.15640614926815,0.718002915382385,0.678239583969116,-0.314648896455765,0.74705046415329,0.585586488246918,-0.427931725978851,0.632433891296387,0.645679295063019,-0.314648896455765,0.74705046415329,0.585586488246918,-0.503620624542236,0.701948761940002,0.503620982170105,-0.427931725978851,0.632433891296387,0.645679295063019,-0.314648896455765,0.74705046415329,0.585586488246918,-0.386694252490997,0.78448212146759,0.484825134277344, +-0.503620624542236,0.701948761940002,0.503620982170105,-0.386694252490997,0.78448212146759,0.484825134277344,-0.483973234891891,0.784472227096558,0.387779921293259,-0.503620624542236,0.701948761940002,0.503620982170105,-0.386694252490997,0.78448212146759,0.484825134277344,-0.40679794549942,0.816494882106781,0.409696906805038,-0.483973234891891,0.784472227096558,0.387779921293259,0.271557599306107,0.746635437011719,0.607282519340515,0.15083484351635,0.717927515506744,0.67958003282547,0.160576030611992,0.576962351799011,0.800830721855164,0.271557599306107,0.746635437011719,0.607282519340515,0.160576030611992,0.576962351799011,0.800830721855164,0.411489844322205,0.632314801216125,0.656394720077515,0.415003389120102,0.783718287944794,0.462123245000839,0.271557599306107,0.746635437011719,0.607282519340515,0.411489844322205,0.632314801216125,0.656394720077515,0.411489844322205,0.632314801216125,0.656394720077515,0.160576030611992,0.576962351799011,0.800830721855164,0.371284335851669,0.426599323749542,0.824718654155731,0.415003389120102,0.783718287944794,0.462123245000839,0.411489844322205,0.632314801216125,0.656394720077515,0.50362104177475,0.701948761940002,0.503620564937592,0.409591287374496,0.81649512052536,0.406903833150864,0.415003389120102,0.783718287944794,0.462123245000839,0.50362104177475,0.701948761940002,0.503620564937592,0.409591287374496,0.81649512052536,0.406903833150864,0.50362104177475,0.701948761940002,0.503620564937592,0.463009089231491,0.783766567707062,0.413923412561417,0.411489844322205,0.632314801216125,0.656394720077515,0.371284335851669,0.426599323749542,0.824718654155731,0.623254060745239,0.518854916095734,0.585101544857025,0.50362104177475,0.701948761940002,0.503620564937592,0.411489844322205,0.632314801216125,0.656394720077515,0.623254060745239,0.518854916095734,0.585101544857025,0.623254060745239,0.518854916095734,0.585101544857025,0.371284335851669,0.426599323749542,0.824718654155731,0.676015496253967,0.280311495065689,0.681490063667297,0.463009089231491,0.783766567707062,0.413923412561417,0.50362104177475,0.701948761940002,0.503620564937592, +0.660181701183319,0.632212579250336,0.405545711517334,0.50362104177475,0.701948761940002,0.503620564937592,0.623254060745239,0.518854916095734,0.585101544857025,0.660181701183319,0.632212579250336,0.405545711517334,0.463009089231491,0.783766567707062,0.413923412561417,0.660181701183319,0.632212579250336,0.405545711517334,0.606589794158936,0.746676027774811,0.27299028635025,0.623254060745239,0.518854916095734,0.585101544857025,0.676015496253967,0.280311495065689,0.681490063667297,0.826607882976532,0.426533579826355,0.367135584354401,0.660181701183319,0.632212579250336,0.405545711517334,0.623254060745239,0.518854916095734,0.585101544857025,0.826607882976532,0.426533579826355,0.367135584354401,0.606589794158936,0.746676027774811,0.27299028635025,0.660181701183319,0.632212579250336,0.405545711517334,0.794796347618103,0.578170418739319,0.184439137578011,0.660181701183319,0.632212579250336,0.405545711517334,0.826607882976532,0.426533579826355,0.367135584354401,0.794796347618103,0.578170418739319,0.184439137578011,0.606589794158936,0.746676027774811,0.27299028635025,0.794796347618103,0.578170418739319,0.184439137578011,0.679082632064819,0.717958092689514,0.152915328741074,0.826607882976532,0.426533579826355,0.367135584354401,0.676015496253967,0.280311495065689,0.681490063667297,0.970620214939117,0.20149202644825,-0.131519734859467,0.676015496253967,0.280311495065689,0.681490063667297,0.987288653850555,-0,-0.158937335014343,0.970620214939117,0.20149202644825,-0.131519734859467,0.826607882976532,0.426533579826355,0.367135584354401,0.970620214939117,0.20149202644825,-0.131519734859467,0.917748153209686,0.387494921684265,-0.0870984420180321,0.794796347618103,0.578170418739319,0.184439137578011,0.826607882976532,0.426533579826355,0.367135584354401,0.917748153209686,0.387494921684265,-0.0870984420180321,0.794796347618103,0.578170418739319,0.184439137578011,0.917748153209686,0.387494921684265,-0.0870984420180321,0.828362345695496,0.559354245662689,-0.0306385420262814,0.679082632064819,0.717958092689514,0.152915328741074,0.794796347618103,0.578170418739319,0.184439137578011, +0.828362345695496,0.559354245662689,-0.0306385420262814,0.679082632064819,0.717958092689514,0.152915328741074,0.828362345695496,0.559354245662689,-0.0306385420262814,0.707105755805969,0.707105696201324,-0.00177195575088263,0.676650702953339,0.278893768787384,0.681441128253937,-0.187525287270546,-0,0.982259750366211,-0.123903095722198,0.199893519282341,0.971951842308044,0.354652941226959,0.425680756568909,0.832476496696472,0.676650702953339,0.278893768787384,0.681441128253937,-0.123903095722198,0.199893519282341,0.971951842308044,0.604495286941528,0.518816769123077,0.604495346546173,0.676650702953339,0.278893768787384,0.681441128253937,0.354652941226959,0.425680756568909,0.832476496696472,0.604495286941528,0.518816769123077,0.604495346546173,0.83247584104538,0.425681114196777,0.354654222726822,0.676650702953339,0.278893768787384,0.681441128253937,0.83247584104538,0.425681114196777,0.354654222726822,0.969599783420563,0.199410066008568,-0.141816169023514,0.676650702953339,0.278893768787384,0.681441128253937,0.676650702953339,0.278893768787384,0.681441128253937,0.969599783420563,0.199410066008568,-0.141816169023514,0.977993965148926,0,-0.208633244037628,0.354652941226959,0.425680756568909,0.832476496696472,-0.123903095722198,0.199893519282341,0.971951842308044,-0.0779506117105484,0.387159168720245,0.918711841106415,0.451765418052673,0.632241129875183,0.62942761182785,0.604495286941528,0.518816769123077,0.604495346546173,0.354652941226959,0.425680756568909,0.832476496696472,0.170652449131012,0.577325224876404,0.798482000827789,0.354652941226959,0.425680756568909,0.832476496696472,-0.0779506117105484,0.387159168720245,0.918711841106415,0.451765418052673,0.632241129875183,0.62942761182785,0.354652941226959,0.425680756568909,0.832476496696472,0.170652449131012,0.577325224876404,0.798482000827789,0.629427433013916,0.632241129875183,0.45176562666893,0.83247584104538,0.425681114196777,0.354654222726822,0.604495286941528,0.518816769123077,0.604495346546173,0.503748118877411,0.701766133308411,0.503748059272766,0.604495286941528,0.518816769123077,0.604495346546173, +0.451765418052673,0.632241129875183,0.62942761182785,0.503748118877411,0.701766133308411,0.503748059272766,0.629427433013916,0.632241129875183,0.45176562666893,0.604495286941528,0.518816769123077,0.604495346546173,0.293046593666077,0.747099637985229,0.596628785133362,0.451765418052673,0.632241129875183,0.62942761182785,0.170652449131012,0.577325224876404,0.798482000827789,0.365005135536194,0.784098029136658,0.501957893371582,0.451765418052673,0.632241129875183,0.62942761182785,0.293046593666077,0.747099637985229,0.596628785133362,0.365005135536194,0.784098029136658,0.501957893371582,0.503748118877411,0.701766133308411,0.503748059272766,0.451765418052673,0.632241129875183,0.62942761182785,0.407544851303101,0.81607574224472,0.409789621829987,0.503748118877411,0.701766133308411,0.503748059272766,0.365005135536194,0.784098029136658,0.501957893371582,0.407544851303101,0.81607574224472,0.409789621829987,0.501197755336761,0.784116089344025,0.366009414196014,0.503748118877411,0.701766133308411,0.503748059272766,0.501197755336761,0.784116089344025,0.366009414196014,0.629427433013916,0.632241129875183,0.45176562666893,0.503748118877411,0.701766133308411,0.503748059272766,0.293046593666077,0.747099637985229,0.596628785133362,0.170652449131012,0.577325224876404,0.798482000827789,0.16378253698349,0.718146681785583,0.676343619823456,0.501197755336761,0.784116089344025,0.366009414196014,0.597381293773651,0.747083604335785,0.291550487279892,0.629427433013916,0.632241129875183,0.45176562666893,0.16378253698349,0.718146681785583,0.676343619823456,0.170652449131012,0.577325224876404,0.798482000827789,-0.00905540771782398,0.55937933921814,0.828862309455872,0.170652449131012,0.577325224876404,0.798482000827789,-0.0779506117105484,0.387159168720245,0.918711841106415,-0.00905540771782398,0.55937933921814,0.828862309455872,0.16378253698349,0.718146681785583,0.676343619823456,-0.00905540771782398,0.55937933921814,0.828862309455872,-0.00226538046263158,0.707203805446625,0.707006216049194,0.597381293773651,0.747083604335785,0.291550487279892, +0.7984818816185,0.577325165271759,0.170652493834496,0.629427433013916,0.632241129875183,0.45176562666893,0.629427433013916,0.632241129875183,0.45176562666893,0.7984818816185,0.577325165271759,0.170652493834496,0.83247584104538,0.425681114196777,0.354654222726822,0.597381293773651,0.747083604335785,0.291550487279892,0.67687863111496,0.718132317066193,0.161620423197746,0.7984818816185,0.577325165271759,0.170652493834496,-0.262557715177536,0.579472601413727,0.771540701389313,-0.00226538046263158,0.707203805446625,0.707006216049194,-0.00905540771782398,0.55937933921814,0.828862309455872,-0.262557715177536,0.579472601413727,0.771540701389313,-0.16621795296669,0.718158304691315,0.675736844539642,-0.00226538046263158,0.707203805446625,0.707006216049194,-0.384285807609558,0.426151514053345,0.818974554538727,-0.00905540771782398,0.55937933921814,0.828862309455872,-0.0779506117105484,0.387159168720245,0.918711841106415,-0.384285807609558,0.426151514053345,0.818974554538727,-0.262557715177536,0.579472601413727,0.771540701389313,-0.00905540771782398,0.55937933921814,0.828862309455872,0.7984818816185,0.577325165271759,0.170652493834496,0.918711602687836,0.387159556150436,-0.0779513493180275,0.83247584104538,0.425681114196777,0.354654222726822,0.83247584104538,0.425681114196777,0.354654222726822,0.918711602687836,0.387159556150436,-0.0779513493180275,0.969599783420563,0.199410066008568,-0.141816169023514,0.67687863111496,0.718132317066193,0.161620423197746,0.828862309455872,0.559379279613495,-0.00905491411685944,0.7984818816185,0.577325165271759,0.170652493834496,0.7984818816185,0.577325165271759,0.170652493834496,0.828862309455872,0.559379279613495,-0.00905491411685944,0.918711602687836,0.387159556150436,-0.0779513493180275,0.67687863111496,0.718132317066193,0.161620423197746,0.707000732421875,0.707198321819305,-0.00452283630147576,0.828862309455872,0.559379279613495,-0.00905491411685944,-0.423081606626511,0.632488965988159,0.648814082145691,-0.16621795296669,0.718158304691315,0.675736844539642,-0.262557715177536,0.579472601413727,0.771540701389313, +-0.423081606626511,0.632488965988159,0.648814082145691,-0.293526589870453,0.747104048728943,0.596387147903442,-0.16621795296669,0.718158304691315,0.675736844539642,0.707000732421875,0.707198321819305,-0.00452283630147576,0.771540284156799,0.579472661018372,-0.262559026479721,0.828862309455872,0.559379279613495,-0.00905491411685944,0.707000732421875,0.707198321819305,-0.00452283630147576,0.675186991691589,0.718165040016174,-0.168408900499344,0.771540284156799,0.579472661018372,-0.262559026479721,0.828862309455872,0.559379279613495,-0.00905491411685944,0.818974494934082,0.426151603460312,-0.384286046028137,0.918711602687836,0.387159556150436,-0.0779513493180275,0.828862309455872,0.559379279613495,-0.00905491411685944,0.771540284156799,0.579472661018372,-0.262559026479721,0.818974494934082,0.426151603460312,-0.384286046028137,0.918711602687836,0.387159556150436,-0.0779513493180275,0.678731679916382,0.278895318508148,-0.67936784029007,0.969599783420563,0.199410066008568,-0.141816169023514,0.918711602687836,0.387159556150436,-0.0779513493180275,0.818974494934082,0.426151603460312,-0.384286046028137,0.678731679916382,0.278895318508148,-0.67936784029007,0.675186991691589,0.718165040016174,-0.168408900499344,0.648813426494598,0.632489144802094,-0.423082143068314,0.771540284156799,0.579472661018372,-0.262559026479721,0.675186991691589,0.718165040016174,-0.168408900499344,0.595619022846222,0.747117578983307,-0.295047849416733,0.648813426494598,0.632489144802094,-0.423082143068314,0.771540284156799,0.579472661018372,-0.262559026479721,0.604495286941528,0.518816709518433,-0.604495286941528,0.818974494934082,0.426151603460312,-0.384286046028137,0.771540284156799,0.579472661018372,-0.262559026479721,0.648813426494598,0.632489144802094,-0.423082143068314,0.604495286941528,0.518816709518433,-0.604495286941528,0.595619022846222,0.747117578983307,-0.295047849416733,0.503748118877411,0.701766133308411,-0.503748059272766,0.648813426494598,0.632489144802094,-0.423082143068314,0.595619022846222,0.747117578983307,-0.295047849416733,0.499865263700485,0.784144759178162,-0.367766052484512, +0.503748118877411,0.701766133308411,-0.503748059272766,0.499865263700485,0.784144759178162,-0.367766052484512,0.368808001279831,0.784159958362579,-0.499073028564453,0.503748118877411,0.701766133308411,-0.503748059272766,0.499865263700485,0.784144759178162,-0.367766052484512,0.409958750009537,0.816075444221497,-0.407375425100327,0.368808001279831,0.784159958362579,-0.499073028564453,0.503748118877411,0.701766133308411,-0.503748059272766,0.368808001279831,0.784159958362579,-0.499073028564453,0.293526649475098,0.747104108333588,-0.596387028694153,0.648813426494598,0.632489144802094,-0.423082143068314,0.503748118877411,0.701766133308411,-0.503748059272766,0.423082143068314,0.632489144802094,-0.648813426494598,0.503748118877411,0.701766133308411,-0.503748059272766,0.293526649475098,0.747104108333588,-0.596387028694153,0.423082143068314,0.632489144802094,-0.648813426494598,0.648813426494598,0.632489144802094,-0.423082143068314,0.423082143068314,0.632489144802094,-0.648813426494598,0.604495286941528,0.518816709518433,-0.604495286941528,0.423082143068314,0.632489144802094,-0.648813426494598,0.293526649475098,0.747104108333588,-0.596387028694153,0.166217789053917,0.718158304691315,-0.675736844539642,0.423082143068314,0.632489144802094,-0.648813426494598,0.166217789053917,0.718158304691315,-0.675736844539642,0.262558847665787,0.579472601413727,-0.77154016494751,0.604495286941528,0.518816709518433,-0.604495286941528,0.423082143068314,0.632489144802094,-0.648813426494598,0.262558847665787,0.579472601413727,-0.77154016494751,0.262558847665787,0.579472601413727,-0.77154016494751,0.166217789053917,0.718158304691315,-0.675736844539642,0.00226540700532496,0.707203805446625,-0.707006216049194,0.818974494934082,0.426151603460312,-0.384286046028137,0.604495286941528,0.518816709518433,-0.604495286941528,0.38428595662117,0.426151305437088,-0.818974614143372,0.604495286941528,0.518816709518433,-0.604495286941528,0.262558847665787,0.579472601413727,-0.77154016494751,0.38428595662117,0.426151305437088,-0.818974614143372,0.818974494934082,0.426151603460312,-0.384286046028137, +0.38428595662117,0.426151305437088,-0.818974614143372,0.678731679916382,0.278895318508148,-0.67936784029007,0.262558847665787,0.579472601413727,-0.77154016494751,0.00226540700532496,0.707203805446625,-0.707006216049194,0.00905519258230925,0.559379279613495,-0.828862309455872,0.38428595662117,0.426151305437088,-0.818974614143372,0.262558847665787,0.579472601413727,-0.77154016494751,0.00905519258230925,0.559379279613495,-0.828862309455872,-0.163782775402069,0.718146443367004,-0.67634379863739,0.00905519258230925,0.559379279613495,-0.828862309455872,0.00226540700532496,0.707203805446625,-0.707006216049194,0.678731679916382,0.278895318508148,-0.67936784029007,0.38428595662117,0.426151305437088,-0.818974614143372,0.0778122693300247,0.387163311243057,-0.918721854686737,0.38428595662117,0.426151305437088,-0.818974614143372,0.00905519258230925,0.559379279613495,-0.828862309455872,0.0778122693300247,0.387163311243057,-0.918721854686737,-0.163782775402069,0.718146443367004,-0.67634379863739,-0.170652478933334,0.577325224876404,-0.798482000827789,0.00905519258230925,0.559379279613495,-0.828862309455872,-0.170652478933334,0.577325224876404,-0.798482000827789,0.0778122693300247,0.387163311243057,-0.918721854686737,0.00905519258230925,0.559379279613495,-0.828862309455872,-0.293046683073044,0.747099459171295,-0.596628904342651,-0.170652478933334,0.577325224876404,-0.798482000827789,-0.163782775402069,0.718146443367004,-0.67634379863739,0.678731679916382,0.278895318508148,-0.67936784029007,0.0778122693300247,0.387163311243057,-0.918721854686737,0.1743383705616,0.198360815644264,-0.964499294757843,0.969599783420563,0.199410066008568,-0.141816169023514,0.678731679916382,0.278895318508148,-0.67936784029007,0.1743383705616,0.198360815644264,-0.964499294757843,0.969599783420563,0.199410066008568,-0.141816169023514,0.1743383705616,0.198360815644264,-0.964499294757843,0.715437769889832,0,-0.698676407337189,-0.293046683073044,0.747099459171295,-0.596628904342651,-0.451765775680542,0.632241129875183,-0.629427373409271,-0.170652478933334,0.577325224876404,-0.798482000827789, +-0.365005224943161,0.784097969532013,-0.501957774162292,-0.451765775680542,0.632241129875183,-0.629427373409271,-0.293046683073044,0.747099459171295,-0.596628904342651,-0.170652478933334,0.577325224876404,-0.798482000827789,-0.321571826934814,0.424639791250229,-0.846328914165497,0.0778122693300247,0.387163311243057,-0.918721854686737,-0.321571826934814,0.424639791250229,-0.846328914165497,0.1743383705616,0.198360815644264,-0.964499294757843,0.0778122693300247,0.387163311243057,-0.918721854686737,-0.451765775680542,0.632241129875183,-0.629427373409271,-0.321571826934814,0.424639791250229,-0.846328914165497,-0.170652478933334,0.577325224876404,-0.798482000827789,-0.365005224943161,0.784097969532013,-0.501957774162292,-0.503748118877411,0.701766133308411,-0.503747999668121,-0.451765775680542,0.632241129875183,-0.629427373409271,-0.407544940710068,0.816075801849365,-0.409789592027664,-0.503748118877411,0.701766133308411,-0.503747999668121,-0.365005224943161,0.784097969532013,-0.501957774162292,-0.407544940710068,0.816075801849365,-0.409789592027664,-0.501197695732117,0.784116089344025,-0.366009503602982,-0.503748118877411,0.701766133308411,-0.503747999668121,-0.321571826934814,0.424639791250229,-0.846328914165497,-0.689221620559692,0.278865844011307,-0.66873574256897,0.1743383705616,0.198360815644264,-0.964499294757843,-0.689221620559692,0.278865844011307,-0.66873574256897,0.245872735977173,0,-0.969302117824554,0.1743383705616,0.198360815644264,-0.964499294757843,-0.451765775680542,0.632241129875183,-0.629427373409271,-0.604495286941528,0.518816709518433,-0.604495286941528,-0.321571826934814,0.424639791250229,-0.846328914165497,-0.503748118877411,0.701766133308411,-0.503747999668121,-0.604495286941528,0.518816709518433,-0.604495286941528,-0.451765775680542,0.632241129875183,-0.629427373409271,-0.604495286941528,0.518816709518433,-0.604495286941528,-0.689221620559692,0.278865844011307,-0.66873574256897,-0.321571826934814,0.424639791250229,-0.846328914165497,-0.501197695732117,0.784116089344025,-0.366009503602982,-0.629427373409271,0.632241129875183,-0.451765775680542, +-0.503748118877411,0.701766133308411,-0.503747999668121,-0.503748118877411,0.701766133308411,-0.503747999668121,-0.629427373409271,0.632241129875183,-0.451765775680542,-0.604495286941528,0.518816709518433,-0.604495286941528,-0.501197695732117,0.784116089344025,-0.366009503602982,-0.59738153219223,0.747083425521851,-0.291550368070602,-0.629427373409271,0.632241129875183,-0.451765775680542,-0.604495286941528,0.518816709518433,-0.604495286941528,-0.849087715148926,0.424353033304214,-0.314602375030518,-0.689221620559692,0.278865844011307,-0.66873574256897,-0.629427373409271,0.632241129875183,-0.451765775680542,-0.849087715148926,0.424353033304214,-0.314602375030518,-0.604495286941528,0.518816709518433,-0.604495286941528,-0.59738153219223,0.747083425521851,-0.291550368070602,-0.798481941223145,0.577325224876404,-0.170652642846107,-0.629427373409271,0.632241129875183,-0.451765775680542,-0.629427373409271,0.632241129875183,-0.451765775680542,-0.798481941223145,0.577325224876404,-0.170652642846107,-0.849087715148926,0.424353033304214,-0.314602375030518,-0.59738153219223,0.747083425521851,-0.291550368070602,-0.676878869533539,0.718132257461548,-0.161620780825615,-0.798481941223145,0.577325224876404,-0.170652642846107,-0.849087715148926,0.424353033304214,-0.314602375030518,-0.962247848510742,0.197897702455521,0.186857223510742,-0.689221620559692,0.278865844011307,-0.66873574256897,-0.689221620559692,0.278865844011307,-0.66873574256897,-0.962247848510742,0.197897702455521,0.186857223510742,-0.972658634185791,-0,0.23223939538002,-0.849087715148926,0.424353033304214,-0.314602375030518,-0.91865348815918,0.387134552001953,0.0787571519613266,-0.962247848510742,0.197897702455521,0.186857223510742,-0.798481941223145,0.577325224876404,-0.170652642846107,-0.91865348815918,0.387134552001953,0.0787571519613266,-0.849087715148926,0.424353033304214,-0.314602375030518,-0.798481941223145,0.577325224876404,-0.170652642846107,-0.828862309455872,0.559379279613495,0.00905515719205141,-0.91865348815918,0.387134552001953,0.0787571519613266,-0.676878869533539,0.718132257461548,-0.161620780825615, +-0.828862309455872,0.559379279613495,0.00905515719205141,-0.798481941223145,0.577325224876404,-0.170652642846107,-0.676878869533539,0.718132257461548,-0.161620780825615,-0.707000732421875,0.707198321819305,0.00452313618734479,-0.828862309455872,0.559379279613495,0.00905515719205141,-0.499865412712097,0.784144759178162,0.367765814065933,-0.409958243370056,0.816075444221497,0.407375931739807,-0.368808001279831,0.784159958362579,0.499073028564453,-0.499865412712097,0.784144759178162,0.367765814065933,-0.368808001279831,0.784159958362579,0.499073028564453,-0.503748059272766,0.701766133308411,0.503748059272766,-0.503748059272766,0.701766133308411,0.503748059272766,-0.368808001279831,0.784159958362579,0.499073028564453,-0.293526589870453,0.747104048728943,0.596387147903442,-0.595619082450867,0.747117578983307,0.295047760009766,-0.499865412712097,0.784144759178162,0.367765814065933,-0.503748059272766,0.701766133308411,0.503748059272766,-0.503748059272766,0.701766133308411,0.503748059272766,-0.293526589870453,0.747104048728943,0.596387147903442,-0.423081606626511,0.632488965988159,0.648814082145691,-0.595619082450867,0.747117578983307,0.295047760009766,-0.503748059272766,0.701766133308411,0.503748059272766,-0.648813426494598,0.632489144802094,0.423082143068314,-0.648813426494598,0.632489144802094,0.423082143068314,-0.503748059272766,0.701766133308411,0.503748059272766,-0.423081606626511,0.632488965988159,0.648814082145691,-0.675186991691589,0.718165159225464,0.16840897500515,-0.595619082450867,0.747117578983307,0.295047760009766,-0.648813426494598,0.632489144802094,0.423082143068314,-0.648813426494598,0.632489144802094,0.423082143068314,-0.423081606626511,0.632488965988159,0.648814082145691,-0.60449492931366,0.518816769123077,0.604495644569397,-0.60449492931366,0.518816769123077,0.604495644569397,-0.423081606626511,0.632488965988159,0.648814082145691,-0.262557715177536,0.579472601413727,0.771540701389313,-0.60449492931366,0.518816769123077,0.604495644569397,-0.262557715177536,0.579472601413727,0.771540701389313,-0.384285807609558,0.426151514053345,0.818974554538727, +-0.675186991691589,0.718165159225464,0.16840897500515,-0.648813426494598,0.632489144802094,0.423082143068314,-0.771540224552155,0.579472661018372,0.262559145689011,-0.771540224552155,0.579472661018372,0.262559145689011,-0.648813426494598,0.632489144802094,0.423082143068314,-0.60449492931366,0.518816769123077,0.604495644569397,-0.707000732421875,0.707198321819305,0.00452313618734479,-0.675186991691589,0.718165159225464,0.16840897500515,-0.771540224552155,0.579472661018372,0.262559145689011,-0.707000732421875,0.707198321819305,0.00452313618734479,-0.771540224552155,0.579472661018372,0.262559145689011,-0.828862309455872,0.559379279613495,0.00905515719205141,-0.771540224552155,0.579472661018372,0.262559145689011,-0.60449492931366,0.518816769123077,0.604495644569397,-0.818974554538727,0.426151275634766,0.384285986423492,-0.828862309455872,0.559379279613495,0.00905515719205141,-0.771540224552155,0.579472661018372,0.262559145689011,-0.818974554538727,0.426151275634766,0.384285986423492,-0.818974554538727,0.426151275634766,0.384285986423492,-0.60449492931366,0.518816769123077,0.604495644569397,-0.384285807609558,0.426151514053345,0.818974554538727,-0.828862309455872,0.559379279613495,0.00905515719205141,-0.818974554538727,0.426151275634766,0.384285986423492,-0.91865348815918,0.387134552001953,0.0787571519613266,-0.818974554538727,0.426151275634766,0.384285986423492,-0.384285807609558,0.426151514053345,0.818974554538727,-0.679049968719482,0.278895080089569,0.679049849510193,-0.91865348815918,0.387134552001953,0.0787571519613266,-0.818974554538727,0.426151275634766,0.384285986423492,-0.679049968719482,0.278895080089569,0.679049849510193,-0.679049968719482,0.278895080089569,0.679049849510193,-0.384285807609558,0.426151514053345,0.818974554538727,-0.0779506117105484,0.387159168720245,0.918711841106415,-0.91865348815918,0.387134552001953,0.0787571519613266,-0.679049968719482,0.278895080089569,0.679049849510193,-0.962247848510742,0.197897702455521,0.186857223510742,-0.679049968719482,0.278895080089569,0.679049849510193,-0.0779506117105484,0.387159168720245,0.918711841106415, +-0.123903095722198,0.199893519282341,0.971951842308044,-0.962247848510742,0.197897702455521,0.186857223510742,-0.679049968719482,0.278895080089569,0.679049849510193,-0.123903095722198,0.199893519282341,0.971951842308044,-0.962247848510742,0.197897702455521,0.186857223510742,-0.123903095722198,0.199893519282341,0.971951842308044,-0.681829810142517,-0,0.731510877609253,-0.483973234891891,0.784472227096558,0.387779921293259,-0.40679794549942,0.816494882106781,0.409696906805038,-0.340640634298325,0.876971781253815,0.338945984840393,-0.483973234891891,0.784472227096558,0.387779921293259,-0.340640634298325,0.876971781253815,0.338945984840393,-0.41067823767662,0.868104100227356,0.278816312551498,-0.586218416690826,0.747063338756561,0.313439607620239,-0.483973234891891,0.784472227096558,0.387779921293259,-0.41067823767662,0.868104100227356,0.278816312551498,-0.41067823767662,0.868104100227356,0.278816312551498,-0.340640634298325,0.876971781253815,0.338945984840393,-0.241449475288391,0.940027475357056,0.240936771035194,-0.586218416690826,0.747063338756561,0.313439607620239,-0.41067823767662,0.868104100227356,0.278816312551498,-0.483314275741577,0.849684417247772,0.210816919803619,-0.678749859333038,0.717977166175842,0.154296606779099,-0.586218416690826,0.747063338756561,0.313439607620239,-0.483314275741577,0.849684417247772,0.210816919803619,-0.41067823767662,0.868104100227356,0.278816312551498,-0.241449475288391,0.940027475357056,0.240936771035194,-0.289731234312057,0.937032222747803,0.195003643631935,-0.483314275741577,0.849684417247772,0.210816919803619,-0.41067823767662,0.868104100227356,0.278816312551498,-0.289731234312057,0.937032222747803,0.195003643631935,-0.289731234312057,0.937032222747803,0.195003643631935,-0.241449475288391,0.940027475357056,0.240936771035194,-0.130109325051308,0.982932507991791,0.13005867600441,-0.678749859333038,0.717977166175842,0.154296606779099,-0.483314275741577,0.849684417247772,0.210816919803619,-0.538723945617676,0.834594070911407,0.115018017590046,-0.707105696201324,0.707105755805969,0.00177184725180268, +-0.678749859333038,0.717977166175842,0.154296606779099,-0.538723945617676,0.834594070911407,0.115018017590046,-0.289731234312057,0.937032222747803,0.195003643631935,-0.130109325051308,0.982932507991791,0.13005867600441,-0.155736744403839,0.982212841510773,0.104899473488331,-0.155736744403839,0.982212841510773,0.104899473488331,-0.130109325051308,0.982932507991791,0.13005867600441,-0.00640762597322464,0.999959349632263,0.00634336844086647,-0.483314275741577,0.849684417247772,0.210816919803619,-0.289731234312057,0.937032222747803,0.195003643631935,-0.338062256574631,0.930211067199707,0.142902374267578,-0.538723945617676,0.834594070911407,0.115018017590046,-0.483314275741577,0.849684417247772,0.210816919803619,-0.338062256574631,0.930211067199707,0.142902374267578,-0.338062256574631,0.930211067199707,0.142902374267578,-0.289731234312057,0.937032222747803,0.195003643631935,-0.155736744403839,0.982212841510773,0.104899473488331,-0.707105696201324,0.707105755805969,0.00177184725180268,-0.538723945617676,0.834594070911407,0.115018017590046,-0.55961674451828,0.828751087188721,-0.000911452574655414,-0.679082453250885,0.717958331108093,-0.152914956212044,-0.707105696201324,0.707105755805969,0.00177184725180268,-0.55961674451828,0.828751087188721,-0.000911452574655414,-0.155736744403839,0.982212841510773,0.104899473488331,-0.00640762597322464,0.999959349632263,0.00634336844086647,-0.00711129838600755,0.999963402748108,0.00476478785276413,0.123740553855896,0.984554171562195,-0.123860292136669,-0.00711129838600755,0.999963402748108,0.00476478785276413,-0.00640762597322464,0.999959349632263,0.00634336844086647,-0.338062256574631,0.930211067199707,0.142902374267578,-0.155736744403839,0.982212841510773,0.104899473488331,-0.180971816182137,0.980535268783569,0.0761565715074539,-0.180971816182137,0.980535268783569,0.0761565715074539,-0.155736744403839,0.982212841510773,0.104899473488331,-0.00711129838600755,0.999963402748108,0.00476478785276413,-0.538723945617676,0.834594070911407,0.115018017590046,-0.338062256574631,0.930211067199707,0.142902374267578, +-0.375025123357773,0.923822522163391,0.07686448097229,-0.55961674451828,0.828751087188721,-0.000911452574655414,-0.538723945617676,0.834594070911407,0.115018017590046,-0.375025123357773,0.923822522163391,0.07686448097229,-0.375025123357773,0.923822522163391,0.07686448097229,-0.338062256574631,0.930211067199707,0.142902374267578,-0.180971816182137,0.980535268783569,0.0761565715074539,-0.679082453250885,0.717958331108093,-0.152914956212044,-0.55961674451828,0.828751087188721,-0.000911452574655414,-0.538387954235077,0.83459860086441,-0.116548933088779,-0.606589257717133,0.746676802635193,-0.27298966050148,-0.679082453250885,0.717958331108093,-0.152914956212044,-0.538387954235077,0.83459860086441,-0.116548933088779,0.123740553855896,0.984554171562195,-0.123860292136669,0.148990914225578,0.983778119087219,-0.0999115779995918,-0.00711129838600755,0.999963402748108,0.00476478785276413,0.241102322936058,0.939920544624329,-0.241700068116188,0.148990914225578,0.983778119087219,-0.0999115779995918,0.123740553855896,0.984554171562195,-0.123860292136669,-0.55961674451828,0.828751087188721,-0.000911452574655414,-0.375025123357773,0.923822522163391,0.07686448097229,-0.388973146677017,0.921249151229858,8.37467887322418e-05,-0.538387954235077,0.83459860086441,-0.116548933088779,-0.55961674451828,0.828751087188721,-0.000911452574655414,-0.388973146677017,0.921249151229858,8.37467887322418e-05,-0.180971816182137,0.980535268783569,0.0761565715074539,-0.00711129838600755,0.999963402748108,0.00476478785276413,-0.00699174497276545,0.999971270561218,0.0029009678401053,0.148990914225578,0.983778119087219,-0.0999115779995918,-0.00699174497276545,0.999971270561218,0.0029009678401053,-0.00711129838600755,0.999963402748108,0.00476478785276413,-0.375025123357773,0.923822522163391,0.07686448097229,-0.180971816182137,0.980535268783569,0.0761565715074539,-0.200277402997017,0.978895366191864,0.0406543537974358,-0.388973146677017,0.921249151229858,8.37467887322418e-05,-0.375025123357773,0.923822522163391,0.07686448097229,-0.200277402997017,0.978895366191864,0.0406543537974358, +-0.200277402997017,0.978895366191864,0.0406543537974358,-0.180971816182137,0.980535268783569,0.0761565715074539,-0.00699174497276545,0.999971270561218,0.0029009678401053,-0.606589257717133,0.746676802635193,-0.27298966050148,-0.538387954235077,0.83459860086441,-0.116548933088779,-0.483282834291458,0.849684834480286,-0.210886970162392,-0.463009268045425,0.783766865730286,-0.413922697305679,-0.606589257717133,0.746676802635193,-0.27298966050148,-0.483282834291458,0.849684834480286,-0.210886970162392,0.241102322936058,0.939920544624329,-0.241700068116188,0.290085315704346,0.936981737613678,-0.194719612598419,0.148990914225578,0.983778119087219,-0.0999115779995918,0.339080929756165,0.876783967018127,-0.340989828109741,0.290085315704346,0.936981737613678,-0.194719612598419,0.241102322936058,0.939920544624329,-0.241700068116188,-0.538387954235077,0.83459860086441,-0.116548933088779,-0.388973146677017,0.921249151229858,8.37467887322418e-05,-0.375027388334274,0.923822522163391,-0.0768535733222961,-0.483282834291458,0.849684834480286,-0.210886970162392,-0.538387954235077,0.83459860086441,-0.116548933088779,-0.375027388334274,0.923822522163391,-0.0768535733222961,-0.388973146677017,0.921249151229858,8.37467887322418e-05,-0.200277402997017,0.978895366191864,0.0406543537974358,-0.207288637757301,0.978279829025269,1.93495434359647e-05,-0.375027388334274,0.923822522163391,-0.0768535733222961,-0.388973146677017,0.921249151229858,8.37467887322418e-05,-0.207288637757301,0.978279829025269,1.93495434359647e-05,-0.200277402997017,0.978895366191864,0.0406543537974358,-0.00699174497276545,0.999971270561218,0.0029009678401053,-0.00677344901487231,0.99997615814209,0.00136750075034797,-0.207288637757301,0.978279829025269,1.93495434359647e-05,-0.200277402997017,0.978895366191864,0.0406543537974358,-0.00677344901487231,0.99997615814209,0.00136750075034797,0.148990914225578,0.983778119087219,-0.0999115779995918,0.174260750412941,0.982001721858978,-0.0728400051593781,-0.00699174497276545,0.999971270561218,0.0029009678401053,0.290085315704346,0.936981737613678,-0.194719612598419, +0.174260750412941,0.982001721858978,-0.0728400051593781,0.148990914225578,0.983778119087219,-0.0999115779995918,0.174260750412941,0.982001721858978,-0.0728400051593781,-0.00677344901487231,0.99997615814209,0.00136750075034797,-0.00699174497276545,0.999971270561218,0.0029009678401053,-0.463009268045425,0.783766865730286,-0.413922697305679,-0.483282834291458,0.849684834480286,-0.210886970162392,-0.412077933549881,0.868088603019714,-0.27679231762886,-0.409590780735016,0.81649512052536,-0.406904309988022,-0.463009268045425,0.783766865730286,-0.413922697305679,-0.412077933549881,0.868088603019714,-0.27679231762886,-0.409590780735016,0.81649512052536,-0.406904309988022,-0.412077933549881,0.868088603019714,-0.27679231762886,-0.33894607424736,0.876971781253815,-0.340640544891357,-0.483282834291458,0.849684834480286,-0.210886970162392,-0.375027388334274,0.923822522163391,-0.0768535733222961,-0.338195741176605,0.930210411548615,-0.142590746283531,-0.412077933549881,0.868088603019714,-0.27679231762886,-0.483282834291458,0.849684834480286,-0.210886970162392,-0.338195741176605,0.930210411548615,-0.142590746283531,-0.33894607424736,0.876971781253815,-0.340640544891357,-0.412077933549881,0.868088603019714,-0.27679231762886,-0.28974175453186,0.937032163143158,-0.194988146424294,-0.412077933549881,0.868088603019714,-0.27679231762886,-0.338195741176605,0.930210411548615,-0.142590746283531,-0.28974175453186,0.937032163143158,-0.194988146424294,-0.33894607424736,0.876971781253815,-0.340640544891357,-0.28974175453186,0.937032163143158,-0.194988146424294,-0.240936830639839,0.940027475357056,-0.241449415683746,-0.375027388334274,0.923822522163391,-0.0768535733222961,-0.207288637757301,0.978279829025269,1.93495434359647e-05,-0.199779540300369,0.978962361812592,-0.0414834581315517,-0.338195741176605,0.930210411548615,-0.142590746283531,-0.375027388334274,0.923822522163391,-0.0768535733222961,-0.199779540300369,0.978962361812592,-0.0414834581315517,-0.207288637757301,0.978279829025269,1.93495434359647e-05,-0.00677344901487231,0.99997615814209,0.00136750075034797, +-0.00702418340370059,0.999970078468323,-0.00324856583029032,-0.199779540300369,0.978962361812592,-0.0414834581315517,-0.207288637757301,0.978279829025269,1.93495434359647e-05,-0.00702418340370059,0.999970078468323,-0.00324856583029032,0.174260750412941,0.982001721858978,-0.0728400051593781,0.193650811910629,0.98028975725174,-0.0391315743327141,-0.00677344901487231,0.99997615814209,0.00136750075034797,0.193650811910629,0.98028975725174,-0.0391315743327141,-0.00702418340370059,0.999970078468323,-0.00324856583029032,-0.00677344901487231,0.99997615814209,0.00136750075034797,-0.240936830639839,0.940027475357056,-0.241449415683746,-0.28974175453186,0.937032163143158,-0.194988146424294,-0.157588303089142,0.981817841529846,-0.105829000473022,-0.240936830639839,0.940027475357056,-0.241449415683746,-0.157588303089142,0.981817841529846,-0.105829000473022,-0.131864070892334,0.982424437999725,-0.132114544510841,-0.28974175453186,0.937032163143158,-0.194988146424294,-0.338195741176605,0.930210411548615,-0.142590746283531,-0.18174110352993,0.980396866798401,-0.076106995344162,-0.338195741176605,0.930210411548615,-0.142590746283531,-0.199779540300369,0.978962361812592,-0.0414834581315517,-0.18174110352993,0.980396866798401,-0.076106995344162,-0.28974175453186,0.937032163143158,-0.194988146424294,-0.18174110352993,0.980396866798401,-0.076106995344162,-0.157588303089142,0.981817841529846,-0.105829000473022,-0.199779540300369,0.978962361812592,-0.0414834581315517,-0.00702418340370059,0.999970078468323,-0.00324856583029032,-0.00682557607069612,0.999965310096741,-0.00476581556722522,-0.18174110352993,0.980396866798401,-0.076106995344162,-0.199779540300369,0.978962361812592,-0.0414834581315517,-0.00682557607069612,0.999965310096741,-0.00476581556722522,-0.131864070892334,0.982424437999725,-0.132114544510841,-0.157588303089142,0.981817841529846,-0.105829000473022,-0.0079435920342803,0.999954402446747,-0.00529062794521451,-0.131864070892334,0.982424437999725,-0.132114544510841,-0.0079435920342803,0.999954402446747,-0.00529062794521451,-0.0070224879309535,0.999950170516968,-0.00708653219044209, +-0.157588303089142,0.981817841529846,-0.105829000473022,-0.18174110352993,0.980396866798401,-0.076106995344162,-0.00791499856859446,0.999963402748108,-0.00325660989619792,-0.18174110352993,0.980396866798401,-0.076106995344162,-0.00682557607069612,0.999965310096741,-0.00476581556722522,-0.00791499856859446,0.999963402748108,-0.00325660989619792,-0.157588303089142,0.981817841529846,-0.105829000473022,-0.00791499856859446,0.999963402748108,-0.00325660989619792,-0.0079435920342803,0.999954402446747,-0.00529062794521451,0.200453370809555,0.979702770709991,-0.000948471541050822,-0.00682557607069612,0.999965310096741,-0.00476581556722522,-0.00702418340370059,0.999970078468323,-0.00324856583029032,0.193650811910629,0.98028975725174,-0.0391315743327141,0.200453370809555,0.979702770709991,-0.000948471541050822,-0.00702418340370059,0.999970078468323,-0.00324856583029032,0.337857782840729,0.930407762527466,-0.142103582620621,0.193650811910629,0.98028975725174,-0.0391315743327141,0.174260750412941,0.982001721858978,-0.0728400051593781,0.290085315704346,0.936981737613678,-0.194719612598419,0.337857782840729,0.930407762527466,-0.142103582620621,0.174260750412941,0.982001721858978,-0.0728400051593781,0.149904623627663,0.983578622341156,0.100507229566574,-0.0070224879309535,0.999950170516968,-0.00708653219044209,-0.0079435920342803,0.999954402446747,-0.00529062794521451,0.149904623627663,0.983578622341156,0.100507229566574,0.125149101018906,0.984240710735321,0.124931395053864,-0.0070224879309535,0.999950170516968,-0.00708653219044209,0.173973351716995,0.9820556640625,0.0728000700473785,-0.0079435920342803,0.999954402446747,-0.00529062794521451,-0.00791499856859446,0.999963402748108,-0.00325660989619792,0.173973351716995,0.9820556640625,0.0728000700473785,0.149904623627663,0.983578622341156,0.100507229566574,-0.0079435920342803,0.999954402446747,-0.00529062794521451,0.192603394389153,0.980499267578125,0.0390543453395367,-0.00791499856859446,0.999963402748108,-0.00325660989619792,-0.00682557607069612,0.999965310096741,-0.00476581556722522, +0.200453370809555,0.979702770709991,-0.000948471541050822,0.192603394389153,0.980499267578125,0.0390543453395367,-0.00682557607069612,0.999965310096741,-0.00476581556722522,0.192603394389153,0.980499267578125,0.0390543453395367,0.173973351716995,0.9820556640625,0.0728000700473785,-0.00791499856859446,0.999963402748108,-0.00325660989619792,0.374203383922577,0.92418098449707,-0.0765595659613609,0.200453370809555,0.979702770709991,-0.000948471541050822,0.193650811910629,0.98028975725174,-0.0391315743327141,0.337857782840729,0.930407762527466,-0.142103582620621,0.374203383922577,0.92418098449707,-0.0765595659613609,0.193650811910629,0.98028975725174,-0.0391315743327141,0.412342101335526,0.868058562278748,-0.276492893695831,0.337857782840729,0.930407762527466,-0.142103582620621,0.290085315704346,0.936981737613678,-0.194719612598419,0.339080929756165,0.876783967018127,-0.340989828109741,0.412342101335526,0.868058562278748,-0.276492893695831,0.290085315704346,0.936981737613678,-0.194719612598419,0.409958750009537,0.816075444221497,-0.407375425100327,0.412342101335526,0.868058562278748,-0.276492893695831,0.339080929756165,0.876783967018127,-0.340989828109741,0.409958750009537,0.816075444221497,-0.407375425100327,0.499865263700485,0.784144759178162,-0.367766052484512,0.412342101335526,0.868058562278748,-0.276492893695831,0.412342101335526,0.868058562278748,-0.276492893695831,0.48283863067627,0.849933266639709,-0.210903480648994,0.337857782840729,0.930407762527466,-0.142103582620621,0.499865263700485,0.784144759178162,-0.367766052484512,0.48283863067627,0.849933266639709,-0.210903480648994,0.412342101335526,0.868058562278748,-0.276492893695831,0.48283863067627,0.849933266639709,-0.210903480648994,0.374203383922577,0.92418098449707,-0.0765595659613609,0.337857782840729,0.930407762527466,-0.142103582620621,0.499865263700485,0.784144759178162,-0.367766052484512,0.595619022846222,0.747117578983307,-0.295047849416733,0.48283863067627,0.849933266639709,-0.210903480648994,0.595619022846222,0.747117578983307,-0.295047849416733,0.537789881229401,0.83500063419342,-0.116430543363094, +0.48283863067627,0.849933266639709,-0.210903480648994,0.48283863067627,0.849933266639709,-0.210903480648994,0.537789881229401,0.83500063419342,-0.116430543363094,0.374203383922577,0.92418098449707,-0.0765595659613609,0.595619022846222,0.747117578983307,-0.295047849416733,0.675186991691589,0.718165040016174,-0.168408900499344,0.537789881229401,0.83500063419342,-0.116430543363094,0.374203383922577,0.92418098449707,-0.0765595659613609,0.388112545013428,0.921611964702606,8.25060706119984e-05,0.200453370809555,0.979702770709991,-0.000948471541050822,0.537789881229401,0.83500063419342,-0.116430543363094,0.388112545013428,0.921611964702606,8.25060706119984e-05,0.374203383922577,0.92418098449707,-0.0765595659613609,0.388112545013428,0.921611964702606,8.25060706119984e-05,0.192603394389153,0.980499267578125,0.0390543453395367,0.200453370809555,0.979702770709991,-0.000948471541050822,0.675186991691589,0.718165040016174,-0.168408900499344,0.558980107307434,0.829180598258972,-0.000924350111745298,0.537789881229401,0.83500063419342,-0.116430543363094,0.537789881229401,0.83500063419342,-0.116430543363094,0.558980107307434,0.829180598258972,-0.000924350111745298,0.388112545013428,0.921611964702606,8.25060706119984e-05,0.675186991691589,0.718165040016174,-0.168408900499344,0.707000732421875,0.707198321819305,-0.00452283630147576,0.558980107307434,0.829180598258972,-0.000924350111745298,0.388112545013428,0.921611964702606,8.25060706119984e-05,0.374210029840469,0.924180746078491,0.0765290334820747,0.192603394389153,0.980499267578125,0.0390543453395367,0.558980107307434,0.829180598258972,-0.000924350111745298,0.374210029840469,0.924180746078491,0.0765290334820747,0.388112545013428,0.921611964702606,8.25060706119984e-05,0.374210029840469,0.924180746078491,0.0765290334820747,0.173973351716995,0.9820556640625,0.0728000700473785,0.192603394389153,0.980499267578125,0.0390543453395367,0.707000732421875,0.707198321819305,-0.00452283630147576,0.538125514984131,0.834996223449707,0.114901445806026,0.558980107307434,0.829180598258972,-0.000924350111745298, +0.558980107307434,0.829180598258972,-0.000924350111745298,0.538125514984131,0.834996223449707,0.114901445806026,0.374210029840469,0.924180746078491,0.0765290334820747,0.707000732421875,0.707198321819305,-0.00452283630147576,0.67687863111496,0.718132317066193,0.161620423197746,0.538125514984131,0.834996223449707,0.114901445806026,0.374210029840469,0.924180746078491,0.0765290334820747,0.337774872779846,0.930408120155334,0.142298191785812,0.173973351716995,0.9820556640625,0.0728000700473785,0.538125514984131,0.834996223449707,0.114901445806026,0.337774872779846,0.930408120155334,0.142298191785812,0.374210029840469,0.924180746078491,0.0765290334820747,0.337774872779846,0.930408120155334,0.142298191785812,0.149904623627663,0.983578622341156,0.100507229566574,0.173973351716995,0.9820556640625,0.0728000700473785,0.67687863111496,0.718132317066193,0.161620423197746,0.482912749052048,0.849932312965393,0.210737720131874,0.538125514984131,0.834996223449707,0.114901445806026,0.538125514984131,0.834996223449707,0.114901445806026,0.482912749052048,0.849932312965393,0.210737720131874,0.337774872779846,0.930408120155334,0.142298191785812,0.67687863111496,0.718132317066193,0.161620423197746,0.597381293773651,0.747083604335785,0.291550487279892,0.482912749052048,0.849932312965393,0.210737720131874,0.337774872779846,0.930408120155334,0.142298191785812,0.289969354867935,0.936982095241547,0.194890365004539,0.149904623627663,0.983578622341156,0.100507229566574,0.482912749052048,0.849932312965393,0.210737720131874,0.289969354867935,0.936982095241547,0.194890365004539,0.337774872779846,0.930408120155334,0.142298191785812,0.289969354867935,0.936982095241547,0.194890365004539,0.125149101018906,0.984240710735321,0.124931395053864,0.149904623627663,0.983578622341156,0.100507229566574,0.289969354867935,0.936982095241547,0.194890365004539,0.24169297516346,0.939920544624329,0.241109415888786,0.125149101018906,0.984240710735321,0.124931395053864,0.597381293773651,0.747083604335785,0.291550487279892,0.410695374011993,0.868076503276825,0.278877168893814, +0.482912749052048,0.849932312965393,0.210737720131874,0.482912749052048,0.849932312965393,0.210737720131874,0.410695374011993,0.868076503276825,0.278877168893814,0.289969354867935,0.936982095241547,0.194890365004539,0.410695374011993,0.868076503276825,0.278877168893814,0.24169297516346,0.939920544624329,0.241109415888786,0.289969354867935,0.936982095241547,0.194890365004539,0.597381293773651,0.747083604335785,0.291550487279892,0.501197755336761,0.784116089344025,0.366009414196014,0.410695374011993,0.868076503276825,0.278877168893814,0.410695374011993,0.868076503276825,0.278877168893814,0.34098818898201,0.876783967018127,0.339082598686218,0.24169297516346,0.939920544624329,0.241109415888786,0.501197755336761,0.784116089344025,0.366009414196014,0.34098818898201,0.876783967018127,0.339082598686218,0.410695374011993,0.868076503276825,0.278877168893814,0.501197755336761,0.784116089344025,0.366009414196014,0.407544851303101,0.81607574224472,0.409789621829987,0.34098818898201,0.876783967018127,0.339082598686218,0.415003389120102,0.783718287944794,0.462123245000839,0.409591287374496,0.81649512052536,0.406903833150864,0.338943481445312,0.876972496509552,0.340641379356384,0.415003389120102,0.783718287944794,0.462123245000839,0.338943481445312,0.876972496509552,0.340641379356384,0.278817623853683,0.868104934692383,0.410675555467606,0.271557599306107,0.746635437011719,0.607282519340515,0.415003389120102,0.783718287944794,0.462123245000839,0.278817623853683,0.868104934692383,0.410675555467606,0.278817623853683,0.868104934692383,0.410675555467606,0.338943481445312,0.876972496509552,0.340641379356384,0.240937069058418,0.940027713775635,0.24144846200943,0.271557599306107,0.746635437011719,0.607282519340515,0.278817623853683,0.868104934692383,0.410675555467606,0.210815116763115,0.849684774875641,0.483314365148544,0.15083484351635,0.717927515506744,0.67958003282547,0.271557599306107,0.746635437011719,0.607282519340515,0.210815116763115,0.849684774875641,0.483314365148544,0.278817623853683,0.868104934692383,0.410675555467606,0.240937069058418,0.940027713775635,0.24144846200943, +0.195002481341362,0.937032520771027,0.289731025695801,0.210815116763115,0.849684774875641,0.483314365148544,0.278817623853683,0.868104934692383,0.410675555467606,0.195002481341362,0.937032520771027,0.289731025695801,0.195002481341362,0.937032520771027,0.289731025695801,0.240937069058418,0.940027713775635,0.24144846200943,0.130060449242592,0.982932329177856,0.130108833312988,0.15083484351635,0.717927515506744,0.67958003282547,0.210815116763115,0.849684774875641,0.483314365148544,0.115017682313919,0.834593951702118,0.53872412443161,-0.00385215878486633,0.70710164308548,0.707101404666901,0.15083484351635,0.717927515506744,0.67958003282547,0.115017682313919,0.834593951702118,0.53872412443161,0.195002481341362,0.937032520771027,0.289731025695801,0.130060449242592,0.982932329177856,0.130108833312988,0.104898490011692,0.982212781906128,0.155738532543182,0.104898490011692,0.982212781906128,0.155738532543182,0.130060449242592,0.982932329177856,0.130108833312988,0.00634337030351162,0.999959349632263,0.00640762411057949,0.210815116763115,0.849684774875641,0.483314365148544,0.195002481341362,0.937032520771027,0.289731025695801,0.142898052930832,0.930211126804352,0.338064104318619,0.115017682313919,0.834593951702118,0.53872412443161,0.210815116763115,0.849684774875641,0.483314365148544,0.142898052930832,0.930211126804352,0.338064104318619,0.142898052930832,0.930211126804352,0.338064104318619,0.195002481341362,0.937032520771027,0.289731025695801,0.104898490011692,0.982212781906128,0.155738532543182,-0.00385215878486633,0.70710164308548,0.707101404666901,0.115017682313919,0.834593951702118,0.53872412443161,-0.000911607290618122,0.828751027584076,0.55961674451828,-0.15640614926815,0.718002915382385,0.678239583969116,-0.00385215878486633,0.70710164308548,0.707101404666901,-0.000911607290618122,0.828751027584076,0.55961674451828,0.104898490011692,0.982212781906128,0.155738532543182,0.00634337030351162,0.999959349632263,0.00640762411057949,0.00476478738710284,0.999963402748108,0.00711129838600755,-0.123859986662865,0.98455423116684,-0.123740181326866, +0.00476478738710284,0.999963402748108,0.00711129838600755,0.00634337030351162,0.999959349632263,0.00640762411057949,0.142898052930832,0.930211126804352,0.338064104318619,0.104898490011692,0.982212781906128,0.155738532543182,0.0761567205190659,0.98053514957428,0.180972218513489,0.0761567205190659,0.98053514957428,0.180972218513489,0.104898490011692,0.982212781906128,0.155738532543182,0.00476478738710284,0.999963402748108,0.00711129838600755,0.115017682313919,0.834593951702118,0.53872412443161,0.142898052930832,0.930211126804352,0.338064104318619,0.0768648013472557,0.923822402954102,0.375025302171707,-0.000911607290618122,0.828751027584076,0.55961674451828,0.115017682313919,0.834593951702118,0.53872412443161,0.0768648013472557,0.923822402954102,0.375025302171707,0.0768648013472557,0.923822402954102,0.375025302171707,0.142898052930832,0.930211126804352,0.338064104318619,0.0761567205190659,0.98053514957428,0.180972218513489,-0.15640614926815,0.718002915382385,0.678239583969116,-0.000911607290618122,0.828751027584076,0.55961674451828,-0.116547547280788,0.83459860086441,0.538388252258301,-0.314648896455765,0.74705046415329,0.585586488246918,-0.15640614926815,0.718002915382385,0.678239583969116,-0.116547547280788,0.83459860086441,0.538388252258301,-0.123859986662865,0.98455423116684,-0.123740181326866,-0.0999099165201187,0.983778297901154,-0.148990944027901,0.00476478738710284,0.999963402748108,0.00711129838600755,-0.241697072982788,0.939920544624329,-0.241105750203133,-0.0999099165201187,0.983778297901154,-0.148990944027901,-0.123859986662865,0.98455423116684,-0.123740181326866,-0.000911607290618122,0.828751027584076,0.55961674451828,0.0768648013472557,0.923822402954102,0.375025302171707,8.36596882436424e-05,0.921249032020569,0.388973265886307,-0.116547547280788,0.83459860086441,0.538388252258301,-0.000911607290618122,0.828751027584076,0.55961674451828,8.36596882436424e-05,0.921249032020569,0.388973265886307,0.0761567205190659,0.98053514957428,0.180972218513489,0.00476478738710284,0.999963402748108,0.00711129838600755,0.00290096737444401,0.999971270561218,0.00699174543842673, +-0.0999099165201187,0.983778297901154,-0.148990944027901,0.00290096737444401,0.999971270561218,0.00699174543842673,0.00476478738710284,0.999963402748108,0.00711129838600755,0.0768648013472557,0.923822402954102,0.375025302171707,0.0761567205190659,0.98053514957428,0.180972218513489,0.0406543873250484,0.978895366191864,0.200277402997017,8.36596882436424e-05,0.921249032020569,0.388973265886307,0.0768648013472557,0.923822402954102,0.375025302171707,0.0406543873250484,0.978895366191864,0.200277402997017,0.0406543873250484,0.978895366191864,0.200277402997017,0.0761567205190659,0.98053514957428,0.180972218513489,0.00290096737444401,0.999971270561218,0.00699174543842673,-0.314648896455765,0.74705046415329,0.585586488246918,-0.116547547280788,0.83459860086441,0.538388252258301,-0.210887372493744,0.849684834480286,0.483282715082169,-0.386694252490997,0.78448212146759,0.484825134277344,-0.314648896455765,0.74705046415329,0.585586488246918,-0.210887372493744,0.849684834480286,0.483282715082169,-0.241697072982788,0.939920544624329,-0.241105750203133,-0.19471974670887,0.936981558799744,-0.290086001157761,-0.0999099165201187,0.983778297901154,-0.148990944027901,-0.340988665819168,0.876783549785614,-0.339082986116409,-0.19471974670887,0.936981558799744,-0.290086001157761,-0.241697072982788,0.939920544624329,-0.241105750203133,-0.116547547280788,0.83459860086441,0.538388252258301,8.36596882436424e-05,0.921249032020569,0.388973265886307,-0.07685337215662,0.923822462558746,0.375027269124985,-0.210887372493744,0.849684834480286,0.483282715082169,-0.116547547280788,0.83459860086441,0.538388252258301,-0.07685337215662,0.923822462558746,0.375027269124985,8.36596882436424e-05,0.921249032020569,0.388973265886307,0.0406543873250484,0.978895366191864,0.200277402997017,1.93270079762442e-05,0.978211283683777,0.207611441612244,-0.07685337215662,0.923822462558746,0.375027269124985,8.36596882436424e-05,0.921249032020569,0.388973265886307,1.93270079762442e-05,0.978211283683777,0.207611441612244,0.0406543873250484,0.978895366191864,0.200277402997017, +0.00290096737444401,0.999971270561218,0.00699174543842673,0.00136752089019865,0.999976098537445,0.00677354633808136,1.93270079762442e-05,0.978211283683777,0.207611441612244,0.0406543873250484,0.978895366191864,0.200277402997017,0.00136752089019865,0.999976098537445,0.00677354633808136,-0.0999099165201187,0.983778297901154,-0.148990944027901,-0.0728413835167885,0.982001841068268,-0.174259707331657,0.00290096737444401,0.999971270561218,0.00699174543842673,-0.19471974670887,0.936981558799744,-0.290086001157761,-0.0728413835167885,0.982001841068268,-0.174259707331657,-0.0999099165201187,0.983778297901154,-0.148990944027901,-0.0728413835167885,0.982001841068268,-0.174259707331657,0.00136752089019865,0.999976098537445,0.00677354633808136,0.00290096737444401,0.999971270561218,0.00699174543842673,-0.386694252490997,0.78448212146759,0.484825134277344,-0.210887372493744,0.849684834480286,0.483282715082169,-0.276793301105499,0.868088841438293,0.412076890468597,-0.40679794549942,0.816494882106781,0.409696906805038,-0.386694252490997,0.78448212146759,0.484825134277344,-0.276793301105499,0.868088841438293,0.412076890468597,-0.40679794549942,0.816494882106781,0.409696906805038,-0.276793301105499,0.868088841438293,0.412076890468597,-0.340640634298325,0.876971781253815,0.338945984840393,-0.210887372493744,0.849684834480286,0.483282715082169,-0.07685337215662,0.923822462558746,0.375027269124985,-0.142590463161469,0.930210769176483,0.338194936513901,-0.276793301105499,0.868088841438293,0.412076890468597,-0.210887372493744,0.849684834480286,0.483282715082169,-0.142590463161469,0.930210769176483,0.338194936513901,-0.340640634298325,0.876971781253815,0.338945984840393,-0.276793301105499,0.868088841438293,0.412076890468597,-0.194987669587135,0.937032520771027,0.289741098880768,-0.276793301105499,0.868088841438293,0.412076890468597,-0.142590463161469,0.930210769176483,0.338194936513901,-0.194987669587135,0.937032520771027,0.289741098880768,-0.340640634298325,0.876971781253815,0.338945984840393,-0.194987669587135,0.937032520771027,0.289741098880768, +-0.241449475288391,0.940027475357056,0.240936771035194,-0.07685337215662,0.923822462558746,0.375027269124985,1.93270079762442e-05,0.978211283683777,0.207611441612244,-0.0406589172780514,0.978895425796509,0.200276479125023,-0.142590463161469,0.930210769176483,0.338194936513901,-0.07685337215662,0.923822462558746,0.375027269124985,-0.0406589172780514,0.978895425796509,0.200276479125023,1.93270079762442e-05,0.978211283683777,0.207611441612244,0.00136752089019865,0.999976098537445,0.00677354633808136,3.362528514117e-05,0.999976992607117,0.00678358506411314,-0.0406589172780514,0.978895425796509,0.200276479125023,1.93270079762442e-05,0.978211283683777,0.207611441612244,3.362528514117e-05,0.999976992607117,0.00678358506411314,-0.0728413835167885,0.982001841068268,-0.174259707331657,-0.0391296558082104,0.980289697647095,-0.193651363253593,0.00136752089019865,0.999976098537445,0.00677354633808136,-0.0391296558082104,0.980289697647095,-0.193651363253593,3.362528514117e-05,0.999976992607117,0.00678358506411314,0.00136752089019865,0.999976098537445,0.00677354633808136,-0.241449475288391,0.940027475357056,0.240936771035194,-0.194987669587135,0.937032520771027,0.289741098880768,-0.104840949177742,0.982212781906128,0.155776172876358,-0.241449475288391,0.940027475357056,0.240936771035194,-0.104840949177742,0.982212781906128,0.155776172876358,-0.130109325051308,0.982932507991791,0.13005867600441,-0.194987669587135,0.937032520771027,0.289741098880768,-0.142590463161469,0.930210769176483,0.338194936513901,-0.0760806873440742,0.980535268783569,0.181003704667091,-0.142590463161469,0.930210769176483,0.338194936513901,-0.0406589172780514,0.978895425796509,0.200276479125023,-0.0760806873440742,0.980535268783569,0.181003704667091,-0.194987669587135,0.937032520771027,0.289741098880768,-0.0760806873440742,0.980535268783569,0.181003704667091,-0.104840949177742,0.982212781906128,0.155776172876358,-0.0406589172780514,0.978895425796509,0.200276479125023,3.362528514117e-05,0.999976992607117,0.00678358506411314,-0.0013605454005301,0.9999760389328,0.00677494099363685, +-0.0760806873440742,0.980535268783569,0.181003704667091,-0.0406589172780514,0.978895425796509,0.200276479125023,-0.0013605454005301,0.9999760389328,0.00677494099363685,-0.130109325051308,0.982932507991791,0.13005867600441,-0.104840949177742,0.982212781906128,0.155776172876358,-0.00476549752056599,0.999963402748108,0.00711082248017192,-0.130109325051308,0.982932507991791,0.13005867600441,-0.00476549752056599,0.999963402748108,0.00711082248017192,-0.00640762597322464,0.999959349632263,0.00634336844086647,-0.104840949177742,0.982212781906128,0.155776172876358,-0.0760806873440742,0.980535268783569,0.181003704667091,-0.00290663097985089,0.999971270561218,0.00698938500136137,-0.0760806873440742,0.980535268783569,0.181003704667091,-0.0013605454005301,0.9999760389328,0.00677494099363685,-0.00290663097985089,0.999971270561218,0.00698938500136137,-0.104840949177742,0.982212781906128,0.155776172876358,-0.00290663097985089,0.999971270561218,0.00698938500136137,-0.00476549752056599,0.999963402748108,0.00711082248017192,5.34472565050237e-05,0.97958916425705,-0.201010167598724,-0.0013605454005301,0.9999760389328,0.00677494099363685,3.362528514117e-05,0.999976992607117,0.00678358506411314,-0.0391296558082104,0.980289697647095,-0.193651363253593,5.34472565050237e-05,0.97958916425705,-0.201010167598724,3.362528514117e-05,0.999976992607117,0.00678358506411314,-0.142108350992203,0.930407643318176,-0.33785605430603,-0.0391296558082104,0.980289697647095,-0.193651363253593,-0.0728413835167885,0.982001841068268,-0.174259707331657,-0.19471974670887,0.936981558799744,-0.290086001157761,-0.142108350992203,0.930407643318176,-0.33785605430603,-0.0728413835167885,0.982001841068268,-0.174259707331657,0.099906824529171,0.983778297901154,-0.148993015289307,-0.00640762597322464,0.999959349632263,0.00634336844086647,-0.00476549752056599,0.999963402748108,0.00711082248017192,0.099906824529171,0.983778297901154,-0.148993015289307,0.123740553855896,0.984554171562195,-0.123860292136669,-0.00640762597322464,0.999959349632263,0.00634336844086647,0.0729378536343575,0.982001841068268,-0.174219235777855, +-0.00476549752056599,0.999963402748108,0.00711082248017192,-0.00290663097985089,0.999971270561218,0.00698938500136137,0.0729378536343575,0.982001841068268,-0.174219235777855,0.099906824529171,0.983778297901154,-0.148993015289307,-0.00476549752056599,0.999963402748108,0.00711082248017192,0.0391775071620941,0.98028975725174,-0.193641692399979,-0.00290663097985089,0.999971270561218,0.00698938500136137,-0.0013605454005301,0.9999760389328,0.00677494099363685,5.34472565050237e-05,0.97958916425705,-0.201010167598724,0.0391775071620941,0.98028975725174,-0.193641692399979,-0.0013605454005301,0.9999760389328,0.00677494099363685,0.0391775071620941,0.98028975725174,-0.193641692399979,0.0729378536343575,0.982001841068268,-0.174219235777855,-0.00290663097985089,0.999971270561218,0.00698938500136137,-0.076558992266655,0.924180865287781,-0.374203711748123,5.34472565050237e-05,0.97958916425705,-0.201010167598724,-0.0391296558082104,0.980289697647095,-0.193651363253593,-0.142108350992203,0.930407643318176,-0.33785605430603,-0.076558992266655,0.924180865287781,-0.374203711748123,-0.0391296558082104,0.980289697647095,-0.193651363253593,-0.276494681835175,0.868057787418365,-0.412342607975006,-0.142108350992203,0.930407643318176,-0.33785605430603,-0.19471974670887,0.936981558799744,-0.290086001157761,-0.340988665819168,0.876783549785614,-0.339082986116409,-0.276494681835175,0.868057787418365,-0.412342607975006,-0.19471974670887,0.936981558799744,-0.290086001157761,-0.407544940710068,0.816075801849365,-0.409789592027664,-0.276494681835175,0.868057787418365,-0.412342607975006,-0.340988665819168,0.876783549785614,-0.339082986116409,-0.407544940710068,0.816075801849365,-0.409789592027664,-0.365005224943161,0.784097969532013,-0.501957774162292,-0.276494681835175,0.868057787418365,-0.412342607975006,-0.276494681835175,0.868057787418365,-0.412342607975006,-0.210904017090797,0.849932909011841,-0.482839167118073,-0.142108350992203,0.930407643318176,-0.33785605430603,-0.365005224943161,0.784097969532013,-0.501957774162292,-0.210904017090797,0.849932909011841,-0.482839167118073, +-0.276494681835175,0.868057787418365,-0.412342607975006,-0.210904017090797,0.849932909011841,-0.482839167118073,-0.076558992266655,0.924180865287781,-0.374203711748123,-0.142108350992203,0.930407643318176,-0.33785605430603,-0.365005224943161,0.784097969532013,-0.501957774162292,-0.293046683073044,0.747099459171295,-0.596628904342651,-0.210904017090797,0.849932909011841,-0.482839167118073,-0.293046683073044,0.747099459171295,-0.596628904342651,-0.116430476307869,0.83500063419342,-0.537789881229401,-0.210904017090797,0.849932909011841,-0.482839167118073,-0.210904017090797,0.849932909011841,-0.482839167118073,-0.116430476307869,0.83500063419342,-0.537789881229401,-0.076558992266655,0.924180865287781,-0.374203711748123,-0.293046683073044,0.747099459171295,-0.596628904342651,-0.163782775402069,0.718146443367004,-0.67634379863739,-0.116430476307869,0.83500063419342,-0.537789881229401,-0.076558992266655,0.924180865287781,-0.374203711748123,8.18342086859047e-05,0.921611785888672,-0.388112872838974,5.34472565050237e-05,0.97958916425705,-0.201010167598724,-0.116430476307869,0.83500063419342,-0.537789881229401,8.18342086859047e-05,0.921611785888672,-0.388112872838974,-0.076558992266655,0.924180865287781,-0.374203711748123,8.18342086859047e-05,0.921611785888672,-0.388112872838974,0.0391775071620941,0.98028975725174,-0.193641692399979,5.34472565050237e-05,0.97958916425705,-0.201010167598724,-0.163782775402069,0.718146443367004,-0.67634379863739,-0.000924720254261047,0.829180598258972,-0.558980107307434,-0.116430476307869,0.83500063419342,-0.537789881229401,-0.116430476307869,0.83500063419342,-0.537789881229401,-0.000924720254261047,0.829180598258972,-0.558980107307434,8.18342086859047e-05,0.921611785888672,-0.388112872838974,-0.163782775402069,0.718146443367004,-0.67634379863739,0.00226540700532496,0.707203805446625,-0.707006216049194,-0.000924720254261047,0.829180598258972,-0.558980107307434,8.18342086859047e-05,0.921611785888672,-0.388112872838974,0.0765288695693016,0.924180805683136,-0.374210000038147,0.0391775071620941,0.98028975725174,-0.193641692399979, +-0.000924720254261047,0.829180598258972,-0.558980107307434,0.0765288695693016,0.924180805683136,-0.374210000038147,8.18342086859047e-05,0.921611785888672,-0.388112872838974,0.0765288695693016,0.924180805683136,-0.374210000038147,0.0729378536343575,0.982001841068268,-0.174219235777855,0.0391775071620941,0.98028975725174,-0.193641692399979,0.00226540700532496,0.707203805446625,-0.707006216049194,0.114902168512344,0.834996223449707,-0.538125216960907,-0.000924720254261047,0.829180598258972,-0.558980107307434,-0.000924720254261047,0.829180598258972,-0.558980107307434,0.114902168512344,0.834996223449707,-0.538125216960907,0.0765288695693016,0.924180805683136,-0.374210000038147,0.00226540700532496,0.707203805446625,-0.707006216049194,0.166217789053917,0.718158304691315,-0.675736844539642,0.114902168512344,0.834996223449707,-0.538125216960907,0.0765288695693016,0.924180805683136,-0.374210000038147,0.142303213477135,0.930408120155334,-0.337772786617279,0.0729378536343575,0.982001841068268,-0.174219235777855,0.114902168512344,0.834996223449707,-0.538125216960907,0.142303213477135,0.930408120155334,-0.337772786617279,0.0765288695693016,0.924180805683136,-0.374210000038147,0.142303213477135,0.930408120155334,-0.337772786617279,0.099906824529171,0.983778297901154,-0.148993015289307,0.0729378536343575,0.982001841068268,-0.174219235777855,0.166217789053917,0.718158304691315,-0.675736844539642,0.210739582777023,0.849931955337524,-0.482912570238113,0.114902168512344,0.834996223449707,-0.538125216960907,0.114902168512344,0.834996223449707,-0.538125216960907,0.210739582777023,0.849931955337524,-0.482912570238113,0.142303213477135,0.930408120155334,-0.337772786617279,0.166217789053917,0.718158304691315,-0.675736844539642,0.293526649475098,0.747104108333588,-0.596387028694153,0.210739582777023,0.849931955337524,-0.482912570238113,0.142303213477135,0.930408120155334,-0.337772786617279,0.194891467690468,0.936981916427612,-0.289969474077225,0.099906824529171,0.983778297901154,-0.148993015289307,0.210739582777023,0.849931955337524,-0.482912570238113, +0.194891467690468,0.936981916427612,-0.289969474077225,0.142303213477135,0.930408120155334,-0.337772786617279,0.194891467690468,0.936981916427612,-0.289969474077225,0.123740553855896,0.984554171562195,-0.123860292136669,0.099906824529171,0.983778297901154,-0.148993015289307,0.194891467690468,0.936981916427612,-0.289969474077225,0.241102322936058,0.939920544624329,-0.241700068116188,0.123740553855896,0.984554171562195,-0.123860292136669,0.293526649475098,0.747104108333588,-0.596387028694153,0.278875827789307,0.868075728416443,-0.410698056221008,0.210739582777023,0.849931955337524,-0.482912570238113,0.210739582777023,0.849931955337524,-0.482912570238113,0.278875827789307,0.868075728416443,-0.410698056221008,0.194891467690468,0.936981916427612,-0.289969474077225,0.278875827789307,0.868075728416443,-0.410698056221008,0.241102322936058,0.939920544624329,-0.241700068116188,0.194891467690468,0.936981916427612,-0.289969474077225,0.293526649475098,0.747104108333588,-0.596387028694153,0.368808001279831,0.784159958362579,-0.499073028564453,0.278875827789307,0.868075728416443,-0.410698056221008,0.278875827789307,0.868075728416443,-0.410698056221008,0.339080929756165,0.876783967018127,-0.340989828109741,0.241102322936058,0.939920544624329,-0.241700068116188,0.368808001279831,0.784159958362579,-0.499073028564453,0.339080929756165,0.876783967018127,-0.340989828109741,0.278875827789307,0.868075728416443,-0.410698056221008,0.368808001279831,0.784159958362579,-0.499073028564453,0.409958750009537,0.816075444221497,-0.407375425100327,0.339080929756165,0.876783967018127,-0.340989828109741,0.679082632064819,0.717958092689514,0.152915328741074,0.707105755805969,0.707105696201324,-0.00177195575088263,0.55961674451828,0.828751087188721,0.000911413109861314,0.679082632064819,0.717958092689514,0.152915328741074,0.55961674451828,0.828751087188721,0.000911413109861314,0.538388133049011,0.83459860086441,0.116548269987106,0.606589794158936,0.746676027774811,0.27299028635025,0.679082632064819,0.717958092689514,0.152915328741074,0.538388133049011,0.83459860086441,0.116548269987106, +0.538388133049011,0.83459860086441,0.116548269987106,0.55961674451828,0.828751087188721,0.000911413109861314,0.388972699642181,0.921249330043793,-8.44728492666036e-05,0.606589794158936,0.746676027774811,0.27299028635025,0.538388133049011,0.83459860086441,0.116548269987106,0.483281850814819,0.849685192108154,0.210887596011162,0.463009089231491,0.783766567707062,0.413923412561417,0.606589794158936,0.746676027774811,0.27299028635025,0.483281850814819,0.849685192108154,0.210887596011162,0.538388133049011,0.83459860086441,0.116548269987106,0.388972699642181,0.921249330043793,-8.44728492666036e-05,0.375026673078537,0.92382276058197,0.0768540725111961,0.483281850814819,0.849685192108154,0.210887596011162,0.538388133049011,0.83459860086441,0.116548269987106,0.375026673078537,0.92382276058197,0.0768540725111961,0.375026673078537,0.92382276058197,0.0768540725111961,0.388972699642181,0.921249330043793,-8.44728492666036e-05,0.207287818193436,0.978279292583466,-0.00122294796165079,0.463009089231491,0.783766567707062,0.413923412561417,0.483281850814819,0.849685192108154,0.210887596011162,0.412076413631439,0.868089556694031,0.276791334152222,0.409591287374496,0.81649512052536,0.406903833150864,0.463009089231491,0.783766567707062,0.413923412561417,0.412076413631439,0.868089556694031,0.276791334152222,0.409591287374496,0.81649512052536,0.406903833150864,0.412076413631439,0.868089556694031,0.276791334152222,0.338943481445312,0.876972496509552,0.340641379356384,0.483281850814819,0.849685192108154,0.210887596011162,0.375026673078537,0.92382276058197,0.0768540725111961,0.338196158409119,0.930210888385773,0.142586261034012,0.412076413631439,0.868089556694031,0.276791334152222,0.483281850814819,0.849685192108154,0.210887596011162,0.338196158409119,0.930210888385773,0.142586261034012,0.375026673078537,0.92382276058197,0.0768540725111961,0.207287818193436,0.978279292583466,-0.00122294796165079,0.200275868177414,0.978895366191864,0.0406611859798431,0.338196158409119,0.930210888385773,0.142586261034012,0.375026673078537,0.92382276058197,0.0768540725111961, +0.200275868177414,0.978895366191864,0.0406611859798431,0.200275868177414,0.978895366191864,0.0406611859798431,0.207287818193436,0.978279292583466,-0.00122294796165079,0.00702445255592465,0.999969899654388,-0.0033059164416045,0.338943481445312,0.876972496509552,0.340641379356384,0.412076413631439,0.868089556694031,0.276791334152222,0.289740294218063,0.93703281879425,0.194987505674362,0.412076413631439,0.868089556694031,0.276791334152222,0.338196158409119,0.930210888385773,0.142586261034012,0.289740294218063,0.93703281879425,0.194987505674362,0.338943481445312,0.876972496509552,0.340641379356384,0.289740294218063,0.93703281879425,0.194987505674362,0.240937069058418,0.940027713775635,0.24144846200943,0.338196158409119,0.930210888385773,0.142586261034012,0.200275868177414,0.978895366191864,0.0406611859798431,0.18100480735302,0.98053514957428,0.0760792568325996,0.289740294218063,0.93703281879425,0.194987505674362,0.338196158409119,0.930210888385773,0.142586261034012,0.18100480735302,0.98053514957428,0.0760792568325996,0.200275868177414,0.978895366191864,0.0406611859798431,0.00702445255592465,0.999969899654388,-0.0033059164416045,0.00677501317113638,0.99997615814209,0.0013606216525659,0.18100480735302,0.98053514957428,0.0760792568325996,0.200275868177414,0.978895366191864,0.0406611859798431,0.00677501317113638,0.99997615814209,0.0013606216525659,-0.200453296303749,0.97970324754715,-5.32605590706225e-05,0.00677501317113638,0.99997615814209,0.0013606216525659,0.00702445255592465,0.999969899654388,-0.0033059164416045,0.240937069058418,0.940027713775635,0.24144846200943,0.289740294218063,0.93703281879425,0.194987505674362,0.155776128172874,0.982212781906128,0.104842662811279,0.289740294218063,0.93703281879425,0.194987505674362,0.18100480735302,0.98053514957428,0.0760792568325996,0.155776128172874,0.982212781906128,0.104842662811279,0.240937069058418,0.940027713775635,0.24144846200943,0.155776128172874,0.982212781906128,0.104842662811279,0.130060449242592,0.982932329177856,0.130108833312988,-0.200453296303749,0.97970324754715,-5.32605590706225e-05, +-0.193641662597656,0.980289697647095,-0.0391775481402874,0.00677501317113638,0.99997615814209,0.0013606216525659,-0.388112843036652,0.921611845493317,-8.17474428913556e-05,-0.193641662597656,0.980289697647095,-0.0391775481402874,-0.200453296303749,0.97970324754715,-5.32605590706225e-05,0.18100480735302,0.98053514957428,0.0760792568325996,0.00677501317113638,0.99997615814209,0.0013606216525659,0.00698938546702266,0.999971270561218,0.0029066305141896,0.155776128172874,0.982212781906128,0.104842662811279,0.18100480735302,0.98053514957428,0.0760792568325996,0.00698938546702266,0.999971270561218,0.0029066305141896,-0.193641662597656,0.980289697647095,-0.0391775481402874,0.00698938546702266,0.999971270561218,0.0029066305141896,0.00677501317113638,0.99997615814209,0.0013606216525659,0.130060449242592,0.982932329177856,0.130108833312988,0.155776128172874,0.982212781906128,0.104842662811279,0.00711082154884934,0.999963402748108,0.00476549891754985,0.155776128172874,0.982212781906128,0.104842662811279,0.00698938546702266,0.999971270561218,0.0029066305141896,0.00711082154884934,0.999963402748108,0.00476549891754985,0.130060449242592,0.982932329177856,0.130108833312988,0.00711082154884934,0.999963402748108,0.00476549891754985,0.00634337030351162,0.999959349632263,0.00640762411057949,-0.388112843036652,0.921611845493317,-8.17474428913556e-05,-0.374209970235825,0.924180805683136,-0.0765288174152374,-0.193641662597656,0.980289697647095,-0.0391775481402874,-0.558980107307434,0.829180598258972,0.000924909487366676,-0.374209970235825,0.924180805683136,-0.0765288174152374,-0.388112843036652,0.921611845493317,-8.17474428913556e-05,-0.193641662597656,0.980289697647095,-0.0391775481402874,-0.174219250679016,0.982001841068268,-0.0729378089308739,0.00698938546702266,0.999971270561218,0.0029066305141896,-0.174219250679016,0.982001841068268,-0.0729378089308739,0.00711082154884934,0.999963402748108,0.00476549891754985,0.00698938546702266,0.999971270561218,0.0029066305141896,-0.374209970235825,0.924180805683136,-0.0765288174152374,-0.174219250679016,0.982001841068268,-0.0729378089308739, +-0.193641662597656,0.980289697647095,-0.0391775481402874,-0.148992970585823,0.983778297901154,-0.0999068841338158,0.00634337030351162,0.999959349632263,0.00640762411057949,0.00711082154884934,0.999963402748108,0.00476549891754985,-0.174219250679016,0.982001841068268,-0.0729378089308739,-0.148992970585823,0.983778297901154,-0.0999068841338158,0.00711082154884934,0.999963402748108,0.00476549891754985,-0.148992970585823,0.983778297901154,-0.0999068841338158,-0.123859986662865,0.98455423116684,-0.123740181326866,0.00634337030351162,0.999959349632263,0.00640762411057949,-0.558980107307434,0.829180598258972,0.000924909487366676,-0.538125157356262,0.834996223449707,-0.114902347326279,-0.374209970235825,0.924180805683136,-0.0765288174152374,-0.707000732421875,0.707198321819305,0.00452313618734479,-0.538125157356262,0.834996223449707,-0.114902347326279,-0.558980107307434,0.829180598258972,0.000924909487366676,-0.707000732421875,0.707198321819305,0.00452313618734479,-0.676878869533539,0.718132257461548,-0.161620780825615,-0.538125157356262,0.834996223449707,-0.114902347326279,-0.374209970235825,0.924180805683136,-0.0765288174152374,-0.337772756814957,0.930408120155334,-0.142303228378296,-0.174219250679016,0.982001841068268,-0.0729378089308739,-0.337772756814957,0.930408120155334,-0.142303228378296,-0.148992970585823,0.983778297901154,-0.0999068841338158,-0.174219250679016,0.982001841068268,-0.0729378089308739,-0.538125157356262,0.834996223449707,-0.114902347326279,-0.337772756814957,0.930408120155334,-0.142303228378296,-0.374209970235825,0.924180805683136,-0.0765288174152374,-0.289969444274902,0.936981916427612,-0.194891527295113,-0.123859986662865,0.98455423116684,-0.123740181326866,-0.148992970585823,0.983778297901154,-0.0999068841338158,-0.337772756814957,0.930408120155334,-0.142303228378296,-0.289969444274902,0.936981916427612,-0.194891527295113,-0.148992970585823,0.983778297901154,-0.0999068841338158,-0.289969444274902,0.936981916427612,-0.194891527295113,-0.241697072982788,0.939920544624329,-0.241105750203133,-0.123859986662865,0.98455423116684,-0.123740181326866, +-0.676878869533539,0.718132257461548,-0.161620780825615,-0.482912629842758,0.849931955337524,-0.210739433765411,-0.538125157356262,0.834996223449707,-0.114902347326279,-0.538125157356262,0.834996223449707,-0.114902347326279,-0.482912629842758,0.849931955337524,-0.210739433765411,-0.337772756814957,0.930408120155334,-0.142303228378296,-0.482912629842758,0.849931955337524,-0.210739433765411,-0.289969444274902,0.936981916427612,-0.194891527295113,-0.337772756814957,0.930408120155334,-0.142303228378296,-0.676878869533539,0.718132257461548,-0.161620780825615,-0.59738153219223,0.747083425521851,-0.291550368070602,-0.482912629842758,0.849931955337524,-0.210739433765411,-0.410698056221008,0.868075728416443,-0.278875827789307,-0.241697072982788,0.939920544624329,-0.241105750203133,-0.289969444274902,0.936981916427612,-0.194891527295113,-0.482912629842758,0.849931955337524,-0.210739433765411,-0.410698056221008,0.868075728416443,-0.278875827789307,-0.289969444274902,0.936981916427612,-0.194891527295113,-0.59738153219223,0.747083425521851,-0.291550368070602,-0.410698056221008,0.868075728416443,-0.278875827789307,-0.482912629842758,0.849931955337524,-0.210739433765411,-0.410698056221008,0.868075728416443,-0.278875827789307,-0.340988665819168,0.876783549785614,-0.339082986116409,-0.241697072982788,0.939920544624329,-0.241105750203133,-0.59738153219223,0.747083425521851,-0.291550368070602,-0.501197695732117,0.784116089344025,-0.366009503602982,-0.410698056221008,0.868075728416443,-0.278875827789307,-0.501197695732117,0.784116089344025,-0.366009503602982,-0.340988665819168,0.876783549785614,-0.339082986116409,-0.410698056221008,0.868075728416443,-0.278875827789307,-0.501197695732117,0.784116089344025,-0.366009503602982,-0.407544940710068,0.816075801849365,-0.409789592027664,-0.340988665819168,0.876783549785614,-0.339082986116409,0.483972817659378,0.784472227096558,-0.387780487537384,0.40679869055748,0.816494882106781,-0.409696191549301,0.340641468763351,0.876972556114197,-0.338943421840668,0.483972817659378,0.784472227096558,-0.387780487537384, +0.340641468763351,0.876972556114197,-0.338943421840668,0.410675376653671,0.868104994297028,-0.278817862272263,0.586218357086182,0.747063338756561,-0.313439726829529,0.483972817659378,0.784472227096558,-0.387780487537384,0.410675376653671,0.868104994297028,-0.278817862272263,0.410675376653671,0.868104994297028,-0.278817862272263,0.340641468763351,0.876972556114197,-0.338943421840668,0.241448506712914,0.94002765417099,-0.240937009453773,0.586218357086182,0.747063338756561,-0.313439726829529,0.410675376653671,0.868104994297028,-0.278817862272263,0.483314156532288,0.849684774875641,-0.210815459489822,0.678749859333038,0.717977106571198,-0.154296562075615,0.586218357086182,0.747063338756561,-0.313439726829529,0.483314156532288,0.849684774875641,-0.210815459489822,0.410675376653671,0.868104994297028,-0.278817862272263,0.241448506712914,0.94002765417099,-0.240937009453773,0.289731055498123,0.937032520771027,-0.195002466440201,0.483314156532288,0.849684774875641,-0.210815459489822,0.410675376653671,0.868104994297028,-0.278817862272263,0.289731055498123,0.937032520771027,-0.195002466440201,0.289731055498123,0.937032520771027,-0.195002466440201,0.241448506712914,0.94002765417099,-0.240937009453773,0.132114097476006,0.982424199581146,-0.131865799427032,0.678749859333038,0.717977106571198,-0.154296562075615,0.483314156532288,0.849684774875641,-0.210815459489822,0.538724005222321,0.834594070911407,-0.115018084645271,0.707105755805969,0.707105696201324,-0.00177195575088263,0.678749859333038,0.717977106571198,-0.154296562075615,0.538724005222321,0.834594070911407,-0.115018084645271,0.707105755805969,0.707105696201324,-0.00177195575088263,0.538724005222321,0.834594070911407,-0.115018084645271,0.55961674451828,0.828751087188721,0.000911413109861314,0.289731055498123,0.937032520771027,-0.195002466440201,0.132114097476006,0.982424199581146,-0.131865799427032,0.157608762383461,0.981817543506622,-0.105800226330757,0.157608762383461,0.981817543506622,-0.105800226330757,0.132114097476006,0.982424199581146,-0.131865799427032,0.0070865317247808,0.999950170516968,-0.0070224441587925, +0.483314156532288,0.849684774875641,-0.210815459489822,0.289731055498123,0.937032520771027,-0.195002466440201,0.338063806295395,0.930211246013641,-0.142898112535477,0.538724005222321,0.834594070911407,-0.115018084645271,0.483314156532288,0.849684774875641,-0.210815459489822,0.338063806295395,0.930211246013641,-0.142898112535477,0.338063806295395,0.930211246013641,-0.142898112535477,0.289731055498123,0.937032520771027,-0.195002466440201,0.157608762383461,0.981817543506622,-0.105800226330757,0.55961674451828,0.828751087188721,0.000911413109861314,0.538724005222321,0.834594070911407,-0.115018084645271,0.375024855136871,0.923822522163391,-0.0768645033240318,0.538724005222321,0.834594070911407,-0.115018084645271,0.338063806295395,0.930211246013641,-0.142898112535477,0.375024855136871,0.923822522163391,-0.0768645033240318,0.55961674451828,0.828751087188721,0.000911413109861314,0.375024855136871,0.923822522163391,-0.0768645033240318,0.388972699642181,0.921249330043793,-8.44728492666036e-05,0.157608762383461,0.981817543506622,-0.105800226330757,0.0070865317247808,0.999950170516968,-0.0070224441587925,0.00794248096644878,0.999954402446747,-0.00529220560565591,-0.124930001795292,0.984240829944611,0.12514990568161,0.00794248096644878,0.999954402446747,-0.00529220560565591,0.0070865317247808,0.999950170516968,-0.0070224441587925,0.338063806295395,0.930211246013641,-0.142898112535477,0.157608762383461,0.981817543506622,-0.105800226330757,0.181744322180748,0.980396687984467,-0.0761004090309143,0.375024855136871,0.923822522163391,-0.0768645033240318,0.338063806295395,0.930211246013641,-0.142898112535477,0.181744322180748,0.980396687984467,-0.0761004090309143,0.181744322180748,0.980396687984467,-0.0761004090309143,0.157608762383461,0.981817543506622,-0.105800226330757,0.00794248096644878,0.999954402446747,-0.00529220560565591,0.388972699642181,0.921249330043793,-8.44728492666036e-05,0.375024855136871,0.923822522163391,-0.0768645033240318,0.199982419610023,0.978962481021881,-0.0404912047088146,0.375024855136871,0.923822522163391,-0.0768645033240318, +0.181744322180748,0.980396687984467,-0.0761004090309143,0.199982419610023,0.978962481021881,-0.0404912047088146,0.388972699642181,0.921249330043793,-8.44728492666036e-05,0.199982419610023,0.978962481021881,-0.0404912047088146,0.207287818193436,0.978279292583466,-0.00122294796165079,-0.124930001795292,0.984240829944611,0.12514990568161,-0.149876087903976,0.98357880115509,0.100548006594181,0.00794248096644878,0.999954402446747,-0.00529220560565591,-0.241105809807777,0.939920485019684,0.241696998476982,-0.149876087903976,0.98357880115509,0.100548006594181,-0.124930001795292,0.984240829944611,0.12514990568161,0.181744322180748,0.980396687984467,-0.0761004090309143,0.00794248096644878,0.999954402446747,-0.00529220560565591,0.00791622512042522,0.999963462352753,-0.00325359380804002,0.199982419610023,0.978962481021881,-0.0404912047088146,0.181744322180748,0.980396687984467,-0.0761004090309143,0.00791622512042522,0.999963462352753,-0.00325359380804002,-0.149876087903976,0.98357880115509,0.100548006594181,0.00791622512042522,0.999963462352753,-0.00325359380804002,0.00794248096644878,0.999954402446747,-0.00529220560565591,0.207287818193436,0.978279292583466,-0.00122294796165079,0.199982419610023,0.978962481021881,-0.0404912047088146,0.00682429922744632,0.999965369701385,-0.00477267755195498,0.199982419610023,0.978962481021881,-0.0404912047088146,0.00791622512042522,0.999963462352753,-0.00325359380804002,0.00682429922744632,0.999965369701385,-0.00477267755195498,0.207287818193436,0.978279292583466,-0.00122294796165079,0.00682429922744632,0.999965369701385,-0.00477267755195498,0.00702445255592465,0.999969899654388,-0.0033059164416045,-0.241105809807777,0.939920485019684,0.241696998476982,-0.290086001157761,0.936981558799744,0.19471974670887,-0.149876087903976,0.98357880115509,0.100548006594181,-0.339082986116409,0.876783609390259,0.340988725423813,-0.290086001157761,0.936981558799744,0.19471974670887,-0.241105809807777,0.939920485019684,0.241696998476982,-0.149876087903976,0.98357880115509,0.100548006594181,-0.173977375030518,0.98205578327179,0.0727894008159637, +0.00791622512042522,0.999963462352753,-0.00325359380804002,-0.173977375030518,0.98205578327179,0.0727894008159637,0.00682429922744632,0.999965369701385,-0.00477267755195498,0.00791622512042522,0.999963462352753,-0.00325359380804002,-0.290086001157761,0.936981558799744,0.19471974670887,-0.173977375030518,0.98205578327179,0.0727894008159637,-0.149876087903976,0.98357880115509,0.100548006594181,-0.192868068814278,0.98049783706665,0.0377606339752674,0.00702445255592465,0.999969899654388,-0.0033059164416045,0.00682429922744632,0.999965369701385,-0.00477267755195498,-0.173977375030518,0.98205578327179,0.0727894008159637,-0.192868068814278,0.98049783706665,0.0377606339752674,0.00682429922744632,0.999965369701385,-0.00477267755195498,-0.192868068814278,0.98049783706665,0.0377606339752674,-0.200453296303749,0.97970324754715,-5.32605590706225e-05,0.00702445255592465,0.999969899654388,-0.0033059164416045,-0.339082986116409,0.876783609390259,0.340988725423813,-0.412342667579651,0.868057727813721,0.276494562625885,-0.290086001157761,0.936981558799744,0.19471974670887,-0.409958243370056,0.816075444221497,0.407375931739807,-0.412342667579651,0.868057727813721,0.276494562625885,-0.339082986116409,0.876783609390259,0.340988725423813,-0.409958243370056,0.816075444221497,0.407375931739807,-0.499865412712097,0.784144759178162,0.367765814065933,-0.412342667579651,0.868057727813721,0.276494562625885,-0.290086001157761,0.936981558799744,0.19471974670887,-0.337856024503708,0.930407643318176,0.142108425498009,-0.173977375030518,0.98205578327179,0.0727894008159637,-0.337856024503708,0.930407643318176,0.142108425498009,-0.192868068814278,0.98049783706665,0.0377606339752674,-0.173977375030518,0.98205578327179,0.0727894008159637,-0.412342667579651,0.868057727813721,0.276494562625885,-0.337856024503708,0.930407643318176,0.142108425498009,-0.290086001157761,0.936981558799744,0.19471974670887,-0.374203741550446,0.924180865287781,0.076558917760849,-0.200453296303749,0.97970324754715,-5.32605590706225e-05,-0.192868068814278,0.98049783706665,0.0377606339752674, +-0.337856024503708,0.930407643318176,0.142108425498009,-0.374203741550446,0.924180865287781,0.076558917760849,-0.192868068814278,0.98049783706665,0.0377606339752674,-0.374203741550446,0.924180865287781,0.076558917760849,-0.388112843036652,0.921611845493317,-8.17474428913556e-05,-0.200453296303749,0.97970324754715,-5.32605590706225e-05,-0.499865412712097,0.784144759178162,0.367765814065933,-0.48283913731575,0.849932909011841,0.210904106497765,-0.412342667579651,0.868057727813721,0.276494562625885,-0.412342667579651,0.868057727813721,0.276494562625885,-0.48283913731575,0.849932909011841,0.210904106497765,-0.337856024503708,0.930407643318176,0.142108425498009,-0.48283913731575,0.849932909011841,0.210904106497765,-0.374203741550446,0.924180865287781,0.076558917760849,-0.337856024503708,0.930407643318176,0.142108425498009,-0.499865412712097,0.784144759178162,0.367765814065933,-0.595619082450867,0.747117578983307,0.295047760009766,-0.48283913731575,0.849932909011841,0.210904106497765,-0.537789881229401,0.83500063419342,0.116430401802063,-0.388112843036652,0.921611845493317,-8.17474428913556e-05,-0.374203741550446,0.924180865287781,0.076558917760849,-0.48283913731575,0.849932909011841,0.210904106497765,-0.537789881229401,0.83500063419342,0.116430401802063,-0.374203741550446,0.924180865287781,0.076558917760849,-0.595619082450867,0.747117578983307,0.295047760009766,-0.537789881229401,0.83500063419342,0.116430401802063,-0.48283913731575,0.849932909011841,0.210904106497765,-0.537789881229401,0.83500063419342,0.116430401802063,-0.558980107307434,0.829180598258972,0.000924909487366676,-0.388112843036652,0.921611845493317,-8.17474428913556e-05,-0.595619082450867,0.747117578983307,0.295047760009766,-0.675186991691589,0.718165159225464,0.16840897500515,-0.537789881229401,0.83500063419342,0.116430401802063,-0.675186991691589,0.718165159225464,0.16840897500515,-0.558980107307434,0.829180598258972,0.000924909487366676,-0.537789881229401,0.83500063419342,0.116430401802063,-0.675186991691589,0.718165159225464,0.16840897500515,-0.707000732421875,0.707198321819305,0.00452313618734479, +-0.558980107307434,0.829180598258972,0.000924909487366676,-0.415003061294556,0.783718287944794,-0.462123483419418,-0.409590780735016,0.81649512052536,-0.406904309988022,-0.33894607424736,0.876971781253815,-0.340640544891357,-0.415003061294556,0.783718287944794,-0.462123483419418,-0.33894607424736,0.876971781253815,-0.340640544891357,-0.278816163539886,0.868104159832001,-0.41067835688591,-0.271557867527008,0.746635377407074,-0.607282519340515,-0.415003061294556,0.783718287944794,-0.462123483419418,-0.278816163539886,0.868104159832001,-0.41067835688591,-0.278816163539886,0.868104159832001,-0.41067835688591,-0.33894607424736,0.876971781253815,-0.340640544891357,-0.240936830639839,0.940027475357056,-0.241449415683746,-0.271557867527008,0.746635377407074,-0.607282519340515,-0.278816163539886,0.868104159832001,-0.41067835688591,-0.210817128419876,0.849684417247772,-0.483314156532288,-0.150834590196609,0.71792733669281,-0.679580211639404,-0.271557867527008,0.746635377407074,-0.607282519340515,-0.210817128419876,0.849684417247772,-0.483314156532288,-0.278816163539886,0.868104159832001,-0.41067835688591,-0.240936830639839,0.940027475357056,-0.241449415683746,-0.195003554224968,0.937032163143158,-0.28973126411438,-0.210817128419876,0.849684417247772,-0.483314156532288,-0.278816163539886,0.868104159832001,-0.41067835688591,-0.195003554224968,0.937032163143158,-0.28973126411438,-0.195003554224968,0.937032163143158,-0.28973126411438,-0.240936830639839,0.940027475357056,-0.241449415683746,-0.131864070892334,0.982424437999725,-0.132114544510841,-0.150834590196609,0.71792733669281,-0.679580211639404,-0.210817128419876,0.849684417247772,-0.483314156532288,-0.115018151700497,0.834594070911407,-0.538724064826965,0.00385216274298728,0.70710152387619,-0.70710152387619,-0.150834590196609,0.71792733669281,-0.679580211639404,-0.115018151700497,0.834594070911407,-0.538724064826965,-0.195003554224968,0.937032163143158,-0.28973126411438,-0.131864070892334,0.982424437999725,-0.132114544510841,-0.105801247060299,0.981817841529846,-0.157607063651085, +-0.105801247060299,0.981817841529846,-0.157607063651085,-0.131864070892334,0.982424437999725,-0.132114544510841,-0.0070224879309535,0.999950170516968,-0.00708653219044209,-0.210817128419876,0.849684417247772,-0.483314156532288,-0.195003554224968,0.937032163143158,-0.28973126411438,-0.142902314662933,0.930211067199707,-0.338062286376953,-0.115018151700497,0.834594070911407,-0.538724064826965,-0.210817128419876,0.849684417247772,-0.483314156532288,-0.142902314662933,0.930211067199707,-0.338062286376953,-0.142902314662933,0.930211067199707,-0.338062286376953,-0.195003554224968,0.937032163143158,-0.28973126411438,-0.105801247060299,0.981817841529846,-0.157607063651085,0.00385216274298728,0.70710152387619,-0.70710152387619,-0.115018151700497,0.834594070911407,-0.538724064826965,0.000911436218302697,0.828751027584076,-0.55961674451828,0.156406134366989,0.718002736568451,-0.678239822387695,0.00385216274298728,0.70710152387619,-0.70710152387619,0.000911436218302697,0.828751027584076,-0.55961674451828,-0.105801247060299,0.981817841529846,-0.157607063651085,-0.0070224879309535,0.999950170516968,-0.00708653219044209,-0.0052922461181879,0.999954402446747,-0.00794249586760998,0.125149101018906,0.984240710735321,0.124931395053864,-0.0052922461181879,0.999954402446747,-0.00794249586760998,-0.0070224879309535,0.999950170516968,-0.00708653219044209,-0.142902314662933,0.930211067199707,-0.338062286376953,-0.105801247060299,0.981817841529846,-0.157607063651085,-0.0761002078652382,0.980396866798401,-0.181743949651718,-0.0761002078652382,0.980396866798401,-0.181743949651718,-0.105801247060299,0.981817841529846,-0.157607063651085,-0.0052922461181879,0.999954402446747,-0.00794249586760998,-0.115018151700497,0.834594070911407,-0.538724064826965,-0.142902314662933,0.930211067199707,-0.338062286376953,-0.0768646001815796,0.923822581768036,-0.37502509355545,0.000911436218302697,0.828751027584076,-0.55961674451828,-0.115018151700497,0.834594070911407,-0.538724064826965,-0.0768646001815796,0.923822581768036,-0.37502509355545,-0.0768646001815796,0.923822581768036,-0.37502509355545, +-0.142902314662933,0.930211067199707,-0.338062286376953,-0.0761002078652382,0.980396866798401,-0.181743949651718,0.156406134366989,0.718002736568451,-0.678239822387695,0.000911436218302697,0.828751027584076,-0.55961674451828,0.116548120975494,0.834598541259766,-0.538388073444366,0.314648985862732,0.74705046415329,-0.585586607456207,0.156406134366989,0.718002736568451,-0.678239822387695,0.116548120975494,0.834598541259766,-0.538388073444366,0.125149101018906,0.984240710735321,0.124931395053864,0.1005479991436,0.98357880115509,0.149876058101654,-0.0052922461181879,0.999954402446747,-0.00794249586760998,0.24169297516346,0.939920544624329,0.241109415888786,0.1005479991436,0.98357880115509,0.149876058101654,0.125149101018906,0.984240710735321,0.124931395053864,0.000911436218302697,0.828751027584076,-0.55961674451828,-0.0768646001815796,0.923822581768036,-0.37502509355545,-8.37287880131043e-05,0.921249151229858,-0.388973146677017,0.116548120975494,0.834598541259766,-0.538388073444366,0.000911436218302697,0.828751027584076,-0.55961674451828,-8.37287880131043e-05,0.921249151229858,-0.388973146677017,-0.0761002078652382,0.980396866798401,-0.181743949651718,-0.0052922461181879,0.999954402446747,-0.00794249586760998,-0.00325360312126577,0.999963402748108,-0.00791625306010246,0.1005479991436,0.98357880115509,0.149876058101654,-0.00325360312126577,0.999963402748108,-0.00791625306010246,-0.0052922461181879,0.999954402446747,-0.00794249586760998,-0.0768646001815796,0.923822581768036,-0.37502509355545,-0.0761002078652382,0.980396866798401,-0.181743949651718,-0.0404888838529587,0.978962421417236,-0.199982956051826,-8.37287880131043e-05,0.921249151229858,-0.388973146677017,-0.0768646001815796,0.923822581768036,-0.37502509355545,-0.0404888838529587,0.978962421417236,-0.199982956051826,-0.0404888838529587,0.978962421417236,-0.199982956051826,-0.0761002078652382,0.980396866798401,-0.181743949651718,-0.00325360312126577,0.999963402748108,-0.00791625306010246,0.314648985862732,0.74705046415329,-0.585586607456207,0.116548120975494,0.834598541259766,-0.538388073444366, +0.210887461900711,0.849685192108154,-0.483281880617142,0.386694520711899,0.78448212146759,-0.484824955463409,0.314648985862732,0.74705046415329,-0.585586607456207,0.210887461900711,0.849685192108154,-0.483281880617142,0.24169297516346,0.939920544624329,0.241109415888786,0.194719716906548,0.936981558799744,0.290086030960083,0.1005479991436,0.98357880115509,0.149876058101654,0.34098818898201,0.876783967018127,0.339082598686218,0.194719716906548,0.936981558799744,0.290086030960083,0.24169297516346,0.939920544624329,0.241109415888786,0.116548120975494,0.834598541259766,-0.538388073444366,-8.37287880131043e-05,0.921249151229858,-0.388973146677017,0.0768532603979111,0.923822700977325,-0.375027000904083,0.210887461900711,0.849685192108154,-0.483281880617142,0.116548120975494,0.834598541259766,-0.538388073444366,0.0768532603979111,0.923822700977325,-0.375027000904083,-8.37287880131043e-05,0.921249151229858,-0.388973146677017,-0.0404888838529587,0.978962421417236,-0.199982956051826,-0.00122290547005832,0.978347420692444,-0.20696559548378,0.0768532603979111,0.923822700977325,-0.375027000904083,-8.37287880131043e-05,0.921249151229858,-0.388973146677017,-0.00122290547005832,0.978347420692444,-0.20696559548378,-0.0404888838529587,0.978962421417236,-0.199982956051826,-0.00325360312126577,0.999963402748108,-0.00791625306010246,-0.00477197533473372,0.999965369701385,-0.00682432996109128,-0.00122290547005832,0.978347420692444,-0.20696559548378,-0.0404888838529587,0.978962421417236,-0.199982956051826,-0.00477197533473372,0.999965369701385,-0.00682432996109128,0.1005479991436,0.98357880115509,0.149876058101654,0.0727893859148026,0.98205578327179,0.173977375030518,-0.00325360312126577,0.999963402748108,-0.00791625306010246,0.194719716906548,0.936981558799744,0.290086030960083,0.0727893859148026,0.98205578327179,0.173977375030518,0.1005479991436,0.98357880115509,0.149876058101654,0.0727893859148026,0.98205578327179,0.173977375030518,-0.00477197533473372,0.999965369701385,-0.00682432996109128,-0.00325360312126577,0.999963402748108,-0.00791625306010246, +0.386694520711899,0.78448212146759,-0.484824955463409,0.210887461900711,0.849685192108154,-0.483281880617142,0.276791334152222,0.868089556694031,-0.412076413631439,0.40679869055748,0.816494882106781,-0.409696191549301,0.386694520711899,0.78448212146759,-0.484824955463409,0.276791334152222,0.868089556694031,-0.412076413631439,0.40679869055748,0.816494882106781,-0.409696191549301,0.276791334152222,0.868089556694031,-0.412076413631439,0.340641468763351,0.876972556114197,-0.338943421840668,0.210887461900711,0.849685192108154,-0.483281880617142,0.0768532603979111,0.923822700977325,-0.375027000904083,0.142586261034012,0.930210888385773,-0.338196158409119,0.276791334152222,0.868089556694031,-0.412076413631439,0.210887461900711,0.849685192108154,-0.483281880617142,0.142586261034012,0.930210888385773,-0.338196158409119,0.340641468763351,0.876972556114197,-0.338943421840668,0.276791334152222,0.868089556694031,-0.412076413631439,0.19498747587204,0.93703281879425,-0.289740324020386,0.276791334152222,0.868089556694031,-0.412076413631439,0.142586261034012,0.930210888385773,-0.338196158409119,0.19498747587204,0.93703281879425,-0.289740324020386,0.340641468763351,0.876972556114197,-0.338943421840668,0.19498747587204,0.93703281879425,-0.289740324020386,0.241448506712914,0.94002765417099,-0.240937009453773,0.0768532603979111,0.923822700977325,-0.375027000904083,-0.00122290547005832,0.978347420692444,-0.20696559548378,0.0414834283292294,0.978962361812592,-0.199779540300369,0.142586261034012,0.930210888385773,-0.338196158409119,0.0768532603979111,0.923822700977325,-0.375027000904083,0.0414834283292294,0.978962361812592,-0.199779540300369,-0.00122290547005832,0.978347420692444,-0.20696559548378,-0.00477197533473372,0.999965369701385,-0.00682432996109128,-2.52387198997894e-05,0.99997353553772,-0.00727108679711819,0.0414834283292294,0.978962361812592,-0.199779540300369,-0.00122290547005832,0.978347420692444,-0.20696559548378,-2.52387198997894e-05,0.99997353553772,-0.00727108679711819,0.0727893859148026,0.98205578327179,0.173977375030518, +0.037760604172945,0.980497777462006,0.192868068814278,-0.00477197533473372,0.999965369701385,-0.00682432996109128,0.037760604172945,0.980497777462006,0.192868068814278,-2.52387198997894e-05,0.99997353553772,-0.00727108679711819,-0.00477197533473372,0.999965369701385,-0.00682432996109128,0.241448506712914,0.94002765417099,-0.240937009453773,0.19498747587204,0.93703281879425,-0.289740324020386,0.105830632150173,0.981817603111267,-0.157588213682175,0.241448506712914,0.94002765417099,-0.240937009453773,0.105830632150173,0.981817603111267,-0.157588213682175,0.132114097476006,0.982424199581146,-0.131865799427032,0.19498747587204,0.93703281879425,-0.289740324020386,0.142586261034012,0.930210888385773,-0.338196158409119,0.0761055871844292,0.980396687984467,-0.181742131710052,0.142586261034012,0.930210888385773,-0.338196158409119,0.0414834283292294,0.978962361812592,-0.199779540300369,0.0761055871844292,0.980396687984467,-0.181742131710052,0.19498747587204,0.93703281879425,-0.289740324020386,0.0761055871844292,0.980396687984467,-0.181742131710052,0.105830632150173,0.981817603111267,-0.157588213682175,0.0414834283292294,0.978962361812592,-0.199779540300369,-2.52387198997894e-05,0.99997353553772,-0.00727108679711819,0.00476650940254331,0.999965310096741,-0.0068255034275353,0.0761055871844292,0.980396687984467,-0.181742131710052,0.0414834283292294,0.978962361812592,-0.199779540300369,0.00476650940254331,0.999965310096741,-0.0068255034275353,0.132114097476006,0.982424199581146,-0.131865799427032,0.105830632150173,0.981817603111267,-0.157588213682175,0.00529059022665024,0.999954402446747,-0.00794358272105455,0.132114097476006,0.982424199581146,-0.131865799427032,0.00529059022665024,0.999954402446747,-0.00794358272105455,0.0070865317247808,0.999950170516968,-0.0070224441587925,0.105830632150173,0.981817603111267,-0.157588213682175,0.0761055871844292,0.980396687984467,-0.181742131710052,0.00325660104863346,0.999963402748108,-0.00791496783494949,0.0761055871844292,0.980396687984467,-0.181742131710052,0.00476650940254331,0.999965310096741,-0.0068255034275353, +0.00325660104863346,0.999963402748108,-0.00791496783494949,0.105830632150173,0.981817603111267,-0.157588213682175,0.00325660104863346,0.999963402748108,-0.00791496783494949,0.00529059022665024,0.999954402446747,-0.00794358272105455,0.000948608736507595,0.979816615581512,0.199896082282066,0.00476650940254331,0.999965310096741,-0.0068255034275353,-2.52387198997894e-05,0.99997353553772,-0.00727108679711819,0.037760604172945,0.980497777462006,0.192868068814278,0.000948608736507595,0.979816615581512,0.199896082282066,-2.52387198997894e-05,0.99997353553772,-0.00727108679711819,0.142108529806137,0.930407583713531,0.337856292724609,0.037760604172945,0.980497777462006,0.192868068814278,0.0727893859148026,0.98205578327179,0.173977375030518,0.194719716906548,0.936981558799744,0.290086030960083,0.142108529806137,0.930407583713531,0.337856292724609,0.0727893859148026,0.98205578327179,0.173977375030518,-0.100508235394955,0.98357880115509,0.149902895092964,0.0070865317247808,0.999950170516968,-0.0070224441587925,0.00529059022665024,0.999954402446747,-0.00794358272105455,-0.100508235394955,0.98357880115509,0.149902895092964,-0.124930001795292,0.984240829944611,0.12514990568161,0.0070865317247808,0.999950170516968,-0.0070224441587925,-0.0728001073002815,0.982055842876434,0.173972859978676,0.00529059022665024,0.999954402446747,-0.00794358272105455,0.00325660104863346,0.999963402748108,-0.00791496783494949,-0.0728001073002815,0.982055842876434,0.173972859978676,-0.100508235394955,0.98357880115509,0.149902895092964,0.00529059022665024,0.999954402446747,-0.00794358272105455,-0.0390517674386501,0.980499148368835,0.19260410964489,0.00325660104863346,0.999963402748108,-0.00791496783494949,0.00476650940254331,0.999965310096741,-0.0068255034275353,0.000948608736507595,0.979816615581512,0.199896082282066,-0.0390517674386501,0.980499148368835,0.19260410964489,0.00476650940254331,0.999965310096741,-0.0068255034275353,-0.0390517674386501,0.980499148368835,0.19260410964489,-0.0728001073002815,0.982055842876434,0.173972859978676,0.00325660104863346,0.999963402748108,-0.00791496783494949, +0.0765589475631714,0.924180686473846,0.374203979969025,0.000948608736507595,0.979816615581512,0.199896082282066,0.037760604172945,0.980497777462006,0.192868068814278,0.142108529806137,0.930407583713531,0.337856292724609,0.0765589475631714,0.924180686473846,0.374203979969025,0.037760604172945,0.980497777462006,0.192868068814278,0.276494711637497,0.868057787418365,0.412342607975006,0.142108529806137,0.930407583713531,0.337856292724609,0.194719716906548,0.936981558799744,0.290086030960083,0.34098818898201,0.876783967018127,0.339082598686218,0.276494711637497,0.868057787418365,0.412342607975006,0.194719716906548,0.936981558799744,0.290086030960083,0.407544851303101,0.81607574224472,0.409789621829987,0.276494711637497,0.868057787418365,0.412342607975006,0.34098818898201,0.876783967018127,0.339082598686218,0.407544851303101,0.81607574224472,0.409789621829987,0.365005135536194,0.784098029136658,0.501957893371582,0.276494711637497,0.868057787418365,0.412342607975006,0.276494711637497,0.868057787418365,0.412342607975006,0.210903704166412,0.849932849407196,0.482839375734329,0.142108529806137,0.930407583713531,0.337856292724609,0.365005135536194,0.784098029136658,0.501957893371582,0.210903704166412,0.849932849407196,0.482839375734329,0.276494711637497,0.868057787418365,0.412342607975006,0.210903704166412,0.849932849407196,0.482839375734329,0.0765589475631714,0.924180686473846,0.374203979969025,0.142108529806137,0.930407583713531,0.337856292724609,0.365005135536194,0.784098029136658,0.501957893371582,0.293046593666077,0.747099637985229,0.596628785133362,0.210903704166412,0.849932849407196,0.482839375734329,0.293046593666077,0.747099637985229,0.596628785133362,0.116429872810841,0.835000574588776,0.537790060043335,0.210903704166412,0.849932849407196,0.482839375734329,0.210903704166412,0.849932849407196,0.482839375734329,0.116429872810841,0.835000574588776,0.537790060043335,0.0765589475631714,0.924180686473846,0.374203979969025,0.293046593666077,0.747099637985229,0.596628785133362,0.16378253698349,0.718146681785583,0.676343619823456, +0.116429872810841,0.835000574588776,0.537790060043335,0.0765589475631714,0.924180686473846,0.374203979969025,-8.18614644231275e-05,0.921611785888672,0.388113021850586,0.000948608736507595,0.979816615581512,0.199896082282066,0.116429872810841,0.835000574588776,0.537790060043335,-8.18614644231275e-05,0.921611785888672,0.388113021850586,0.0765589475631714,0.924180686473846,0.374203979969025,-8.18614644231275e-05,0.921611785888672,0.388113021850586,-0.0390517674386501,0.980499148368835,0.19260410964489,0.000948608736507595,0.979816615581512,0.199896082282066,0.16378253698349,0.718146681785583,0.676343619823456,0.000924748310353607,0.829180479049683,0.558980166912079,0.116429872810841,0.835000574588776,0.537790060043335,0.116429872810841,0.835000574588776,0.537790060043335,0.000924748310353607,0.829180479049683,0.558980166912079,-8.18614644231275e-05,0.921611785888672,0.388113021850586,0.16378253698349,0.718146681785583,0.676343619823456,-0.00226538046263158,0.707203805446625,0.707006216049194,0.000924748310353607,0.829180479049683,0.558980166912079,-8.18614644231275e-05,0.921611785888672,0.388113021850586,-0.0765290409326553,0.924180746078491,0.374210298061371,-0.0390517674386501,0.980499148368835,0.19260410964489,0.000924748310353607,0.829180479049683,0.558980166912079,-0.0765290409326553,0.924180746078491,0.374210298061371,-8.18614644231275e-05,0.921611785888672,0.388113021850586,-0.0765290409326553,0.924180746078491,0.374210298061371,-0.0728001073002815,0.982055842876434,0.173972859978676,-0.0390517674386501,0.980499148368835,0.19260410964489,-0.00226538046263158,0.707203805446625,0.707006216049194,-0.114901818335056,0.834996283054352,0.538125455379486,0.000924748310353607,0.829180479049683,0.558980166912079,0.000924748310353607,0.829180479049683,0.558980166912079,-0.114901818335056,0.834996283054352,0.538125455379486,-0.0765290409326553,0.924180746078491,0.374210298061371,-0.00226538046263158,0.707203805446625,0.707006216049194,-0.16621795296669,0.718158304691315,0.675736844539642,-0.114901818335056,0.834996283054352,0.538125455379486, +-0.0765290409326553,0.924180746078491,0.374210298061371,-0.142303258180618,0.930408000946045,0.337773054838181,-0.0728001073002815,0.982055842876434,0.173972859978676,-0.114901818335056,0.834996283054352,0.538125455379486,-0.142303258180618,0.930408000946045,0.337773054838181,-0.0765290409326553,0.924180746078491,0.374210298061371,-0.142303258180618,0.930408000946045,0.337773054838181,-0.100508235394955,0.98357880115509,0.149902895092964,-0.0728001073002815,0.982055842876434,0.173972859978676,-0.16621795296669,0.718158304691315,0.675736844539642,-0.210739105939865,0.849931836128235,0.48291289806366,-0.114901818335056,0.834996283054352,0.538125455379486,-0.114901818335056,0.834996283054352,0.538125455379486,-0.210739105939865,0.849931836128235,0.48291289806366,-0.142303258180618,0.930408000946045,0.337773054838181,-0.16621795296669,0.718158304691315,0.675736844539642,-0.293526589870453,0.747104048728943,0.596387147903442,-0.210739105939865,0.849931836128235,0.48291289806366,-0.142303258180618,0.930408000946045,0.337773054838181,-0.194891482591629,0.936981916427612,0.289969474077225,-0.100508235394955,0.98357880115509,0.149902895092964,-0.210739105939865,0.849931836128235,0.48291289806366,-0.194891482591629,0.936981916427612,0.289969474077225,-0.142303258180618,0.930408000946045,0.337773054838181,-0.194891482591629,0.936981916427612,0.289969474077225,-0.124930001795292,0.984240829944611,0.12514990568161,-0.100508235394955,0.98357880115509,0.149902895092964,-0.194891482591629,0.936981916427612,0.289969474077225,-0.241105809807777,0.939920485019684,0.241696998476982,-0.124930001795292,0.984240829944611,0.12514990568161,-0.293526589870453,0.747104048728943,0.596387147903442,-0.278875797986984,0.868075728416443,0.410698086023331,-0.210739105939865,0.849931836128235,0.48291289806366,-0.210739105939865,0.849931836128235,0.48291289806366,-0.278875797986984,0.868075728416443,0.410698086023331,-0.194891482591629,0.936981916427612,0.289969474077225,-0.278875797986984,0.868075728416443,0.410698086023331,-0.241105809807777,0.939920485019684,0.241696998476982, +-0.194891482591629,0.936981916427612,0.289969474077225,-0.293526589870453,0.747104048728943,0.596387147903442,-0.368808001279831,0.784159958362579,0.499073028564453,-0.278875797986984,0.868075728416443,0.410698086023331,-0.278875797986984,0.868075728416443,0.410698086023331,-0.339082986116409,0.876783609390259,0.340988725423813,-0.241105809807777,0.939920485019684,0.241696998476982,-0.368808001279831,0.784159958362579,0.499073028564453,-0.339082986116409,0.876783609390259,0.340988725423813,-0.278875797986984,0.868075728416443,0.410698086023331,-0.368808001279831,0.784159958362579,0.499073028564453,-0.409958243370056,0.816075444221497,0.407375931739807,-0.339082986116409,0.876783609390259,0.340988725423813 + } + BinormalsW: *2304 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *6912 { + a: -0.445127010345459,0.00154880178160965,0.895466089248657,-0.752622604370117,0.019504901021719,0.658163189888,0.077115036547184,-0.0160083658993244,0.996893703937531,-0.750837385654449,0.0392978601157665,0.659317016601562,-0.752622604370117,0.019504901021719,0.658163189888,-0.445127010345459,0.00154880178160965,0.895466089248657,-0.567334949970245,0.0149608524516225,0.823351204395294,-0.750837385654449,0.0392978601157665,0.659317016601562,-0.445127010345459,0.00154880178160965,0.895466089248657,-0.567334949970245,0.0149608524516225,0.823351204395294,-0.445127010345459,0.00154880178160965,0.895466089248657,-0.221289619803429,-0.0659833922982216,0.972973346710205,-0.221289619803429,-0.0659833922982216,0.972973346710205,-0.445127010345459,0.00154880178160965,0.895466089248657,0.105171352624893,-0.0444057695567608,0.993462204933167,-0.445127010345459,0.00154880178160965,0.895466089248657,0.152602046728134,-0.0316787660121918,0.987779855728149,0.105171352624893,-0.0444057695567608,0.993462204933167,-0.752622604370117,0.019504901021719,0.658163189888,0.243857055902481,0,0.969811201095581,0.152602046728134,-0.0316787660121918,0.987779855728149,0.74947714805603,-0.0181080363690853,0.661782503128052,0.105171352624893,-0.0444057695567608,0.993462204933167,0.152602046728134,-0.0316787660121918,0.987779855728149,-0.750837385654449,0.0392978601157665,0.659317016601562,-0.913918256759644,0.0190984252840281,0.405448734760284,-0.752622604370117,0.019504901021719,0.658163189888,-0.913918256759644,0.0190984252840281,0.405448734760284,-0.977167248725891,0.0431864410638809,-0.208036407828331,-0.752622604370117,0.019504901021719,0.658163189888,-0.752622604370117,0.019504901021719,0.658163189888,-0.977167248725891,0.0431864410638809,-0.208036407828331,-0.961111962795258,0,-0.276159107685089,-0.707106828689575,7.25542435020543e-08,0.707106709480286,-0.750837385654449,0.0392978601157665,0.659317016601562,-0.567334949970245,0.0149608524516225,0.823351204395294,-0.830038547515869,-0.00537402927875519,0.557680130004883, +-0.913918256759644,0.0190984252840281,0.405448734760284,-0.750837385654449,0.0392978601157665,0.659317016601562,-0.707106828689575,7.25542435020543e-08,0.707106709480286,-0.830038547515869,-0.00537402927875519,0.557680130004883,-0.750837385654449,0.0392978601157665,0.659317016601562,-0.436146229505539,-0.0254502184689045,0.899515867233276,-0.567334949970245,0.0149608524516225,0.823351204395294,-0.221289619803429,-0.0659833922982216,0.972973346710205,-0.633309960365295,0.0341849103569984,0.773142874240875,-0.567334949970245,0.0149608524516225,0.823351204395294,-0.436146229505539,-0.0254502184689045,0.899515867233276,-0.633309960365295,0.0341849103569984,0.773142874240875,-0.707106828689575,7.25542435020543e-08,0.707106709480286,-0.567334949970245,0.0149608524516225,0.823351204395294,-0.706330001354218,-0.00155105604790151,0.707880973815918,-0.707106828689575,7.25542435020543e-08,0.707106709480286,-0.633309960365295,0.0341849103569984,0.773142874240875,-0.706330001354218,-0.00155105604790151,0.707880973815918,-0.772563457489014,-0.0352805256843567,0.633956551551819,-0.707106828689575,7.25542435020543e-08,0.707106709480286,-0.772563457489014,-0.0352805256843567,0.633956551551819,-0.830038547515869,-0.00537402927875519,0.557680130004883,-0.707106828689575,7.25542435020543e-08,0.707106709480286,-0.436146229505539,-0.0254502184689045,0.899515867233276,-0.221289619803429,-0.0659833922982216,0.972973346710205,-0.233452081680298,-0.0137311182916164,0.972271382808685,-0.772563457489014,-0.0352805256843567,0.633956551551819,-0.899949133396149,0.0266384053975344,0.435180395841599,-0.830038547515869,-0.00537402927875519,0.557680130004883,-0.233452081680298,-0.0137311182916164,0.972271382808685,-0.221289619803429,-0.0659833922982216,0.972973346710205,0.0205806475132704,-0.0138971470296383,0.999691605567932,-0.233452081680298,-0.0137311182916164,0.972271382808685,0.0205806475132704,-0.0138971470296383,0.999691605567932,0.00125288509298116,-0.0012528853258118,0.999998450279236,-0.221289619803429,-0.0659833922982216,0.972973346710205, +0.105171352624893,-0.0444057695567608,0.993462204933167,0.0205806475132704,-0.0138971470296383,0.999691605567932,-0.899949133396149,0.0266384053975344,0.435180395841599,-0.966998636722565,0.0446882173418999,0.250831872224808,-0.830038547515869,-0.00537402927875519,0.557680130004883,-0.830038547515869,-0.00537402927875519,0.557680130004883,-0.966998636722565,0.0446882173418999,0.250831872224808,-0.913918256759644,0.0190984252840281,0.405448734760284,-0.899949133396149,0.0266384053975344,0.435180395841599,-0.972596287727356,0.0152670107781887,0.231998756527901,-0.966998636722565,0.0446882173418999,0.250831872224808,0.279846757650375,0.0234690550714731,0.959757804870605,0.00125288509298116,-0.0012528853258118,0.999998450279236,0.0205806475132704,-0.0138971470296383,0.999691605567932,0.279846757650375,0.0234690550714731,0.959757804870605,0.234416961669922,0.0127107128500938,0.972053050994873,0.00125288509298116,-0.0012528853258118,0.999998450279236,0.435455530881882,0.00353390770033002,0.900203287601471,0.0205806475132704,-0.0138971470296383,0.999691605567932,0.105171352624893,-0.0444057695567608,0.993462204933167,0.435455530881882,0.00353390770033002,0.900203287601471,0.279846757650375,0.0234690550714731,0.959757804870605,0.0205806475132704,-0.0138971470296383,0.999691605567932,0.74947714805603,-0.0181080363690853,0.661782503128052,0.435455530881882,0.00353390770033002,0.900203287601471,0.105171352624893,-0.0444057695567608,0.993462204933167,-0.966998636722565,0.0446882173418999,0.250831872224808,-0.994821012020111,0.03953617811203,-0.0936381295323372,-0.913918256759644,0.0190984252840281,0.405448734760284,-0.913918256759644,0.0190984252840281,0.405448734760284,-0.994821012020111,0.03953617811203,-0.0936381295323372,-0.977167248725891,0.0431864410638809,-0.208036407828331,-0.972596287727356,0.0152670107781887,0.231998756527901,-0.999715745449066,0.0133417611941695,-0.0197581611573696,-0.966998636722565,0.0446882173418999,0.250831872224808,-0.966998636722565,0.0446882173418999,0.250831872224808,-0.999715745449066,0.0133417611941695,-0.0197581611573696, +-0.994821012020111,0.03953617811203,-0.0936381295323372,-0.972596287727356,0.0152670107781887,0.231998756527901,-0.999992609024048,0.00272389035671949,-0.00272389058955014,-0.999715745449066,0.0133417611941695,-0.0197581611573696,0.552352011203766,-0.000136680682771839,0.833610951900482,0.234416961669922,0.0127107128500938,0.972053050994873,0.279846757650375,0.0234690550714731,0.959757804870605,0.552352011203766,-0.000136680682771839,0.833610951900482,0.463165163993835,-0.00838529784232378,0.886232316493988,0.234416961669922,0.0127107128500938,0.972053050994873,0.713684022426605,-0.00568479252979159,0.700444757938385,0.279846757650375,0.0234690550714731,0.959757804870605,0.435455530881882,0.00353390770033002,0.900203287601471,0.713684022426605,-0.00568479252979159,0.700444757938385,0.552352011203766,-0.000136680682771839,0.833610951900482,0.279846757650375,0.0234690550714731,0.959757804870605,-0.999992609024048,0.00272389035671949,-0.00272389058955014,-0.963683426380157,-0.0345050394535065,-0.264808624982834,-0.999715745449066,0.0133417611941695,-0.0197581611573696,-0.999992609024048,0.00272389035671949,-0.00272389058955014,-0.971715927124023,-0.0111520681530237,-0.235889345407486,-0.963683426380157,-0.0345050394535065,-0.264808624982834,-0.999715745449066,0.0133417611941695,-0.0197581611573696,-0.91166889667511,-0.0164500214159489,-0.41059622168541,-0.994821012020111,0.03953617811203,-0.0936381295323372,-0.999715745449066,0.0133417611941695,-0.0197581611573696,-0.963683426380157,-0.0345050394535065,-0.264808624982834,-0.91166889667511,-0.0164500214159489,-0.41059622168541,-0.994821012020111,0.03953617811203,-0.0936381295323372,-0.674006700515747,0.0133390193805099,-0.738604784011841,-0.977167248725891,0.0431864410638809,-0.208036407828331,-0.994821012020111,0.03953617811203,-0.0936381295323372,-0.91166889667511,-0.0164500214159489,-0.41059622168541,-0.674006700515747,0.0133390193805099,-0.738604784011841,0.70710688829422,-1.76942378971034e-07,0.707106649875641,0.463165163993835,-0.00838529784232378,0.886232316493988, +0.552352011203766,-0.000136680682771839,0.833610951900482,0.70710688829422,-1.76942378971034e-07,0.707106649875641,0.617437422275543,-0.00789939519017935,0.786580324172974,0.463165163993835,-0.00838529784232378,0.886232316493988,-0.971715927124023,-0.0111520681530237,-0.235889345407486,-0.838241338729858,-0.00678014475852251,-0.545257270336151,-0.963683426380157,-0.0345050394535065,-0.264808624982834,-0.971715927124023,-0.0111520681530237,-0.235889345407486,-0.885803580284119,0.00940424576401711,-0.463965117931366,-0.838241338729858,-0.00678014475852251,-0.545257270336151,-0.977167248725891,0.0431864410638809,-0.208036407828331,-0.674006700515747,0.0133390193805099,-0.738604784011841,-0.128774300217628,-0.026732387021184,-0.991313576698303,-0.977167248725891,0.0431864410638809,-0.208036407828331,-0.128774300217628,-0.026732387021184,-0.991313576698303,-0.669662117958069,0,-0.742665886878967,-0.674006700515747,0.0133390193805099,-0.738604784011841,-0.0802393555641174,-0.0338789485394955,-0.996199727058411,-0.128774300217628,-0.026732387021184,-0.991313576698303,-0.674006700515747,0.0133390193805099,-0.738604784011841,-0.414035767316818,0.0146755585446954,-0.910142302513123,-0.0802393555641174,-0.0338789485394955,-0.996199727058411,-0.91166889667511,-0.0164500214159489,-0.41059622168541,-0.414035767316818,0.0146755585446954,-0.910142302513123,-0.674006700515747,0.0133390193805099,-0.738604784011841,-0.414035767316818,0.0146755585446954,-0.910142302513123,-0.0253917332738638,-0.0171458479017019,-0.999530553817749,-0.0802393555641174,-0.0338789485394955,-0.996199727058411,-0.963683426380157,-0.0345050394535065,-0.264808624982834,-0.703650951385498,0.00295793544501066,-0.710539638996124,-0.91166889667511,-0.0164500214159489,-0.41059622168541,-0.91166889667511,-0.0164500214159489,-0.41059622168541,-0.703650951385498,0.00295793544501066,-0.710539638996124,-0.414035767316818,0.0146755585446954,-0.910142302513123,-0.963683426380157,-0.0345050394535065,-0.264808624982834,-0.838241338729858,-0.00678014475852251,-0.545257270336151, +-0.703650951385498,0.00295793544501066,-0.710539638996124,-0.414035767316818,0.0146755585446954,-0.910142302513123,-0.263931661844254,0.0351460911333561,-0.963900864124298,-0.0253917332738638,-0.0171458479017019,-0.999530553817749,-0.703650951385498,0.00295793544501066,-0.710539638996124,-0.263931661844254,0.0351460911333561,-0.963900864124298,-0.414035767316818,0.0146755585446954,-0.910142302513123,-0.263931661844254,0.0351460911333561,-0.963900864124298,-0.00125296192709357,-0.00125296192709357,-0.999998450279236,-0.0253917332738638,-0.0171458479017019,-0.999530553817749,-0.263931661844254,0.0351460911333561,-0.963900864124298,-0.234416931867599,0.0127107379958034,-0.972053050994873,-0.00125296192709357,-0.00125296192709357,-0.999998450279236,-0.703650951385498,0.00295793544501066,-0.710539638996124,-0.545257329940796,0.00678011355921626,-0.838241279125214,-0.263931661844254,0.0351460911333561,-0.963900864124298,-0.545257329940796,0.00678011355921626,-0.838241279125214,-0.234416931867599,0.0127107379958034,-0.972053050994873,-0.263931661844254,0.0351460911333561,-0.963900864124298,-0.838241338729858,-0.00678014475852251,-0.545257270336151,-0.545257329940796,0.00678011355921626,-0.838241279125214,-0.703650951385498,0.00295793544501066,-0.710539638996124,-0.545257329940796,0.00678011355921626,-0.838241279125214,-0.463165253400803,-0.00838539842516184,-0.886232256889343,-0.234416931867599,0.0127107379958034,-0.972053050994873,-0.838241338729858,-0.00678014475852251,-0.545257270336151,-0.707106828689575,-4.72324330758056e-08,-0.70710676908493,-0.545257329940796,0.00678011355921626,-0.838241279125214,-0.707106828689575,-4.72324330758056e-08,-0.70710676908493,-0.463165253400803,-0.00838539842516184,-0.886232256889343,-0.545257329940796,0.00678011355921626,-0.838241279125214,-0.885803580284119,0.00940424576401711,-0.463965117931366,-0.707106828689575,-4.72324330758056e-08,-0.70710676908493,-0.838241338729858,-0.00678014475852251,-0.545257270336151,-0.707106828689575,-4.72324330758056e-08,-0.70710676908493,-0.617437779903412,-0.00789995584636927,-0.786580085754395, +-0.463165253400803,-0.00838539842516184,-0.886232256889343,-0.885803580284119,0.00940424576401711,-0.463965117931366,-0.787114143371582,0.00681642955169082,-0.616769731044769,-0.707106828689575,-4.72324330758056e-08,-0.70710676908493,-0.787114143371582,0.00681642955169082,-0.616769731044769,-0.617437779903412,-0.00789995584636927,-0.786580085754395,-0.707106828689575,-4.72324330758056e-08,-0.70710676908493,-0.787114143371582,0.00681642955169082,-0.616769731044769,-0.707941770553589,-0.00167284219060093,-0.706268846988678,-0.617437779903412,-0.00789995584636927,-0.786580085754395,0.995005011558533,0.0202901400625706,0.0977410450577736,0.152602046728134,-0.0316787660121918,0.987779855728149,0.746422529220581,0,0.665472328662872,0.709729075431824,0.00108499499037862,-0.704473912715912,0.995005011558533,0.0202901400625706,0.0977410450577736,0.984560370445251,0,0.175045326352119,0.909136116504669,0.0135155096650124,-0.416279792785645,0.995005011558533,0.0202901400625706,0.0977410450577736,0.709729075431824,0.00108499499037862,-0.704473912715912,0.909136116504669,0.0135155096650124,-0.416279792785645,0.99638819694519,0.033029492944479,0.0782275944948196,0.995005011558533,0.0202901400625706,0.0977410450577736,0.99638819694519,0.033029492944479,0.0782275944948196,0.74947714805603,-0.0181080363690853,0.661782503128052,0.995005011558533,0.0202901400625706,0.0977410450577736,0.995005011558533,0.0202901400625706,0.0977410450577736,0.74947714805603,-0.0181080363690853,0.661782503128052,0.231612250208855,-0.0480805523693562,0.971619307994843,0.99638819694519,0.033029492944479,0.0782275944948196,0.913928806781769,-0.0191109385341406,0.405424356460571,0.74947714805603,-0.0181080363690853,0.661782503128052,0.913928806781769,-0.0191109385341406,0.405424356460571,0.435455530881882,0.00353390770033002,0.900203287601471,0.74947714805603,-0.0181080363690853,0.661782503128052,0.913928806781769,-0.0191109385341406,0.405424356460571,0.713684022426605,-0.00568479252979159,0.700444757938385,0.435455530881882,0.00353390770033002,0.900203287601471, +0.999839127063751,0.0100378412753344,0.0148653006181121,0.913928806781769,-0.0191109385341406,0.405424356460571,0.99638819694519,0.033029492944479,0.0782275944948196,0.960138559341431,-0.0244984515011311,0.278448879718781,0.713684022426605,-0.00568479252979159,0.700444757938385,0.913928806781769,-0.0191109385341406,0.405424356460571,0.999839127063751,0.0100378412753344,0.0148653006181121,0.960138559341431,-0.0244984515011311,0.278448879718781,0.913928806781769,-0.0191109385341406,0.405424356460571,0.970370709896088,0.0561310015618801,-0.235010653734207,0.99638819694519,0.033029492944479,0.0782275944948196,0.909136116504669,0.0135155096650124,-0.416279792785645,0.970370709896088,0.0561310015618801,-0.235010653734207,0.999839127063751,0.0100378412753344,0.0148653006181121,0.99638819694519,0.033029492944479,0.0782275944948196,0.960138559341431,-0.0244984515011311,0.278448879718781,0.833611011505127,0.000136601534904912,0.552351951599121,0.713684022426605,-0.00568479252979159,0.700444757938385,0.833611011505127,0.000136601534904912,0.552351951599121,0.552352011203766,-0.000136680682771839,0.833610951900482,0.713684022426605,-0.00568479252979159,0.700444757938385,0.833611011505127,0.000136601534904912,0.552351951599121,0.70710688829422,-1.76942378971034e-07,0.707106649875641,0.552352011203766,-0.000136680682771839,0.833610951900482,0.999992609024048,0.00272388802841306,0.00272388732992113,0.960138559341431,-0.0244984515011311,0.278448879718781,0.999839127063751,0.0100378412753344,0.0148653006181121,0.972596228122711,0.015266677364707,-0.231998816132545,0.999992609024048,0.00272388802841306,0.00272388732992113,0.999839127063751,0.0100378412753344,0.0148653006181121,0.972596228122711,0.015266677364707,-0.231998816132545,0.999839127063751,0.0100378412753344,0.0148653006181121,0.970370709896088,0.0561310015618801,-0.235010653734207,0.999992609024048,0.00272388802841306,0.00272388732992113,0.971715927124023,-0.0111518912017345,0.23588927090168,0.960138559341431,-0.0244984515011311,0.278448879718781,0.971715927124023,-0.0111518912017345,0.23588927090168, +0.833611011505127,0.000136601534904912,0.552351951599121,0.960138559341431,-0.0244984515011311,0.278448879718781,0.971715927124023,-0.0111518912017345,0.23588927090168,0.885803639888763,0.0094043891876936,0.463964909315109,0.833611011505127,0.000136601534904912,0.552351951599121,0.885803639888763,0.0094043891876936,0.463964909315109,0.70710688829422,-1.76942378971034e-07,0.707106649875641,0.833611011505127,0.000136601534904912,0.552351951599121,0.885803639888763,0.0094043891876936,0.463964909315109,0.787114262580872,0.00681618368253112,0.616769552230835,0.70710688829422,-1.76942378971034e-07,0.707106649875641,0.787114262580872,0.00681618368253112,0.616769552230835,0.617437422275543,-0.00789939519017935,0.786580324172974,0.70710688829422,-1.76942378971034e-07,0.707106649875641,0.787114262580872,0.00681618368253112,0.616769552230835,0.707942187786102,-0.00167369248811156,0.706268429756165,0.617437422275543,-0.00789939519017935,0.786580324172974,0.899949252605438,0.0266384296119213,-0.435180068016052,0.972596228122711,0.015266677364707,-0.231998816132545,0.970370709896088,0.0561310015618801,-0.235010653734207,0.899949252605438,0.0266384296119213,-0.435180068016052,0.970370709896088,0.0561310015618801,-0.235010653734207,0.84184855222702,0.0122748147696257,-0.539574205875397,0.772563338279724,-0.0352808348834515,-0.633956789970398,0.899949252605438,0.0266384296119213,-0.435180068016052,0.84184855222702,0.0122748147696257,-0.539574205875397,0.84184855222702,0.0122748147696257,-0.539574205875397,0.970370709896088,0.0561310015618801,-0.235010653734207,0.909136116504669,0.0135155096650124,-0.416279792785645,0.772563338279724,-0.0352808348834515,-0.633956789970398,0.84184855222702,0.0122748147696257,-0.539574205875397,0.707106590270996,-2.51554240549012e-07,-0.707106947898865,0.706329703330994,-0.00155158818233758,-0.707881331443787,0.772563338279724,-0.0352808348834515,-0.633956789970398,0.707106590270996,-2.51554240549012e-07,-0.707106947898865,0.706329703330994,-0.00155158818233758,-0.707881331443787,0.707106590270996,-2.51554240549012e-07,-0.707106947898865, +0.633310914039612,0.0341848060488701,-0.773142099380493,0.84184855222702,0.0122748147696257,-0.539574205875397,0.909136116504669,0.0135155096650124,-0.416279792785645,0.690544009208679,-0.0140027077868581,-0.723154783248901,0.707106590270996,-2.51554240549012e-07,-0.707106947898865,0.84184855222702,0.0122748147696257,-0.539574205875397,0.690544009208679,-0.0140027077868581,-0.723154783248901,0.690544009208679,-0.0140027077868581,-0.723154783248901,0.909136116504669,0.0135155096650124,-0.416279792785645,0.709729075431824,0.00108499499037862,-0.704473912715912,0.633310914039612,0.0341848060488701,-0.773142099380493,0.707106590270996,-2.51554240549012e-07,-0.707106947898865,0.534934103488922,-0.0167314745485783,-0.844728112220764,0.707106590270996,-2.51554240549012e-07,-0.707106947898865,0.690544009208679,-0.0140027077868581,-0.723154783248901,0.534934103488922,-0.0167314745485783,-0.844728112220764,0.633310914039612,0.0341848060488701,-0.773142099380493,0.534934103488922,-0.0167314745485783,-0.844728112220764,0.436146825551987,-0.0254504140466452,-0.899515569210052,0.690544009208679,-0.0140027077868581,-0.723154783248901,0.709729075431824,0.00108499499037862,-0.704473912715912,0.4125155210495,-0.0154603999108076,-0.910819351673126,0.534934103488922,-0.0167314745485783,-0.844728112220764,0.690544009208679,-0.0140027077868581,-0.723154783248901,0.4125155210495,-0.0154603999108076,-0.910819351673126,0.436146825551987,-0.0254504140466452,-0.899515569210052,0.534934103488922,-0.0167314745485783,-0.844728112220764,0.254673361778259,-0.0418964475393295,-0.966119110584259,0.534934103488922,-0.0167314745485783,-0.844728112220764,0.4125155210495,-0.0154603999108076,-0.910819351673126,0.254673361778259,-0.0418964475393295,-0.966119110584259,0.436146825551987,-0.0254504140466452,-0.899515569210052,0.254673361778259,-0.0418964475393295,-0.966119110584259,0.233452007174492,-0.0137306163087487,-0.972271382808685,0.4125155210495,-0.0154603999108076,-0.910819351673126,0.709729075431824,0.00108499499037862,-0.704473912715912,-0.128774300217628,-0.026732387021184,-0.991313576698303, +0.709729075431824,0.00108499499037862,-0.704473912715912,-0.158937335014343,0,-0.987288653850555,-0.128774300217628,-0.026732387021184,-0.991313576698303,0.4125155210495,-0.0154603999108076,-0.910819351673126,-0.128774300217628,-0.026732387021184,-0.991313576698303,-0.0802393555641174,-0.0338789485394955,-0.996199727058411,0.254673361778259,-0.0418964475393295,-0.966119110584259,0.4125155210495,-0.0154603999108076,-0.910819351673126,-0.0802393555641174,-0.0338789485394955,-0.996199727058411,0.254673361778259,-0.0418964475393295,-0.966119110584259,-0.0802393555641174,-0.0338789485394955,-0.996199727058411,-0.0253917332738638,-0.0171458479017019,-0.999530553817749,0.233452007174492,-0.0137306163087487,-0.972271382808685,0.254673361778259,-0.0418964475393295,-0.966119110584259,-0.0253917332738638,-0.0171458479017019,-0.999530553817749,0.233452007174492,-0.0137306163087487,-0.972271382808685,-0.0253917332738638,-0.0171458479017019,-0.999530553817749,-0.00125296192709357,-0.00125296192709357,-0.999998450279236,-0.709402918815613,-0.000944562256336212,0.704802513122559,-0.982259750366211,0,-0.187525287270546,-0.992294311523438,-0.0249597616493702,-0.121363051235676,-0.915793120861053,-0.0213812049478292,0.401080727577209,-0.709402918815613,-0.000944562256336212,0.704802513122559,-0.992294311523438,-0.0249597616493702,-0.121363051235676,-0.707106828689575,-1.76961716391588e-08,0.70710676908493,-0.709402918815613,-0.000944562256336212,0.704802513122559,-0.915793120861053,-0.0213812049478292,0.401080727577209,-0.707106828689575,-1.76961716391588e-08,0.70710676908493,-0.401082009077072,0.0213807336986065,0.91579258441925,-0.709402918815613,-0.000944562256336212,0.704802513122559,-0.401082009077072,0.0213807336986065,0.91579258441925,0.138908892869949,0.0285683125257492,0.989893019199371,-0.709402918815613,-0.000944562256336212,0.704802513122559,-0.709402918815613,-0.000944562256336212,0.704802513122559,0.138908892869949,0.0285683125257492,0.989893019199371,0.208633244037628,0,0.977993965148926,-0.915793120861053,-0.0213812049478292,0.401080727577209, +-0.992294311523438,-0.0249597616493702,-0.121363051235676,-0.996957242488861,-0.0302714053541422,-0.0718327239155769,-0.820799767971039,0.0181111227720976,0.570928812026978,-0.707106828689575,-1.76961716391588e-08,0.70710676908493,-0.915793120861053,-0.0213812049478292,0.401080727577209,-0.968663156032562,-0.0501272454857826,0.243267178535461,-0.915793120861053,-0.0213812049478292,0.401080727577209,-0.996957242488861,-0.0302714053541422,-0.0718327239155769,-0.820799767971039,0.0181111227720976,0.570928812026978,-0.915793120861053,-0.0213812049478292,0.401080727577209,-0.968663156032562,-0.0501272454857826,0.243267178535461,-0.570928990840912,-0.0181112810969353,0.820799648761749,-0.401082009077072,0.0213807336986065,0.91579258441925,-0.707106828689575,-1.76961716391588e-08,0.70710676908493,-0.70710676908493,4.928982022534e-08,0.707106828689575,-0.707106828689575,-1.76961716391588e-08,0.70710676908493,-0.820799767971039,0.0181111227720976,0.570928812026978,-0.70710676908493,4.928982022534e-08,0.707106828689575,-0.570928990840912,-0.0181112810969353,0.820799648761749,-0.707106828689575,-1.76961716391588e-08,0.70710676908493,-0.893069744110107,-0.00892823934555054,0.449829667806625,-0.820799767971039,0.0181111227720976,0.570928812026978,-0.968663156032562,-0.0501272454857826,0.243267178535461,-0.797510981559753,-0.0148527752608061,0.60312157869339,-0.820799767971039,0.0181111227720976,0.570928812026978,-0.893069744110107,-0.00892823934555054,0.449829667806625,-0.797510981559753,-0.0148527752608061,0.60312157869339,-0.70710676908493,4.928982022534e-08,0.707106828689575,-0.820799767971039,0.0181111227720976,0.570928812026978,-0.707754552364349,-0.00129534676671028,0.706457197666168,-0.70710676908493,4.928982022534e-08,0.707106828689575,-0.797510981559753,-0.0148527752608061,0.60312157869339,-0.707754552364349,-0.00129534676671028,0.706457197666168,-0.603753387928009,0.013865071348846,0.797050535678864,-0.70710676908493,4.928982022534e-08,0.707106828689575,-0.603753387928009,0.013865071348846,0.797050535678864,-0.570928990840912,-0.0181112810969353,0.820799648761749, +-0.70710676908493,4.928982022534e-08,0.707106828689575,-0.893069744110107,-0.00892823934555054,0.449829667806625,-0.968663156032562,-0.0501272454857826,0.243267178535461,-0.970513582229614,-0.00561568280681968,0.240981131792068,-0.603753387928009,0.013865071348846,0.797050535678864,-0.448829829692841,0.0101794609799981,0.893559277057648,-0.570928990840912,-0.0181112810969353,0.820799648761749,-0.970513582229614,-0.00561568280681968,0.240981131792068,-0.968663156032562,-0.0501272454857826,0.243267178535461,-0.999958992004395,-0.00506561575457454,-0.00750599429011345,-0.968663156032562,-0.0501272454857826,0.243267178535461,-0.996957242488861,-0.0302714053541422,-0.0718327239155769,-0.999958992004395,-0.00506561575457454,-0.00750599429011345,-0.970513582229614,-0.00561568280681968,0.240981131792068,-0.999958992004395,-0.00506561575457454,-0.00750599429011345,-0.999997437000275,-0.00160208973102272,-0.00160164188127965,-0.448829829692841,0.0101794609799981,0.893559277057648,-0.243267297744751,0.0501272901892662,0.968663156032562,-0.570928990840912,-0.0181112810969353,0.820799648761749,-0.570928990840912,-0.0181112810969353,0.820799648761749,-0.243267297744751,0.0501272901892662,0.968663156032562,-0.401082009077072,0.0213807336986065,0.91579258441925,-0.448829829692841,0.0101794609799981,0.893559277057648,-0.239474147558212,0.0072153196670115,0.970875918865204,-0.243267297744751,0.0501272901892662,0.968663156032562,-0.947889268398285,-0.00534534081816673,-0.318555027246475,-0.999997437000275,-0.00160208973102272,-0.00160164188127965,-0.999958992004395,-0.00506561575457454,-0.00750599429011345,-0.947889268398285,-0.00534534081816673,-0.318555027246475,-0.97009938955307,0.00381323136389256,-0.242677941918373,-0.999997437000275,-0.00160208973102272,-0.00160164188127965,-0.903758943080902,0.00750822573900223,-0.427975922822952,-0.999958992004395,-0.00506561575457454,-0.00750599429011345,-0.996957242488861,-0.0302714053541422,-0.0718327239155769,-0.903758943080902,0.00750822573900223,-0.427975922822952,-0.947889268398285,-0.00534534081816673,-0.318555027246475, +-0.999958992004395,-0.00506561575457454,-0.00750599429011345,-0.243267297744751,0.0501272901892662,0.968663156032562,0.0718333944678307,0.0302717238664627,0.996957182884216,-0.401082009077072,0.0213807336986065,0.91579258441925,-0.401082009077072,0.0213807336986065,0.91579258441925,0.0718333944678307,0.0302717238664627,0.996957182884216,0.138908892869949,0.0285683125257492,0.989893019199371,-0.239474147558212,0.0072153196670115,0.970875918865204,0.00750558590516448,0.00506533868610859,0.999958992004395,-0.243267297744751,0.0501272901892662,0.968663156032562,-0.243267297744751,0.0501272901892662,0.968663156032562,0.00750558590516448,0.00506533868610859,0.999958992004395,0.0718333944678307,0.0302717238664627,0.996957182884216,-0.239474147558212,0.0072153196670115,0.970875918865204,0.00319768115878105,0.00319857522845268,0.999989748001099,0.00750558590516448,0.00506533868610859,0.999958992004395,-0.835946500301361,0.00378537736833096,-0.548797905445099,-0.97009938955307,0.00381323136389256,-0.242677941918373,-0.947889268398285,-0.00534534081816673,-0.318555027246475,-0.835946500301361,0.00378537736833096,-0.548797905445099,-0.892912149429321,0.00852669775485992,-0.450150191783905,-0.97009938955307,0.00381323136389256,-0.242677941918373,0.00319768115878105,0.00319857522845268,0.999989748001099,0.318556249141693,0.0053459363989532,0.947888910770416,0.00750558590516448,0.00506533868610859,0.999958992004395,0.00319768115878105,0.00319857522845268,0.999989748001099,0.244203865528107,-0.00219106837175786,0.969721436500549,0.318556249141693,0.0053459363989532,0.947888910770416,0.00750558590516448,0.00506533868610859,0.999958992004395,0.427976250648499,-0.0075084064155817,0.903758823871613,0.0718333944678307,0.0302717238664627,0.996957182884216,0.00750558590516448,0.00506533868610859,0.999958992004395,0.318556249141693,0.0053459363989532,0.947888910770416,0.427976250648499,-0.0075084064155817,0.903758823871613,0.0718333944678307,0.0302717238664627,0.996957182884216,0.70741218328476,0.000125379185192287,0.706801235675812,0.138908892869949,0.0285683125257492,0.989893019199371, +0.0718333944678307,0.0302717238664627,0.996957182884216,0.427976250648499,-0.0075084064155817,0.903758823871613,0.70741218328476,0.000125379185192287,0.706801235675812,0.244203865528107,-0.00219106837175786,0.969721436500549,0.548798620700836,-0.00378520274534822,0.835946023464203,0.318556249141693,0.0053459363989532,0.947888910770416,0.244203865528107,-0.00219106837175786,0.969721436500549,0.451166182756424,-0.00725371995940804,0.892410457134247,0.548798620700836,-0.00378520274534822,0.835946023464203,0.318556249141693,0.0053459363989532,0.947888910770416,0.70710676908493,-1.40840770157524e-08,0.70710676908493,0.427976250648499,-0.0075084064155817,0.903758823871613,0.318556249141693,0.0053459363989532,0.947888910770416,0.548798620700836,-0.00378520274534822,0.835946023464203,0.70710676908493,-1.40840770157524e-08,0.70710676908493,0.451166182756424,-0.00725371995940804,0.892410457134247,0.70710676908493,-3.21470352560027e-08,0.707106828689575,0.548798620700836,-0.00378520274534822,0.835946023464203,0.451166182756424,-0.00725371995940804,0.892410457134247,0.604857087135315,-0.0121360579505563,0.796241581439972,0.70710676908493,-3.21470352560027e-08,0.707106828689575,0.604857087135315,-0.0121360579505563,0.796241581439972,0.795759439468384,0.0111095951870084,0.605510890483856,0.70710676908493,-3.21470352560027e-08,0.707106828689575,0.604857087135315,-0.0121360579505563,0.796241581439972,0.706359088420868,-0.00149069353938103,0.707852125167847,0.795759439468384,0.0111095951870084,0.605510890483856,0.70710676908493,-3.21470352560027e-08,0.707106828689575,0.795759439468384,0.0111095951870084,0.605510890483856,0.892911970615387,0.00852687191218138,0.450150519609451,0.548798620700836,-0.00378520274534822,0.835946023464203,0.70710676908493,-3.21470352560027e-08,0.707106828689575,0.835946023464203,0.00378520437516272,0.548798620700836,0.70710676908493,-3.21470352560027e-08,0.707106828689575,0.892911970615387,0.00852687191218138,0.450150519609451,0.835946023464203,0.00378520437516272,0.548798620700836,0.548798620700836,-0.00378520274534822,0.835946023464203, +0.835946023464203,0.00378520437516272,0.548798620700836,0.70710676908493,-1.40840770157524e-08,0.70710676908493,0.835946023464203,0.00378520437516272,0.548798620700836,0.892911970615387,0.00852687191218138,0.450150519609451,0.97009938955307,0.00381349795497954,0.242678001523018,0.835946023464203,0.00378520437516272,0.548798620700836,0.97009938955307,0.00381349795497954,0.242678001523018,0.947888910770416,-0.00534580461680889,0.318556159734726,0.70710676908493,-1.40840770157524e-08,0.70710676908493,0.835946023464203,0.00378520437516272,0.548798620700836,0.947888910770416,-0.00534580461680889,0.318556159734726,0.947888910770416,-0.00534580461680889,0.318556159734726,0.97009938955307,0.00381349795497954,0.242678001523018,0.999997437000275,-0.00160210859030485,0.00160166074056178,0.427976250648499,-0.0075084064155817,0.903758823871613,0.70710676908493,-1.40840770157524e-08,0.70710676908493,0.903758883476257,0.00750842085108161,0.427976101636887,0.70710676908493,-1.40840770157524e-08,0.70710676908493,0.947888910770416,-0.00534580461680889,0.318556159734726,0.903758883476257,0.00750842085108161,0.427976101636887,0.427976250648499,-0.0075084064155817,0.903758823871613,0.903758883476257,0.00750842085108161,0.427976101636887,0.70741218328476,0.000125379185192287,0.706801235675812,0.947888910770416,-0.00534580461680889,0.318556159734726,0.999997437000275,-0.00160210859030485,0.00160166074056178,0.999958992004395,-0.00506549468263984,0.0075058164075017,0.903758883476257,0.00750842085108161,0.427976101636887,0.947888910770416,-0.00534580461680889,0.318556159734726,0.999958992004395,-0.00506549468263984,0.0075058164075017,0.970513463020325,-0.005615693051368,-0.240981414914131,0.999958992004395,-0.00506549468263984,0.0075058164075017,0.999997437000275,-0.00160210859030485,0.00160166074056178,0.70741218328476,0.000125379185192287,0.706801235675812,0.903758883476257,0.00750842085108161,0.427976101636887,0.996968030929565,-0.0302176736295223,0.071705237030983,0.903758883476257,0.00750842085108161,0.427976101636887,0.999958992004395,-0.00506549468263984,0.0075058164075017, +0.996968030929565,-0.0302176736295223,0.071705237030983,0.970513463020325,-0.005615693051368,-0.240981414914131,0.968663156032562,-0.0501272678375244,-0.243267238140106,0.999958992004395,-0.00506549468263984,0.0075058164075017,0.968663156032562,-0.0501272678375244,-0.243267238140106,0.996968030929565,-0.0302176736295223,0.071705237030983,0.999958992004395,-0.00506549468263984,0.0075058164075017,0.893069624900818,-0.00892843119800091,-0.449829906225204,0.968663156032562,-0.0501272678375244,-0.243267238140106,0.970513463020325,-0.005615693051368,-0.240981414914131,0.70741218328476,0.000125379185192287,0.706801235675812,0.996968030929565,-0.0302176736295223,0.071705237030983,0.984685778617859,-0.0351197347044945,0.1707643866539,0.138908892869949,0.0285683125257492,0.989893019199371,0.70741218328476,0.000125379185192287,0.706801235675812,0.984685778617859,-0.0351197347044945,0.1707643866539,0.138908892869949,0.0285683125257492,0.989893019199371,0.984685778617859,-0.0351197347044945,0.1707643866539,0.698676407337189,0,0.715437769889832,0.893069624900818,-0.00892843119800091,-0.449829906225204,0.820799589157104,0.0181113705039024,-0.570929110050201,0.968663156032562,-0.0501272678375244,-0.243267238140106,0.797510921955109,-0.0148526905104518,-0.603121638298035,0.820799589157104,0.0181113705039024,-0.570929110050201,0.893069624900818,-0.00892843119800091,-0.449829906225204,0.968663156032562,-0.0501272678375244,-0.243267238140106,0.927926361560822,-0.0366382040083408,-0.370958626270294,0.996968030929565,-0.0302176736295223,0.071705237030983,0.927926361560822,-0.0366382040083408,-0.370958626270294,0.984685778617859,-0.0351197347044945,0.1707643866539,0.996968030929565,-0.0302176736295223,0.071705237030983,0.820799589157104,0.0181113705039024,-0.570929110050201,0.927926361560822,-0.0366382040083408,-0.370958626270294,0.968663156032562,-0.0501272678375244,-0.243267238140106,0.797510921955109,-0.0148526905104518,-0.603121638298035,0.707106709480286,7.76446711370227e-08,-0.707106828689575,0.820799589157104,0.0181113705039024,-0.570929110050201, +0.707754552364349,-0.00129526911769062,-0.706457257270813,0.707106709480286,7.76446711370227e-08,-0.707106828689575,0.797510921955109,-0.0148526905104518,-0.603121638298035,0.707754552364349,-0.00129526911769062,-0.706457257270813,0.603753447532654,0.0138649940490723,-0.797050535678864,0.707106709480286,7.76446711370227e-08,-0.707106828689575,0.927926361560822,-0.0366382040083408,-0.370958626270294,0.697196066379547,0.0040400018915534,-0.716869115829468,0.984685778617859,-0.0351197347044945,0.1707643866539,0.697196066379547,0.0040400018915534,-0.716869115829468,0.969302117824554,0,0.245872735977173,0.984685778617859,-0.0351197347044945,0.1707643866539,0.820799589157104,0.0181113705039024,-0.570929110050201,0.70710676908493,-1.3928605824276e-08,-0.70710676908493,0.927926361560822,-0.0366382040083408,-0.370958626270294,0.707106709480286,7.76446711370227e-08,-0.707106828689575,0.70710676908493,-1.3928605824276e-08,-0.70710676908493,0.820799589157104,0.0181113705039024,-0.570929110050201,0.70710676908493,-1.3928605824276e-08,-0.70710676908493,0.697196066379547,0.0040400018915534,-0.716869115829468,0.927926361560822,-0.0366382040083408,-0.370958626270294,0.603753447532654,0.0138649940490723,-0.797050535678864,0.570929110050201,-0.0181113947182894,-0.820799589157104,0.707106709480286,7.76446711370227e-08,-0.707106828689575,0.707106709480286,7.76446711370227e-08,-0.707106828689575,0.570929110050201,-0.0181113947182894,-0.820799589157104,0.70710676908493,-1.3928605824276e-08,-0.70710676908493,0.603753447532654,0.0138649940490723,-0.797050535678864,0.448829919099808,0.0101798232644796,-0.893559217453003,0.570929110050201,-0.0181113947182894,-0.820799589157104,0.70710676908493,-1.3928605824276e-08,-0.70710676908493,0.364599853754044,0.0398224145174026,-0.930312395095825,0.697196066379547,0.0040400018915534,-0.716869115829468,0.570929110050201,-0.0181113947182894,-0.820799589157104,0.364599853754044,0.0398224145174026,-0.930312395095825,0.70710676908493,-1.3928605824276e-08,-0.70710676908493,0.448829919099808,0.0101798232644796,-0.893559217453003, +0.243267402052879,0.0501272119581699,-0.968663096427917,0.570929110050201,-0.0181113947182894,-0.820799589157104,0.570929110050201,-0.0181113947182894,-0.820799589157104,0.243267402052879,0.0501272119581699,-0.968663096427917,0.364599853754044,0.0398224145174026,-0.930312395095825,0.448829919099808,0.0101798232644796,-0.893559217453003,0.239474445581436,0.00721521209925413,-0.970875859260559,0.243267402052879,0.0501272119581699,-0.968663096427917,0.364599853754044,0.0398224145174026,-0.930312395095825,-0.18302658200264,0.0376415960490704,-0.982387065887451,0.697196066379547,0.0040400018915534,-0.716869115829468,0.697196066379547,0.0040400018915534,-0.716869115829468,-0.18302658200264,0.0376415960490704,-0.982387065887451,-0.23223939538002,0,-0.972658634185791,0.364599853754044,0.0398224145174026,-0.930312395095825,-0.0725759565830231,0.0305846128612757,-0.99689382314682,-0.18302658200264,0.0376415960490704,-0.982387065887451,0.243267402052879,0.0501272119581699,-0.968663096427917,-0.0725759565830231,0.0305846128612757,-0.99689382314682,0.364599853754044,0.0398224145174026,-0.930312395095825,0.243267402052879,0.0501272119581699,-0.968663096427917,-0.00750578753650188,0.00506547465920448,-0.999958992004395,-0.0725759565830231,0.0305846128612757,-0.99689382314682,0.239474445581436,0.00721521209925413,-0.970875859260559,-0.00750578753650188,0.00506547465920448,-0.999958992004395,0.243267402052879,0.0501272119581699,-0.968663096427917,0.239474445581436,0.00721521209925413,-0.970875859260559,-0.00319789303466678,0.00319878710433841,-0.999989748001099,-0.00750578753650188,0.00506547465920448,-0.999958992004395,-0.604856967926025,-0.0121362982317805,-0.796241641044617,-0.706359386444092,-0.00149013777263463,-0.707851827144623,-0.795759439468384,0.0111095942556858,-0.605510890483856,-0.604856967926025,-0.0121362982317805,-0.796241641044617,-0.795759439468384,0.0111095942556858,-0.605510890483856,-0.70710676908493,-1.56187613953307e-08,-0.70710676908493,-0.70710676908493,-1.56187613953307e-08,-0.70710676908493,-0.795759439468384,0.0111095942556858,-0.605510890483856, +-0.892912149429321,0.00852669775485992,-0.450150191783905,-0.451166123151779,-0.00725378422066569,-0.892410516738892,-0.604856967926025,-0.0121362982317805,-0.796241641044617,-0.70710676908493,-1.56187613953307e-08,-0.70710676908493,-0.70710676908493,-1.56187613953307e-08,-0.70710676908493,-0.892912149429321,0.00852669775485992,-0.450150191783905,-0.835946500301361,0.00378537736833096,-0.548797905445099,-0.451166123151779,-0.00725378422066569,-0.892410516738892,-0.70710676908493,-1.56187613953307e-08,-0.70710676908493,-0.548798620700836,-0.00378519622609019,-0.835946023464203,-0.548798620700836,-0.00378519622609019,-0.835946023464203,-0.70710676908493,-1.56187613953307e-08,-0.70710676908493,-0.835946500301361,0.00378537736833096,-0.548797905445099,-0.244203969836235,-0.0021910525392741,-0.969721436500549,-0.451166123151779,-0.00725378422066569,-0.892410516738892,-0.548798620700836,-0.00378519622609019,-0.835946023464203,-0.548798620700836,-0.00378519622609019,-0.835946023464203,-0.835946500301361,0.00378537736833096,-0.548797905445099,-0.707107186317444,8.83017925445984e-09,-0.707106351852417,-0.707107186317444,8.83017925445984e-09,-0.707106351852417,-0.835946500301361,0.00378537736833096,-0.548797905445099,-0.947889268398285,-0.00534534081816673,-0.318555027246475,-0.707107186317444,8.83017925445984e-09,-0.707106351852417,-0.947889268398285,-0.00534534081816673,-0.318555027246475,-0.903758943080902,0.00750822573900223,-0.427975922822952,-0.244203969836235,-0.0021910525392741,-0.969721436500549,-0.548798620700836,-0.00378519622609019,-0.835946023464203,-0.31855633854866,0.00534600391983986,-0.947888851165771,-0.31855633854866,0.00534600391983986,-0.947888851165771,-0.548798620700836,-0.00378519622609019,-0.835946023464203,-0.707107186317444,8.83017925445984e-09,-0.707106351852417,-0.00319789303466678,0.00319878710433841,-0.999989748001099,-0.244203969836235,-0.0021910525392741,-0.969721436500549,-0.31855633854866,0.00534600391983986,-0.947888851165771,-0.00319789303466678,0.00319878710433841,-0.999989748001099,-0.31855633854866,0.00534600391983986,-0.947888851165771, +-0.00750578753650188,0.00506547465920448,-0.999958992004395,-0.31855633854866,0.00534600391983986,-0.947888851165771,-0.707107186317444,8.83017925445984e-09,-0.707106351852417,-0.427976131439209,-0.00750840222463012,-0.903758823871613,-0.00750578753650188,0.00506547465920448,-0.999958992004395,-0.31855633854866,0.00534600391983986,-0.947888851165771,-0.427976131439209,-0.00750840222463012,-0.903758823871613,-0.427976131439209,-0.00750840222463012,-0.903758823871613,-0.707107186317444,8.83017925445984e-09,-0.707106351852417,-0.903758943080902,0.00750822573900223,-0.427975922822952,-0.00750578753650188,0.00506547465920448,-0.999958992004395,-0.427976131439209,-0.00750840222463012,-0.903758823871613,-0.0725759565830231,0.0305846128612757,-0.99689382314682,-0.427976131439209,-0.00750840222463012,-0.903758823871613,-0.903758943080902,0.00750822573900223,-0.427975922822952,-0.707106709480286,4.99361130223974e-09,-0.707106828689575,-0.0725759565830231,0.0305846128612757,-0.99689382314682,-0.427976131439209,-0.00750840222463012,-0.903758823871613,-0.707106709480286,4.99361130223974e-09,-0.707106828689575,-0.707106709480286,4.99361130223974e-09,-0.707106828689575,-0.903758943080902,0.00750822573900223,-0.427975922822952,-0.996957242488861,-0.0302714053541422,-0.0718327239155769,-0.0725759565830231,0.0305846128612757,-0.99689382314682,-0.707106709480286,4.99361130223974e-09,-0.707106828689575,-0.18302658200264,0.0376415960490704,-0.982387065887451,-0.707106709480286,4.99361130223974e-09,-0.707106828689575,-0.996957242488861,-0.0302714053541422,-0.0718327239155769,-0.992294311523438,-0.0249597616493702,-0.121363051235676,-0.18302658200264,0.0376415960490704,-0.982387065887451,-0.707106709480286,4.99361130223974e-09,-0.707106828689575,-0.992294311523438,-0.0249597616493702,-0.121363051235676,-0.18302658200264,0.0376415960490704,-0.982387065887451,-0.992294311523438,-0.0249597616493702,-0.121363051235676,-0.731510877609253,0,-0.681829810142517,0.617437422275543,-0.00789939519017935,0.786580324172974,0.707942187786102,-0.00167369248811156,0.706268429756165, +0.706699073314667,0.00105086981784552,0.707513451576233,0.617437422275543,-0.00789939519017935,0.786580324172974,0.706699073314667,0.00105086981784552,0.707513451576233,0.569277226924896,0.00526072131469846,0.822128772735596,0.463165163993835,-0.00838529784232378,0.886232316493988,0.617437422275543,-0.00789939519017935,0.786580324172974,0.569277226924896,0.00526072131469846,0.822128772735596,0.569277226924896,0.00526072131469846,0.822128772735596,0.706699073314667,0.00105086981784552,0.707513451576233,0.7070192694664,0.000340787839377299,0.707194209098816,0.463165163993835,-0.00838529784232378,0.886232316493988,0.569277226924896,0.00526072131469846,0.822128772735596,0.407897293567657,0.00548950908705592,0.913011312484741,0.234416961669922,0.0127107128500938,0.972053050994873,0.463165163993835,-0.00838529784232378,0.886232316493988,0.407897293567657,0.00548950908705592,0.913011312484741,0.569277226924896,0.00526072131469846,0.822128772735596,0.7070192694664,0.000340787839377299,0.707194209098816,0.562164604663849,0.00171180721372366,0.82702362537384,0.407897293567657,0.00548950908705592,0.913011312484741,0.569277226924896,0.00526072131469846,0.822128772735596,0.562164604663849,0.00171180721372366,0.82702362537384,0.562164604663849,0.00171180721372366,0.82702362537384,0.7070192694664,0.000340787839377299,0.707194209098816,0.707102119922638,3.52086790371686e-05,0.707111418247223,0.234416961669922,0.0127107128500938,0.972053050994873,0.407897293567657,0.00548950908705592,0.913011312484741,0.214038848876953,0.00354196224361658,0.976818740367889,0.00125288509298116,-0.0012528853258118,0.999998450279236,0.234416961669922,0.0127107128500938,0.972053050994873,0.214038848876953,0.00354196224361658,0.976818740367889,0.562164604663849,0.00171180721372366,0.82702362537384,0.707102119922638,3.52086790371686e-05,0.707111418247223,0.558777391910553,2.76741411653347e-05,0.829317688941956,0.558777391910553,2.76741411653347e-05,0.829317688941956,0.707102119922638,3.52086790371686e-05,0.707111418247223,0.707106530666351,4.54353248642292e-05,0.707107067108154, +0.407897293567657,0.00548950908705592,0.913011312484741,0.562164604663849,0.00171180721372366,0.82702362537384,0.393852531909943,0.00192953273653984,0.919171631336212,0.214038848876953,0.00354196224361658,0.976818740367889,0.407897293567657,0.00548950908705592,0.913011312484741,0.393852531909943,0.00192953273653984,0.919171631336212,0.393852531909943,0.00192953273653984,0.919171631336212,0.562164604663849,0.00171180721372366,0.82702362537384,0.558777391910553,2.76741411653347e-05,0.829317688941956,0.00125288509298116,-0.0012528853258118,0.999998450279236,0.214038848876953,0.00354196224361658,0.976818740367889,-0.000510064128320664,0.000755367625970393,0.999999582767487,-0.233452081680298,-0.0137311182916164,0.972271382808685,0.00125288509298116,-0.0012528853258118,0.999998450279236,-0.000510064128320664,0.000755367625970393,0.999999582767487,0.558777391910553,2.76741411653347e-05,0.829317688941956,0.707106530666351,4.54353248642292e-05,0.707107067108154,0.556791067123413,1.62410970006022e-06,0.830652594566345,0.707116961479187,8.34319725981914e-05,0.707096576690674,0.556791067123413,1.62410970006022e-06,0.830652594566345,0.707106530666351,4.54353248642292e-05,0.707107067108154,0.393852531909943,0.00192953273653984,0.919171631336212,0.558777391910553,2.76741411653347e-05,0.829317688941956,0.387862712144852,-2.65100811702723e-06,0.921717166900635,0.387862712144852,-2.65100811702723e-06,0.921717166900635,0.558777391910553,2.76741411653347e-05,0.829317688941956,0.556791067123413,1.62410970006022e-06,0.830652594566345,0.214038848876953,0.00354196224361658,0.976818740367889,0.393852531909943,0.00192953273653984,0.919171631336212,0.203779473900795,0.0012674176832661,0.979016005992889,-0.000510064128320664,0.000755367625970393,0.999999582767487,0.214038848876953,0.00354196224361658,0.976818740367889,0.203779473900795,0.0012674176832661,0.979016005992889,0.203779473900795,0.0012674176832661,0.979016005992889,0.393852531909943,0.00192953273653984,0.919171631336212,0.387862712144852,-2.65100811702723e-06,0.921717166900635,-0.233452081680298,-0.0137311182916164,0.972271382808685, +-0.000510064128320664,0.000755367625970393,0.999999582767487,-0.214883014559746,-0.00223387801088393,0.976637244224548,-0.436146229505539,-0.0254502184689045,0.899515867233276,-0.233452081680298,-0.0137311182916164,0.972271382808685,-0.214883014559746,-0.00223387801088393,0.976637244224548,0.707116961479187,8.34319725981914e-05,0.707096576690674,0.558031797409058,-0.000236924082855694,0.829819560050964,0.556791067123413,1.62410970006022e-06,0.830652594566345,0.707207858562469,0.000397723139030859,0.707005560398102,0.558031797409058,-0.000236924082855694,0.829819560050964,0.707116961479187,8.34319725981914e-05,0.707096576690674,-0.000510064128320664,0.000755367625970393,0.999999582767487,0.203779473900795,0.0012674176832661,0.979016005992889,3.25752298522275e-05,-7.71516570239328e-05,1,-0.214883014559746,-0.00223387801088393,0.976637244224548,-0.000510064128320664,0.000755367625970393,0.999999582767487,3.25752298522275e-05,-7.71516570239328e-05,1,0.387862712144852,-2.65100811702723e-06,0.921717166900635,0.556791067123413,1.62410970006022e-06,0.830652594566345,0.384670555591583,1.17690087790834e-05,0.923053920269012,0.558031797409058,-0.000236924082855694,0.829819560050964,0.384670555591583,1.17690087790834e-05,0.923053920269012,0.556791067123413,1.62410970006022e-06,0.830652594566345,0.203779473900795,0.0012674176832661,0.979016005992889,0.387862712144852,-2.65100811702723e-06,0.921717166900635,0.198936879634857,8.11188272109575e-07,0.98001229763031,3.25752298522275e-05,-7.71516570239328e-05,1,0.203779473900795,0.0012674176832661,0.979016005992889,0.198936879634857,8.11188272109575e-07,0.98001229763031,0.198936879634857,8.11188272109575e-07,0.98001229763031,0.387862712144852,-2.65100811702723e-06,0.921717166900635,0.384670555591583,1.17690087790834e-05,0.923053920269012,-0.436146229505539,-0.0254502184689045,0.899515867233276,-0.214883014559746,-0.00223387801088393,0.976637244224548,-0.407934427261353,-0.00542428996413946,0.912995100021362,-0.633309960365295,0.0341849103569984,0.773142874240875,-0.436146229505539,-0.0254502184689045,0.899515867233276, +-0.407934427261353,-0.00542428996413946,0.912995100021362,0.707207858562469,0.000397723139030859,0.707005560398102,0.561412870883942,-0.0018362698610872,0.827533841133118,0.558031797409058,-0.000236924082855694,0.829819560050964,0.707564532756805,0.00118393893353641,0.706647753715515,0.561412870883942,-0.0018362698610872,0.827533841133118,0.707207858562469,0.000397723139030859,0.707005560398102,-0.214883014559746,-0.00223387801088393,0.976637244224548,3.25752298522275e-05,-7.71516570239328e-05,1,-0.203775331377983,-0.00127772556152195,0.979016840457916,-0.407934427261353,-0.00542428996413946,0.912995100021362,-0.214883014559746,-0.00223387801088393,0.976637244224548,-0.203775331377983,-0.00127772556152195,0.979016840457916,3.25752298522275e-05,-7.71516570239328e-05,1,0.198936879634857,8.11188272109575e-07,0.98001229763031,-0.000326101522659883,-8.88771101017483e-05,0.999999940395355,-0.203775331377983,-0.00127772556152195,0.979016840457916,3.25752298522275e-05,-7.71516570239328e-05,1,-0.000326101522659883,-8.88771101017483e-05,0.999999940395355,0.198936879634857,8.11188272109575e-07,0.98001229763031,0.384670555591583,1.17690087790834e-05,0.923053920269012,0.196713343262672,-8.35360515338834e-06,0.980461061000824,-0.000326101522659883,-8.88771101017483e-05,0.999999940395355,0.198936879634857,8.11188272109575e-07,0.98001229763031,0.196713343262672,-8.35360515338834e-06,0.980461061000824,0.558031797409058,-0.000236924082855694,0.829819560050964,0.3868228495121,-0.000242706621065736,0.922154009342194,0.384670555591583,1.17690087790834e-05,0.923053920269012,0.561412870883942,-0.0018362698610872,0.827533841133118,0.3868228495121,-0.000242706621065736,0.922154009342194,0.558031797409058,-0.000236924082855694,0.829819560050964,0.3868228495121,-0.000242706621065736,0.922154009342194,0.196713343262672,-8.35360515338834e-06,0.980461061000824,0.384670555591583,1.17690087790834e-05,0.923053920269012,-0.633309960365295,0.0341849103569984,0.773142874240875,-0.407934427261353,-0.00542428996413946,0.912995100021362,-0.568264901638031,-0.00739701930433512,0.822812438011169, +-0.706330001354218,-0.00155105604790151,0.707880973815918,-0.633309960365295,0.0341849103569984,0.773142874240875,-0.568264901638031,-0.00739701930433512,0.822812438011169,-0.706330001354218,-0.00155105604790151,0.707880973815918,-0.568264901638031,-0.00739701930433512,0.822812438011169,-0.707513391971588,0.00105078145861626,0.706699132919312,-0.407934427261353,-0.00542428996413946,0.912995100021362,-0.203775331377983,-0.00127772556152195,0.979016840457916,-0.393737882375717,-0.00224487273953855,0.91922003030777,-0.568264901638031,-0.00739701930433512,0.822812438011169,-0.407934427261353,-0.00542428996413946,0.912995100021362,-0.393737882375717,-0.00224487273953855,0.91922003030777,-0.707513391971588,0.00105078145861626,0.706699132919312,-0.568264901638031,-0.00739701930433512,0.822812438011169,-0.562159180641174,-0.0017293666023761,0.827027261257172,-0.568264901638031,-0.00739701930433512,0.822812438011169,-0.393737882375717,-0.00224487273953855,0.91922003030777,-0.562159180641174,-0.0017293666023761,0.827027261257172,-0.707513391971588,0.00105078145861626,0.706699132919312,-0.562159180641174,-0.0017293666023761,0.827027261257172,-0.707194149494171,0.000340722472174093,0.707019329071045,-0.203775331377983,-0.00127772556152195,0.979016840457916,-0.000326101522659883,-8.88771101017483e-05,0.999999940395355,-0.200538724660873,0.000589616480283439,0.979685604572296,-0.393737882375717,-0.00224487273953855,0.91922003030777,-0.203775331377983,-0.00127772556152195,0.979016840457916,-0.200538724660873,0.000589616480283439,0.979685604572296,-0.000326101522659883,-8.88771101017483e-05,0.999999940395355,0.196713343262672,-8.35360515338834e-06,0.980461061000824,-0.000936906842980534,0.00324206310324371,0.999994277954102,-0.200538724660873,0.000589616480283439,0.979685604572296,-0.000326101522659883,-8.88771101017483e-05,0.999999940395355,-0.000936906842980534,0.00324206310324371,0.999994277954102,0.3868228495121,-0.000242706621065736,0.922154009342194,0.198772445321083,-0.000144565783557482,0.980045676231384,0.196713343262672,-8.35360515338834e-06,0.980461061000824, +0.198772445321083,-0.000144565783557482,0.980045676231384,-0.000936906842980534,0.00324206310324371,0.999994277954102,0.196713343262672,-8.35360515338834e-06,0.980461061000824,-0.707194149494171,0.000340722472174093,0.707019329071045,-0.562159180641174,-0.0017293666023761,0.827027261257172,-0.559886515140533,-0.000555012258701026,0.828569114208221,-0.707194149494171,0.000340722472174093,0.707019329071045,-0.559886515140533,-0.000555012258701026,0.828569114208221,-0.707130193710327,0.000173983964486979,0.707083344459534,-0.562159180641174,-0.0017293666023761,0.827027261257172,-0.393737882375717,-0.00224487273953855,0.91922003030777,-0.389610677957535,-0.000729603227227926,0.920979380607605,-0.393737882375717,-0.00224487273953855,0.91922003030777,-0.200538724660873,0.000589616480283439,0.979685604572296,-0.389610677957535,-0.000729603227227926,0.920979380607605,-0.562159180641174,-0.0017293666023761,0.827027261257172,-0.389610677957535,-0.000729603227227926,0.920979380607605,-0.559886515140533,-0.000555012258701026,0.828569114208221,-0.200538724660873,0.000589616480283439,0.979685604572296,-0.000936906842980534,0.00324206310324371,0.999994277954102,-0.199867412447929,0.00330553320236504,0.979817390441895,-0.389610677957535,-0.000729603227227926,0.920979380607605,-0.200538724660873,0.000589616480283439,0.979685604572296,-0.199867412447929,0.00330553320236504,0.979817390441895,-0.707130193710327,0.000173983964486979,0.707083344459534,-0.559886515140533,-0.000555012258701026,0.828569114208221,-0.559126794338226,-5.51124503544997e-05,0.829082131385803,-0.707130193710327,0.000173983964486979,0.707083344459534,-0.559126794338226,-5.51124503544997e-05,0.829082131385803,-0.707107126712799,4.52838648925535e-05,0.707106471061707,-0.559886515140533,-0.000555012258701026,0.828569114208221,-0.389610677957535,-0.000729603227227926,0.920979380607605,-0.388352751731873,-7.28129598428495e-05,0.921510756015778,-0.389610677957535,-0.000729603227227926,0.920979380607605,-0.199867412447929,0.00330553320236504,0.979817390441895,-0.388352751731873,-7.28129598428495e-05,0.921510756015778, +-0.559886515140533,-0.000555012258701026,0.828569114208221,-0.388352751731873,-7.28129598428495e-05,0.921510756015778,-0.559126794338226,-5.51124503544997e-05,0.829082131385803,-0.000373691145796329,0.00104458071291447,0.999999403953552,-0.199867412447929,0.00330553320236504,0.979817390441895,-0.000936906842980534,0.00324206310324371,0.999994277954102,0.198772445321083,-0.000144565783557482,0.980045676231384,-0.000373691145796329,0.00104458071291447,0.999999403953552,-0.000936906842980534,0.00324206310324371,0.999994277954102,0.39293184876442,-0.00223732669837773,0.919564843177795,0.198772445321083,-0.000144565783557482,0.980045676231384,0.3868228495121,-0.000242706621065736,0.922154009342194,0.561412870883942,-0.0018362698610872,0.827533841133118,0.39293184876442,-0.00223732669837773,0.919564843177795,0.3868228495121,-0.000242706621065736,0.922154009342194,-0.559168994426727,0.00050442578503862,0.829053580760956,-0.707107126712799,4.52838648925535e-05,0.707106471061707,-0.559126794338226,-5.51124503544997e-05,0.829082131385803,-0.559168994426727,0.00050442578503862,0.829053580760956,-0.707087278366089,0.00015145271026995,0.707126259803772,-0.707107126712799,4.52838648925535e-05,0.707106471061707,-0.388630717992783,0.000543632078915834,0.92139345407486,-0.559126794338226,-5.51124503544997e-05,0.829082131385803,-0.388352751731873,-7.28129598428495e-05,0.921510756015778,-0.388630717992783,0.000543632078915834,0.92139345407486,-0.559168994426727,0.00050442578503862,0.829053580760956,-0.559126794338226,-5.51124503544997e-05,0.829082131385803,-0.200440615415573,0.000350610411260277,0.979705810546875,-0.388352751731873,-7.28129598428495e-05,0.921510756015778,-0.199867412447929,0.00330553320236504,0.979817390441895,-0.000373691145796329,0.00104458071291447,0.999999403953552,-0.200440615415573,0.000350610411260277,0.979705810546875,-0.199867412447929,0.00330553320236504,0.979817390441895,-0.200440615415573,0.000350610411260277,0.979705810546875,-0.388630717992783,0.000543632078915834,0.92139345407486,-0.388352751731873,-7.28129598428495e-05,0.921510756015778, +0.203585997223854,-0.00132707215379924,0.979056179523468,-0.000373691145796329,0.00104458071291447,0.999999403953552,0.198772445321083,-0.000144565783557482,0.980045676231384,0.39293184876442,-0.00223732669837773,0.919564843177795,0.203585997223854,-0.00132707215379924,0.979056179523468,0.198772445321083,-0.000144565783557482,0.980045676231384,0.567684173583984,-0.00745069375261664,0.823212683200836,0.39293184876442,-0.00223732669837773,0.919564843177795,0.561412870883942,-0.0018362698610872,0.827533841133118,0.707564532756805,0.00118393893353641,0.706647753715515,0.567684173583984,-0.00745069375261664,0.823212683200836,0.561412870883942,-0.0018362698610872,0.827533841133118,0.706359088420868,-0.00149069353938103,0.707852125167847,0.567684173583984,-0.00745069375261664,0.823212683200836,0.707564532756805,0.00118393893353641,0.706647753715515,0.706359088420868,-0.00149069353938103,0.707852125167847,0.604857087135315,-0.0121360579505563,0.796241581439972,0.567684173583984,-0.00745069375261664,0.823212683200836,0.567684173583984,-0.00745069375261664,0.823212683200836,0.407906889915466,-0.00517270062118769,0.913008868694305,0.39293184876442,-0.00223732669837773,0.919564843177795,0.604857087135315,-0.0121360579505563,0.796241581439972,0.407906889915466,-0.00517270062118769,0.913008868694305,0.567684173583984,-0.00745069375261664,0.823212683200836,0.407906889915466,-0.00517270062118769,0.913008868694305,0.203585997223854,-0.00132707215379924,0.979056179523468,0.39293184876442,-0.00223732669837773,0.919564843177795,0.604857087135315,-0.0121360579505563,0.796241581439972,0.451166182756424,-0.00725371995940804,0.892410457134247,0.407906889915466,-0.00517270062118769,0.913008868694305,0.451166182756424,-0.00725371995940804,0.892410457134247,0.214775800704956,-0.00214500282891095,0.976661026477814,0.407906889915466,-0.00517270062118769,0.913008868694305,0.407906889915466,-0.00517270062118769,0.913008868694305,0.214775800704956,-0.00214500282891095,0.976661026477814,0.203585997223854,-0.00132707215379924,0.979056179523468,0.451166182756424,-0.00725371995940804,0.892410457134247, +0.244203865528107,-0.00219106837175786,0.969721436500549,0.214775800704956,-0.00214500282891095,0.976661026477814,0.203585997223854,-0.00132707215379924,0.979056179523468,-3.20216531690676e-05,-7.6038581028115e-05,1,-0.000373691145796329,0.00104458071291447,0.999999403953552,0.214775800704956,-0.00214500282891095,0.976661026477814,-3.20216531690676e-05,-7.6038581028115e-05,1,0.203585997223854,-0.00132707215379924,0.979056179523468,-3.20216531690676e-05,-7.6038581028115e-05,1,-0.200440615415573,0.000350610411260277,0.979705810546875,-0.000373691145796329,0.00104458071291447,0.999999403953552,0.244203865528107,-0.00219106837175786,0.969721436500549,0.000516693398822099,0.000766453507822007,0.999999582767487,0.214775800704956,-0.00214500282891095,0.976661026477814,0.214775800704956,-0.00214500282891095,0.976661026477814,0.000516693398822099,0.000766453507822007,0.999999582767487,-3.20216531690676e-05,-7.6038581028115e-05,1,0.244203865528107,-0.00219106837175786,0.969721436500549,0.00319768115878105,0.00319857522845268,0.999989748001099,0.000516693398822099,0.000766453507822007,0.999999582767487,-3.20216531690676e-05,-7.6038581028115e-05,1,-0.2035743445158,0.00135596725158393,0.979058563709259,-0.200440615415573,0.000350610411260277,0.979705810546875,0.000516693398822099,0.000766453507822007,0.999999582767487,-0.2035743445158,0.00135596725158393,0.979058563709259,-3.20216531690676e-05,-7.6038581028115e-05,1,-0.2035743445158,0.00135596725158393,0.979058563709259,-0.388630717992783,0.000543632078915834,0.92139345407486,-0.200440615415573,0.000350610411260277,0.979705810546875,0.00319768115878105,0.00319857522845268,0.999989748001099,-0.21393346786499,0.00345209077931941,0.976842105388641,0.000516693398822099,0.000766453507822007,0.999999582767487,0.000516693398822099,0.000766453507822007,0.999999582767487,-0.21393346786499,0.00345209077931941,0.976842105388641,-0.2035743445158,0.00135596725158393,0.979058563709259,0.00319768115878105,0.00319857522845268,0.999989748001099,-0.239474147558212,0.0072153196670115,0.970875918865204, +-0.21393346786499,0.00345209077931941,0.976842105388641,-0.2035743445158,0.00135596725158393,0.979058563709259,-0.393003135919571,0.00204043416306376,0.919534862041473,-0.388630717992783,0.000543632078915834,0.92139345407486,-0.21393346786499,0.00345209077931941,0.976842105388641,-0.393003135919571,0.00204043416306376,0.919534862041473,-0.2035743445158,0.00135596725158393,0.979058563709259,-0.393003135919571,0.00204043416306376,0.919534862041473,-0.559168994426727,0.00050442578503862,0.829053580760956,-0.388630717992783,0.000543632078915834,0.92139345407486,-0.239474147558212,0.0072153196670115,0.970875918865204,-0.407818853855133,0.00532680144533515,0.913047313690186,-0.21393346786499,0.00345209077931941,0.976842105388641,-0.21393346786499,0.00345209077931941,0.976842105388641,-0.407818853855133,0.00532680144533515,0.913047313690186,-0.393003135919571,0.00204043416306376,0.919534862041473,-0.239474147558212,0.0072153196670115,0.970875918865204,-0.448829829692841,0.0101794609799981,0.893559277057648,-0.407818853855133,0.00532680144533515,0.913047313690186,-0.393003135919571,0.00204043416306376,0.919534862041473,-0.561472713947296,0.00164287351071835,0.827493667602539,-0.559168994426727,0.00050442578503862,0.829053580760956,-0.407818853855133,0.00532680144533515,0.913047313690186,-0.561472713947296,0.00164287351071835,0.827493667602539,-0.393003135919571,0.00204043416306376,0.919534862041473,-0.561472713947296,0.00164287351071835,0.827493667602539,-0.707087278366089,0.00015145271026995,0.707126259803772,-0.559168994426727,0.00050442578503862,0.829053580760956,-0.561472713947296,0.00164287351071835,0.827493667602539,-0.707006216049194,0.00038740030140616,0.707207202911377,-0.707087278366089,0.00015145271026995,0.707126259803772,-0.448829829692841,0.0101794609799981,0.893559277057648,-0.568876624107361,0.00493524502962828,0.822408020496368,-0.407818853855133,0.00532680144533515,0.913047313690186,-0.407818853855133,0.00532680144533515,0.913047313690186,-0.568876624107361,0.00493524502962828,0.822408020496368,-0.561472713947296,0.00164287351071835,0.827493667602539, +-0.568876624107361,0.00493524502962828,0.822408020496368,-0.707006216049194,0.00038740030140616,0.707207202911377,-0.561472713947296,0.00164287351071835,0.827493667602539,-0.448829829692841,0.0101794609799981,0.893559277057648,-0.603753387928009,0.013865071348846,0.797050535678864,-0.568876624107361,0.00493524502962828,0.822408020496368,-0.568876624107361,0.00493524502962828,0.822408020496368,-0.706647396087646,0.00118098198436201,0.707564890384674,-0.707006216049194,0.00038740030140616,0.707207202911377,-0.603753387928009,0.013865071348846,0.797050535678864,-0.706647396087646,0.00118098198436201,0.707564890384674,-0.568876624107361,0.00493524502962828,0.822408020496368,-0.603753387928009,0.013865071348846,0.797050535678864,-0.707754552364349,-0.00129534676671028,0.706457197666168,-0.706647396087646,0.00118098198436201,0.707564890384674,0.772563338279724,-0.0352808348834515,-0.633956789970398,0.706329703330994,-0.00155158818233758,-0.707881331443787,0.707514226436615,0.00105289742350578,-0.706698298454285,0.772563338279724,-0.0352808348834515,-0.633956789970398,0.707514226436615,0.00105289742350578,-0.706698298454285,0.822128117084503,0.00525837251916528,-0.569278180599213,0.899949252605438,0.0266384296119213,-0.435180068016052,0.772563338279724,-0.0352808348834515,-0.633956789970398,0.822128117084503,0.00525837251916528,-0.569278180599213,0.822128117084503,0.00525837251916528,-0.569278180599213,0.707514226436615,0.00105289742350578,-0.706698298454285,0.707193970680237,0.000339905789587647,-0.707019507884979,0.899949252605438,0.0266384296119213,-0.435180068016052,0.822128117084503,0.00525837251916528,-0.569278180599213,0.913011610507965,0.00549105647951365,-0.407896667718887,0.972596228122711,0.015266677364707,-0.231998816132545,0.899949252605438,0.0266384296119213,-0.435180068016052,0.913011610507965,0.00549105647951365,-0.407896667718887,0.822128117084503,0.00525837251916528,-0.569278180599213,0.707193970680237,0.000339905789587647,-0.707019507884979,0.827023863792419,0.00171255494933575,-0.56216424703598,0.913011610507965,0.00549105647951365,-0.407896667718887, +0.822128117084503,0.00525837251916528,-0.569278180599213,0.827023863792419,0.00171255494933575,-0.56216424703598,0.827023863792419,0.00171255494933575,-0.56216424703598,0.707193970680237,0.000339905789587647,-0.707019507884979,0.707111239433289,3.36367484123912e-05,-0.707102358341217,0.972596228122711,0.015266677364707,-0.231998816132545,0.913011610507965,0.00549105647951365,-0.407896667718887,0.976818799972534,0.00354209518991411,-0.214038386940956,0.999992609024048,0.00272388802841306,0.00272388732992113,0.972596228122711,0.015266677364707,-0.231998816132545,0.976818799972534,0.00354209518991411,-0.214038386940956,0.827023863792419,0.00171255494933575,-0.56216424703598,0.707111239433289,3.36367484123912e-05,-0.707102358341217,0.829317808151245,2.94790297630243e-05,-0.558777213096619,0.829317808151245,2.94790297630243e-05,-0.558777213096619,0.707111239433289,3.36367484123912e-05,-0.707102358341217,0.707107067108154,4.54328255727887e-05,-0.707106530666351,0.913011610507965,0.00549105647951365,-0.407896667718887,0.827023863792419,0.00171255494933575,-0.56216424703598,0.919171929359436,0.00193424324970692,-0.393851727247238,0.976818799972534,0.00354209518991411,-0.214038386940956,0.913011610507965,0.00549105647951365,-0.407896667718887,0.919171929359436,0.00193424324970692,-0.393851727247238,0.919171929359436,0.00193424324970692,-0.393851727247238,0.827023863792419,0.00171255494933575,-0.56216424703598,0.829317808151245,2.94790297630243e-05,-0.558777213096619,0.999992609024048,0.00272388802841306,0.00272388732992113,0.976818799972534,0.00354209518991411,-0.214038386940956,0.999999582767487,0.000755495799239725,0.000510150857735425,0.971715927124023,-0.0111518912017345,0.23588927090168,0.999992609024048,0.00272388802841306,0.00272388732992113,0.999999582767487,0.000755495799239725,0.000510150857735425,0.829317808151245,2.94790297630243e-05,-0.558777213096619,0.707107067108154,4.54328255727887e-05,-0.707106530666351,0.830652594566345,1.62433229888848e-06,-0.556791067123413,0.70709627866745,8.34076490718871e-05,-0.707117259502411, +0.830652594566345,1.62433229888848e-06,-0.556791067123413,0.707107067108154,4.54328255727887e-05,-0.707106530666351,0.919171929359436,0.00193424324970692,-0.393851727247238,0.829317808151245,2.94790297630243e-05,-0.558777213096619,0.9217169880867,-2.53607254308008e-06,-0.38786318898201,0.9217169880867,-2.53607254308008e-06,-0.38786318898201,0.829317808151245,2.94790297630243e-05,-0.558777213096619,0.830652594566345,1.62433229888848e-06,-0.556791067123413,0.976818799972534,0.00354209518991411,-0.214038386940956,0.919171929359436,0.00193424324970692,-0.393851727247238,0.979016005992889,0.00126710266340524,-0.203779444098473,0.999999582767487,0.000755495799239725,0.000510150857735425,0.976818799972534,0.00354209518991411,-0.214038386940956,0.979016005992889,0.00126710266340524,-0.203779444098473,0.979016005992889,0.00126710266340524,-0.203779444098473,0.919171929359436,0.00193424324970692,-0.393851727247238,0.9217169880867,-2.53607254308008e-06,-0.38786318898201,0.971715927124023,-0.0111518912017345,0.23588927090168,0.999999582767487,0.000755495799239725,0.000510150857735425,0.976637661457062,-0.00223437510430813,0.214881226420403,0.885803639888763,0.0094043891876936,0.463964909315109,0.971715927124023,-0.0111518912017345,0.23588927090168,0.976637661457062,-0.00223437510430813,0.214881226420403,0.70709627866745,8.34076490718871e-05,-0.707117259502411,0.829819738864899,-0.000238282227655873,-0.558031499385834,0.830652594566345,1.62433229888848e-06,-0.556791067123413,0.707005798816681,0.000393001100746915,-0.707207679748535,0.829819738864899,-0.000238282227655873,-0.558031499385834,0.70709627866745,8.34076490718871e-05,-0.707117259502411,0.999999582767487,0.000755495799239725,0.000510150857735425,0.979016005992889,0.00126710266340524,-0.203779444098473,1,-7.7071410487406e-05,-3.25413857353851e-05,0.976637661457062,-0.00223437510430813,0.214881226420403,0.999999582767487,0.000755495799239725,0.000510150857735425,1,-7.7071410487406e-05,-3.25413857353851e-05,0.9217169880867,-2.53607254308008e-06,-0.38786318898201,0.830652594566345,1.62433229888848e-06,-0.556791067123413, +0.923053920269012,1.17695108201588e-05,-0.384670555591583,0.829819738864899,-0.000238282227655873,-0.558031499385834,0.923053920269012,1.17695108201588e-05,-0.384670555591583,0.830652594566345,1.62433229888848e-06,-0.556791067123413,0.979016005992889,0.00126710266340524,-0.203779444098473,0.9217169880867,-2.53607254308008e-06,-0.38786318898201,0.98001229763031,7.80555524215742e-07,-0.198936894536018,1,-7.7071410487406e-05,-3.25413857353851e-05,0.979016005992889,0.00126710266340524,-0.203779444098473,0.98001229763031,7.80555524215742e-07,-0.198936894536018,0.98001229763031,7.80555524215742e-07,-0.198936894536018,0.9217169880867,-2.53607254308008e-06,-0.38786318898201,0.923053920269012,1.17695108201588e-05,-0.384670555591583,0.885803639888763,0.0094043891876936,0.463964909315109,0.976637661457062,-0.00223437510430813,0.214881226420403,0.912994921207428,-0.00542408740147948,0.407934844493866,0.787114262580872,0.00681618368253112,0.616769552230835,0.885803639888763,0.0094043891876936,0.463964909315109,0.912994921207428,-0.00542408740147948,0.407934844493866,0.707005798816681,0.000393001100746915,-0.707207679748535,0.827533841133118,-0.00183658243622631,-0.561412870883942,0.829819738864899,-0.000238282227655873,-0.558031499385834,0.706647932529449,0.00118149945046753,-0.707564294338226,0.827533841133118,-0.00183658243622631,-0.561412870883942,0.707005798816681,0.000393001100746915,-0.707207679748535,0.976637661457062,-0.00223437510430813,0.214881226420403,1,-7.7071410487406e-05,-3.25413857353851e-05,0.979016959667206,-0.00127764418721199,0.203774705529213,0.912994921207428,-0.00542408740147948,0.407934844493866,0.976637661457062,-0.00223437510430813,0.214881226420403,0.979016959667206,-0.00127764418721199,0.203774705529213,1,-7.7071410487406e-05,-3.25413857353851e-05,0.98001229763031,7.80555524215742e-07,-0.198936894536018,1,-1.89058973774081e-05,-4.01252418669173e-06,0.979016959667206,-0.00127764418721199,0.203774705529213,1,-7.7071410487406e-05,-3.25413857353851e-05,1,-1.89058973774081e-05,-4.01252418669173e-06,0.98001229763031,7.80555524215742e-07,-0.198936894536018, +0.923053920269012,1.17695108201588e-05,-0.384670555591583,0.980461001396179,-8.35361970530357e-06,-0.196713417768478,1,-1.89058973774081e-05,-4.01252418669173e-06,0.98001229763031,7.80555524215742e-07,-0.198936894536018,0.980461001396179,-8.35361970530357e-06,-0.196713417768478,0.829819738864899,-0.000238282227655873,-0.558031499385834,0.922154068946838,-0.000240963097894564,-0.386822700500488,0.923053920269012,1.17695108201588e-05,-0.384670555591583,0.827533841133118,-0.00183658243622631,-0.561412870883942,0.922154068946838,-0.000240963097894564,-0.386822700500488,0.829819738864899,-0.000238282227655873,-0.558031499385834,0.922154068946838,-0.000240963097894564,-0.386822700500488,0.980461001396179,-8.35361970530357e-06,-0.196713417768478,0.923053920269012,1.17695108201588e-05,-0.384670555591583,0.787114262580872,0.00681618368253112,0.616769552230835,0.912994921207428,-0.00542408740147948,0.407934844493866,0.822811245918274,-0.00739661138504744,0.568266630172729,0.707942187786102,-0.00167369248811156,0.706268429756165,0.787114262580872,0.00681618368253112,0.616769552230835,0.822811245918274,-0.00739661138504744,0.568266630172729,0.707942187786102,-0.00167369248811156,0.706268429756165,0.822811245918274,-0.00739661138504744,0.568266630172729,0.706699073314667,0.00105086981784552,0.707513451576233,0.912994921207428,-0.00542408740147948,0.407934844493866,0.979016959667206,-0.00127764418721199,0.203774705529213,0.91922003030777,-0.00224480824545026,0.393737882375717,0.822811245918274,-0.00739661138504744,0.568266630172729,0.912994921207428,-0.00542408740147948,0.407934844493866,0.91922003030777,-0.00224480824545026,0.393737882375717,0.706699073314667,0.00105086981784552,0.707513451576233,0.822811245918274,-0.00739661138504744,0.568266630172729,0.827026963233948,-0.00172957801260054,0.562159597873688,0.822811245918274,-0.00739661138504744,0.568266630172729,0.91922003030777,-0.00224480824545026,0.393737882375717,0.827026963233948,-0.00172957801260054,0.562159597873688,0.706699073314667,0.00105086981784552,0.707513451576233, +0.827026963233948,-0.00172957801260054,0.562159597873688,0.7070192694664,0.000340787839377299,0.707194209098816,0.979016959667206,-0.00127764418721199,0.203774705529213,1,-1.89058973774081e-05,-4.01252418669173e-06,0.980012118816376,3.73186708202411e-06,0.198937878012657,0.91922003030777,-0.00224480824545026,0.393737882375717,0.979016959667206,-0.00127764418721199,0.203774705529213,0.980012118816376,3.73186708202411e-06,0.198937878012657,1,-1.89058973774081e-05,-4.01252418669173e-06,0.980461001396179,-8.35361970530357e-06,-0.196713417768478,1,-3.36245102516841e-05,-2.28100063282e-07,0.980012118816376,3.73186708202411e-06,0.198937878012657,1,-1.89058973774081e-05,-4.01252418669173e-06,1,-3.36245102516841e-05,-2.28100063282e-07,0.922154068946838,-0.000240963097894564,-0.386822700500488,0.980045676231384,-0.000146582591696642,-0.198772385716438,0.980461001396179,-8.35361970530357e-06,-0.196713417768478,0.980045676231384,-0.000146582591696642,-0.198772385716438,1,-3.36245102516841e-05,-2.28100063282e-07,0.980461001396179,-8.35361970530357e-06,-0.196713417768478,0.7070192694664,0.000340787839377299,0.707194209098816,0.827026963233948,-0.00172957801260054,0.562159597873688,0.829325079917908,-9.6987270808313e-05,0.55876636505127,0.7070192694664,0.000340787839377299,0.707194209098816,0.829325079917908,-9.6987270808313e-05,0.55876636505127,0.707102119922638,3.52086790371686e-05,0.707111418247223,0.827026963233948,-0.00172957801260054,0.562159597873688,0.91922003030777,-0.00224480824545026,0.393737882375717,0.921723425388336,-7.80616537667811e-05,0.38784784078598,0.91922003030777,-0.00224480824545026,0.393737882375717,0.980012118816376,3.73186708202411e-06,0.198937878012657,0.921723425388336,-7.80616537667811e-05,0.38784784078598,0.827026963233948,-0.00172957801260054,0.562159597873688,0.921723425388336,-7.80616537667811e-05,0.38784784078598,0.829325079917908,-9.6987270808313e-05,0.55876636505127,0.980012118816376,3.73186708202411e-06,0.198937878012657,1,-3.36245102516841e-05,-2.28100063282e-07,0.980461001396179,1.23958591302653e-06,0.196713462471962, +0.921723425388336,-7.80616537667811e-05,0.38784784078598,0.980012118816376,3.73186708202411e-06,0.198937878012657,0.980461001396179,1.23958591302653e-06,0.196713462471962,0.707102119922638,3.52086790371686e-05,0.707111418247223,0.829325079917908,-9.6987270808313e-05,0.55876636505127,0.830652594566345,-7.69509313158778e-07,0.556791067123413,0.707102119922638,3.52086790371686e-05,0.707111418247223,0.830652594566345,-7.69509313158778e-07,0.556791067123413,0.707106530666351,4.54353248642292e-05,0.707107067108154,0.829325079917908,-9.6987270808313e-05,0.55876636505127,0.921723425388336,-7.80616537667811e-05,0.38784784078598,0.923053920269012,-5.6338603826589e-06,0.384670585393906,0.921723425388336,-7.80616537667811e-05,0.38784784078598,0.980461001396179,1.23958591302653e-06,0.196713462471962,0.923053920269012,-5.6338603826589e-06,0.384670585393906,0.829325079917908,-9.6987270808313e-05,0.55876636505127,0.923053920269012,-5.6338603826589e-06,0.384670585393906,0.830652594566345,-7.69509313158778e-07,0.556791067123413,1,-5.23563539900351e-05,1.0743438906502e-05,0.980461001396179,1.23958591302653e-06,0.196713462471962,1,-3.36245102516841e-05,-2.28100063282e-07,0.980045676231384,-0.000146582591696642,-0.198772385716438,1,-5.23563539900351e-05,1.0743438906502e-05,1,-3.36245102516841e-05,-2.28100063282e-07,0.919564604759216,-0.00223215320147574,-0.392932504415512,0.980045676231384,-0.000146582591696642,-0.198772385716438,0.922154068946838,-0.000240963097894564,-0.386822700500488,0.827533841133118,-0.00183658243622631,-0.561412870883942,0.919564604759216,-0.00223215320147574,-0.392932504415512,0.922154068946838,-0.000240963097894564,-0.386822700500488,0.829820096492767,0.000241948320763186,0.558030962944031,0.707106530666351,4.54353248642292e-05,0.707107067108154,0.830652594566345,-7.69509313158778e-07,0.556791067123413,0.829820096492767,0.000241948320763186,0.558030962944031,0.707116961479187,8.34319725981914e-05,0.707096576690674,0.707106530666351,4.54353248642292e-05,0.707107067108154,0.922146439552307,0.00013823491462972,0.38684093952179, +0.830652594566345,-7.69509313158778e-07,0.556791067123413,0.923053920269012,-5.6338603826589e-06,0.384670585393906,0.922146439552307,0.00013823491462972,0.38684093952179,0.829820096492767,0.000241948320763186,0.558030962944031,0.830652594566345,-7.69509313158778e-07,0.556791067123413,0.980043768882751,9.87473904388025e-05,0.198781937360764,0.923053920269012,-5.6338603826589e-06,0.384670585393906,0.980461001396179,1.23958591302653e-06,0.196713462471962,1,-5.23563539900351e-05,1.0743438906502e-05,0.980043768882751,9.87473904388025e-05,0.198781937360764,0.980461001396179,1.23958591302653e-06,0.196713462471962,0.980043768882751,9.87473904388025e-05,0.198781937360764,0.922146439552307,0.00013823491462972,0.38684093952179,0.923053920269012,-5.6338603826589e-06,0.384670585393906,0.979056179523468,-0.00132776016835123,-0.203586012125015,1,-5.23563539900351e-05,1.0743438906502e-05,0.980045676231384,-0.000146582591696642,-0.198772385716438,0.919564604759216,-0.00223215320147574,-0.392932504415512,0.979056179523468,-0.00132776016835123,-0.203586012125015,0.980045676231384,-0.000146582591696642,-0.198772385716438,0.823212325572968,-0.00744970748201013,-0.567684769630432,0.919564604759216,-0.00223215320147574,-0.392932504415512,0.827533841133118,-0.00183658243622631,-0.561412870883942,0.706647932529449,0.00118149945046753,-0.707564294338226,0.823212325572968,-0.00744970748201013,-0.567684769630432,0.827533841133118,-0.00183658243622631,-0.561412870883942,0.707754552364349,-0.00129526911769062,-0.706457257270813,0.823212325572968,-0.00744970748201013,-0.567684769630432,0.706647932529449,0.00118149945046753,-0.707564294338226,0.707754552364349,-0.00129526911769062,-0.706457257270813,0.797510921955109,-0.0148526905104518,-0.603121638298035,0.823212325572968,-0.00744970748201013,-0.567684769630432,0.823212325572968,-0.00744970748201013,-0.567684769630432,0.91300904750824,-0.00517212832346559,-0.407906502485275,0.919564604759216,-0.00223215320147574,-0.392932504415512,0.797510921955109,-0.0148526905104518,-0.603121638298035,0.91300904750824,-0.00517212832346559,-0.407906502485275, +0.823212325572968,-0.00744970748201013,-0.567684769630432,0.91300904750824,-0.00517212832346559,-0.407906502485275,0.979056179523468,-0.00132776016835123,-0.203586012125015,0.919564604759216,-0.00223215320147574,-0.392932504415512,0.797510921955109,-0.0148526905104518,-0.603121638298035,0.893069624900818,-0.00892843119800091,-0.449829906225204,0.91300904750824,-0.00517212832346559,-0.407906502485275,0.893069624900818,-0.00892843119800091,-0.449829906225204,0.976661026477814,-0.00214506057091057,-0.214775770902634,0.91300904750824,-0.00517212832346559,-0.407906502485275,0.91300904750824,-0.00517212832346559,-0.407906502485275,0.976661026477814,-0.00214506057091057,-0.214775770902634,0.979056179523468,-0.00132776016835123,-0.203586012125015,0.893069624900818,-0.00892843119800091,-0.449829906225204,0.970513463020325,-0.005615693051368,-0.240981414914131,0.976661026477814,-0.00214506057091057,-0.214775770902634,0.979056179523468,-0.00132776016835123,-0.203586012125015,1,-7.54193679313175e-05,3.17609374178573e-05,1,-5.23563539900351e-05,1.0743438906502e-05,0.976661026477814,-0.00214506057091057,-0.214775770902634,1,-7.54193679313175e-05,3.17609374178573e-05,0.979056179523468,-0.00132776016835123,-0.203586012125015,1,-7.54193679313175e-05,3.17609374178573e-05,0.980043768882751,9.87473904388025e-05,0.198781937360764,1,-5.23563539900351e-05,1.0743438906502e-05,0.970513463020325,-0.005615693051368,-0.240981414914131,0.999999582767487,0.000766760436818004,-0.000516900327056646,0.976661026477814,-0.00214506057091057,-0.214775770902634,0.976661026477814,-0.00214506057091057,-0.214775770902634,0.999999582767487,0.000766760436818004,-0.000516900327056646,1,-7.54193679313175e-05,3.17609374178573e-05,0.970513463020325,-0.005615693051368,-0.240981414914131,0.999997437000275,-0.00160210859030485,0.00160166074056178,0.999999582767487,0.000766760436818004,-0.000516900327056646,1,-7.54193679313175e-05,3.17609374178573e-05,0.979058504104614,0.00135623663663864,0.20357458293438,0.980043768882751,9.87473904388025e-05,0.198781937360764,0.999999582767487,0.000766760436818004,-0.000516900327056646, +0.979058504104614,0.00135623663663864,0.20357458293438,1,-7.54193679313175e-05,3.17609374178573e-05,0.979058504104614,0.00135623663663864,0.20357458293438,0.922146439552307,0.00013823491462972,0.38684093952179,0.980043768882751,9.87473904388025e-05,0.198781937360764,0.999997437000275,-0.00160210859030485,0.00160166074056178,0.976841986179352,0.00345160439610481,0.213934108614922,0.999999582767487,0.000766760436818004,-0.000516900327056646,0.999999582767487,0.000766760436818004,-0.000516900327056646,0.976841986179352,0.00345160439610481,0.213934108614922,0.979058504104614,0.00135623663663864,0.20357458293438,0.999997437000275,-0.00160210859030485,0.00160166074056178,0.97009938955307,0.00381349795497954,0.242678001523018,0.976841986179352,0.00345160439610481,0.213934108614922,0.979058504104614,0.00135623663663864,0.20357458293438,0.91953444480896,0.00203501898795366,0.393004149198532,0.922146439552307,0.00013823491462972,0.38684093952179,0.976841986179352,0.00345160439610481,0.213934108614922,0.91953444480896,0.00203501898795366,0.393004149198532,0.979058504104614,0.00135623663663864,0.20357458293438,0.91953444480896,0.00203501898795366,0.393004149198532,0.829820096492767,0.000241948320763186,0.558030962944031,0.922146439552307,0.00013823491462972,0.38684093952179,0.97009938955307,0.00381349795497954,0.242678001523018,0.913047015666962,0.00532517628744245,0.407819539308548,0.976841986179352,0.00345160439610481,0.213934108614922,0.976841986179352,0.00345160439610481,0.213934108614922,0.913047015666962,0.00532517628744245,0.407819539308548,0.91953444480896,0.00203501898795366,0.393004149198532,0.97009938955307,0.00381349795497954,0.242678001523018,0.892911970615387,0.00852687191218138,0.450150519609451,0.913047015666962,0.00532517628744245,0.407819539308548,0.91953444480896,0.00203501898795366,0.393004149198532,0.827493369579315,0.00164213927928358,0.561473071575165,0.829820096492767,0.000241948320763186,0.558030962944031,0.913047015666962,0.00532517628744245,0.407819539308548,0.827493369579315,0.00164213927928358,0.561473071575165, +0.91953444480896,0.00203501898795366,0.393004149198532,0.827493369579315,0.00164213927928358,0.561473071575165,0.707116961479187,8.34319725981914e-05,0.707096576690674,0.829820096492767,0.000241948320763186,0.558030962944031,0.827493369579315,0.00164213927928358,0.561473071575165,0.707207858562469,0.000397723139030859,0.707005560398102,0.707116961479187,8.34319725981914e-05,0.707096576690674,0.892911970615387,0.00852687191218138,0.450150519609451,0.822408735752106,0.00493762036785483,0.568875670433044,0.913047015666962,0.00532517628744245,0.407819539308548,0.913047015666962,0.00532517628744245,0.407819539308548,0.822408735752106,0.00493762036785483,0.568875670433044,0.827493369579315,0.00164213927928358,0.561473071575165,0.822408735752106,0.00493762036785483,0.568875670433044,0.707207858562469,0.000397723139030859,0.707005560398102,0.827493369579315,0.00164213927928358,0.561473071575165,0.892911970615387,0.00852687191218138,0.450150519609451,0.795759439468384,0.0111095951870084,0.605510890483856,0.822408735752106,0.00493762036785483,0.568875670433044,0.822408735752106,0.00493762036785483,0.568875670433044,0.707564532756805,0.00118393893353641,0.706647753715515,0.707207858562469,0.000397723139030859,0.707005560398102,0.795759439468384,0.0111095951870084,0.605510890483856,0.707564532756805,0.00118393893353641,0.706647753715515,0.822408735752106,0.00493762036785483,0.568875670433044,0.795759439468384,0.0111095951870084,0.605510890483856,0.706359088420868,-0.00149069353938103,0.707852125167847,0.707564532756805,0.00118393893353641,0.706647753715515,0.233452007174492,-0.0137306163087487,-0.972271382808685,-0.00125296192709357,-0.00125296192709357,-0.999998450279236,0.000510042067617178,0.00075533491326496,-0.999999582767487,0.233452007174492,-0.0137306163087487,-0.972271382808685,0.000510042067617178,0.00075533491326496,-0.999999582767487,0.214881896972656,-0.00223395577631891,-0.976637482643127,0.436146825551987,-0.0254504140466452,-0.899515569210052,0.233452007174492,-0.0137306163087487,-0.972271382808685,0.214881896972656,-0.00223395577631891,-0.976637482643127, +0.214881896972656,-0.00223395577631891,-0.976637482643127,0.000510042067617178,0.00075533491326496,-0.999999582767487,-3.28576134052128e-05,-7.78205576352775e-05,-1,0.436146825551987,-0.0254504140466452,-0.899515569210052,0.214881896972656,-0.00223395577631891,-0.976637482643127,0.407936066389084,-0.00542424712330103,-0.912994384765625,0.633310914039612,0.0341848060488701,-0.773142099380493,0.436146825551987,-0.0254504140466452,-0.899515569210052,0.407936066389084,-0.00542424712330103,-0.912994384765625,0.214881896972656,-0.00223395577631891,-0.976637482643127,-3.28576134052128e-05,-7.78205576352775e-05,-1,0.20377491414547,-0.00127685465849936,-0.979016959667206,0.407936066389084,-0.00542424712330103,-0.912994384765625,0.214881896972656,-0.00223395577631891,-0.976637482643127,0.20377491414547,-0.00127685465849936,-0.979016959667206,0.20377491414547,-0.00127685465849936,-0.979016959667206,-3.28576134052128e-05,-7.78205576352775e-05,-1,-0.000583521323278546,-0.00112645758781582,-0.999999165534973,0.633310914039612,0.0341848060488701,-0.773142099380493,0.407936066389084,-0.00542424712330103,-0.912994384765625,0.568265974521637,-0.00739769777283072,-0.822811663150787,0.706329703330994,-0.00155158818233758,-0.707881331443787,0.633310914039612,0.0341848060488701,-0.773142099380493,0.568265974521637,-0.00739769777283072,-0.822811663150787,0.706329703330994,-0.00155158818233758,-0.707881331443787,0.568265974521637,-0.00739769777283072,-0.822811663150787,0.707514226436615,0.00105289742350578,-0.706698298454285,0.407936066389084,-0.00542424712330103,-0.912994384765625,0.20377491414547,-0.00127685465849936,-0.979016959667206,0.393737554550171,-0.00224934774450958,-0.919220149517059,0.568265974521637,-0.00739769777283072,-0.822811663150787,0.407936066389084,-0.00542424712330103,-0.912994384765625,0.393737554550171,-0.00224934774450958,-0.919220149517059,0.20377491414547,-0.00127685465849936,-0.979016959667206,-0.000583521323278546,-0.00112645758781582,-0.999999165534973,0.198937982320786,6.10375764154014e-06,-0.980012059211731, +0.393737554550171,-0.00224934774450958,-0.919220149517059,0.20377491414547,-0.00127685465849936,-0.979016959667206,0.198937982320786,6.10375764154014e-06,-0.980012059211731,0.198937982320786,6.10375764154014e-06,-0.980012059211731,-0.000583521323278546,-0.00112645758781582,-0.999999165534973,-0.000937175180297345,-0.00329941301606596,-0.999994099140167,0.707514226436615,0.00105289742350578,-0.706698298454285,0.568265974521637,-0.00739769777283072,-0.822811663150787,0.562159597873688,-0.00172925158403814,-0.827026963233948,0.568265974521637,-0.00739769777283072,-0.822811663150787,0.393737554550171,-0.00224934774450958,-0.919220149517059,0.562159597873688,-0.00172925158403814,-0.827026963233948,0.707514226436615,0.00105289742350578,-0.706698298454285,0.562159597873688,-0.00172925158403814,-0.827026963233948,0.707193970680237,0.000339905789587647,-0.707019507884979,0.393737554550171,-0.00224934774450958,-0.919220149517059,0.198937982320786,6.10375764154014e-06,-0.980012059211731,0.38784795999527,-7.98691544332542e-05,-0.921723365783691,0.562159597873688,-0.00172925158403814,-0.827026963233948,0.393737554550171,-0.00224934774450958,-0.919220149517059,0.38784795999527,-7.98691544332542e-05,-0.921723365783691,0.198937982320786,6.10375764154014e-06,-0.980012059211731,-0.000937175180297345,-0.00329941301606596,-0.999994099140167,0.196713358163834,1.30104001527798e-06,-0.980461061000824,0.38784795999527,-7.98691544332542e-05,-0.921723365783691,0.198937982320786,6.10375764154014e-06,-0.980012059211731,0.196713358163834,1.30104001527798e-06,-0.980461061000824,-0.000552969519048929,-0.000167504913406447,-0.999999821186066,0.196713358163834,1.30104001527798e-06,-0.980461061000824,-0.000937175180297345,-0.00329941301606596,-0.999994099140167,0.707193970680237,0.000339905789587647,-0.707019507884979,0.562159597873688,-0.00172925158403814,-0.827026963233948,0.558766722679138,-9.55941068241373e-05,-0.829324841499329,0.562159597873688,-0.00172925158403814,-0.827026963233948,0.38784795999527,-7.98691544332542e-05,-0.921723365783691, +0.558766722679138,-9.55941068241373e-05,-0.829324841499329,0.707193970680237,0.000339905789587647,-0.707019507884979,0.558766722679138,-9.55941068241373e-05,-0.829324841499329,0.707111239433289,3.36367484123912e-05,-0.707102358341217,-0.000552969519048929,-0.000167504913406447,-0.999999821186066,0.19878189265728,9.86898521659896e-05,-0.980043768882751,0.196713358163834,1.30104001527798e-06,-0.980461061000824,3.17272388201673e-05,-7.53394124330953e-05,-1,0.19878189265728,9.86898521659896e-05,-0.980043768882751,-0.000552969519048929,-0.000167504913406447,-0.999999821186066,0.38784795999527,-7.98691544332542e-05,-0.921723365783691,0.196713358163834,1.30104001527798e-06,-0.980461061000824,0.384670585393906,-5.6344001677644e-06,-0.923053920269012,0.558766722679138,-9.55941068241373e-05,-0.829324841499329,0.38784795999527,-7.98691544332542e-05,-0.921723365783691,0.384670585393906,-5.6344001677644e-06,-0.923053920269012,0.19878189265728,9.86898521659896e-05,-0.980043768882751,0.384670585393906,-5.6344001677644e-06,-0.923053920269012,0.196713358163834,1.30104001527798e-06,-0.980461061000824,0.707111239433289,3.36367484123912e-05,-0.707102358341217,0.558766722679138,-9.55941068241373e-05,-0.829324841499329,0.556791067123413,-7.67697144965496e-07,-0.830652594566345,0.558766722679138,-9.55941068241373e-05,-0.829324841499329,0.384670585393906,-5.6344001677644e-06,-0.923053920269012,0.556791067123413,-7.67697144965496e-07,-0.830652594566345,0.707111239433289,3.36367484123912e-05,-0.707102358341217,0.556791067123413,-7.67697144965496e-07,-0.830652594566345,0.707107067108154,4.54328255727887e-05,-0.707106530666351,3.17272388201673e-05,-7.53394124330953e-05,-1,0.203574508428574,0.00135625095572323,-0.979058504104614,0.19878189265728,9.86898521659896e-05,-0.980043768882751,-0.000517006090376526,0.000766917306464165,-0.999999582767487,0.203574508428574,0.00135625095572323,-0.979058504104614,3.17272388201673e-05,-7.53394124330953e-05,-1,0.19878189265728,9.86898521659896e-05,-0.980043768882751,0.386840909719467,0.000138280374812894,-0.922146439552307, +0.384670585393906,-5.6344001677644e-06,-0.923053920269012,0.386840909719467,0.000138280374812894,-0.922146439552307,0.556791067123413,-7.67697144965496e-07,-0.830652594566345,0.384670585393906,-5.6344001677644e-06,-0.923053920269012,0.203574508428574,0.00135625095572323,-0.979058504104614,0.386840909719467,0.000138280374812894,-0.922146439552307,0.19878189265728,9.86898521659896e-05,-0.980043768882751,0.558031022548676,0.000241887610172853,-0.829820096492767,0.707107067108154,4.54328255727887e-05,-0.707106530666351,0.556791067123413,-7.67697144965496e-07,-0.830652594566345,0.386840909719467,0.000138280374812894,-0.922146439552307,0.558031022548676,0.000241887610172853,-0.829820096492767,0.556791067123413,-7.67697144965496e-07,-0.830652594566345,0.558031022548676,0.000241887610172853,-0.829820096492767,0.70709627866745,8.34076490718871e-05,-0.707117259502411,0.707107067108154,4.54328255727887e-05,-0.707106530666351,-0.000517006090376526,0.000766917306464165,-0.999999582767487,0.213934183120728,0.00345143279992044,-0.976841986179352,0.203574508428574,0.00135625095572323,-0.979058504104614,-0.00319789303466678,0.00319878710433841,-0.999989748001099,0.213934183120728,0.00345143279992044,-0.976841986179352,-0.000517006090376526,0.000766917306464165,-0.999999582767487,-0.00319789303466678,0.00319878710433841,-0.999989748001099,0.239474445581436,0.00721521209925413,-0.970875859260559,0.213934183120728,0.00345143279992044,-0.976841986179352,0.203574508428574,0.00135625095572323,-0.979058504104614,0.393004149198532,0.0020349994301796,-0.91953444480896,0.386840909719467,0.000138280374812894,-0.922146439552307,0.393004149198532,0.0020349994301796,-0.91953444480896,0.558031022548676,0.000241887610172853,-0.829820096492767,0.386840909719467,0.000138280374812894,-0.922146439552307,0.213934183120728,0.00345143279992044,-0.976841986179352,0.393004149198532,0.0020349994301796,-0.91953444480896,0.203574508428574,0.00135625095572323,-0.979058504104614,0.561473071575165,0.00164207792840898,-0.827493369579315,0.70709627866745,8.34076490718871e-05,-0.707117259502411, +0.558031022548676,0.000241887610172853,-0.829820096492767,0.393004149198532,0.0020349994301796,-0.91953444480896,0.561473071575165,0.00164207792840898,-0.827493369579315,0.558031022548676,0.000241887610172853,-0.829820096492767,0.561473071575165,0.00164207792840898,-0.827493369579315,0.707005798816681,0.000393001100746915,-0.707207679748535,0.70709627866745,8.34076490718871e-05,-0.707117259502411,0.239474445581436,0.00721521209925413,-0.970875859260559,0.407819449901581,0.00532530527561903,-0.913047075271606,0.213934183120728,0.00345143279992044,-0.976841986179352,0.213934183120728,0.00345143279992044,-0.976841986179352,0.407819449901581,0.00532530527561903,-0.913047075271606,0.393004149198532,0.0020349994301796,-0.91953444480896,0.407819449901581,0.00532530527561903,-0.913047075271606,0.561473071575165,0.00164207792840898,-0.827493369579315,0.393004149198532,0.0020349994301796,-0.91953444480896,0.239474445581436,0.00721521209925413,-0.970875859260559,0.448829919099808,0.0101798232644796,-0.893559217453003,0.407819449901581,0.00532530527561903,-0.913047075271606,0.568875670433044,0.00493761943653226,-0.822408735752106,0.707005798816681,0.000393001100746915,-0.707207679748535,0.561473071575165,0.00164207792840898,-0.827493369579315,0.407819449901581,0.00532530527561903,-0.913047075271606,0.568875670433044,0.00493761943653226,-0.822408735752106,0.561473071575165,0.00164207792840898,-0.827493369579315,0.448829919099808,0.0101798232644796,-0.893559217453003,0.568875670433044,0.00493761943653226,-0.822408735752106,0.407819449901581,0.00532530527561903,-0.913047075271606,0.568875670433044,0.00493761943653226,-0.822408735752106,0.706647932529449,0.00118149945046753,-0.707564294338226,0.707005798816681,0.000393001100746915,-0.707207679748535,0.448829919099808,0.0101798232644796,-0.893559217453003,0.603753447532654,0.0138649940490723,-0.797050535678864,0.568875670433044,0.00493761943653226,-0.822408735752106,0.603753447532654,0.0138649940490723,-0.797050535678864,0.706647932529449,0.00118149945046753,-0.707564294338226,0.568875670433044,0.00493761943653226,-0.822408735752106, +0.603753447532654,0.0138649940490723,-0.797050535678864,0.707754552364349,-0.00129526911769062,-0.706457257270813,0.706647932529449,0.00118149945046753,-0.707564294338226,-0.617437779903412,-0.00789995584636927,-0.786580085754395,-0.707941770553589,-0.00167284219060093,-0.706268846988678,-0.706698298454285,0.00105298846028745,-0.70751428604126,-0.617437779903412,-0.00789995584636927,-0.786580085754395,-0.706698298454285,0.00105298846028745,-0.70751428604126,-0.569278299808502,0.00525812245905399,-0.822128057479858,-0.463165253400803,-0.00838539842516184,-0.886232256889343,-0.617437779903412,-0.00789995584636927,-0.786580085754395,-0.569278299808502,0.00525812245905399,-0.822128057479858,-0.569278299808502,0.00525812245905399,-0.822128057479858,-0.706698298454285,0.00105298846028745,-0.70751428604126,-0.707019448280334,0.000339981954311952,-0.707193970680237,-0.463165253400803,-0.00838539842516184,-0.886232256889343,-0.569278299808502,0.00525812245905399,-0.822128057479858,-0.40789720416069,0.0054909442551434,-0.913011372089386,-0.234416931867599,0.0127107379958034,-0.972053050994873,-0.463165253400803,-0.00838539842516184,-0.886232256889343,-0.40789720416069,0.0054909442551434,-0.913011372089386,-0.569278299808502,0.00525812245905399,-0.822128057479858,-0.707019448280334,0.000339981954311952,-0.707193970680237,-0.56216424703598,0.0017125770682469,-0.827023863792419,-0.40789720416069,0.0054909442551434,-0.913011372089386,-0.569278299808502,0.00525812245905399,-0.822128057479858,-0.56216424703598,0.0017125770682469,-0.827023863792419,-0.56216424703598,0.0017125770682469,-0.827023863792419,-0.707019448280334,0.000339981954311952,-0.707193970680237,-0.707083582878113,0.000172480955370702,-0.707129955291748,-0.234416931867599,0.0127107379958034,-0.972053050994873,-0.40789720416069,0.0054909442551434,-0.913011372089386,-0.214038878679276,0.00354191451333463,-0.976818740367889,-0.00125296192709357,-0.00125296192709357,-0.999998450279236,-0.234416931867599,0.0127107379958034,-0.972053050994873,-0.214038878679276,0.00354191451333463,-0.976818740367889, +-0.00125296192709357,-0.00125296192709357,-0.999998450279236,-0.214038878679276,0.00354191451333463,-0.976818740367889,0.000510042067617178,0.00075533491326496,-0.999999582767487,-0.56216424703598,0.0017125770682469,-0.827023863792419,-0.707083582878113,0.000172480955370702,-0.707129955291748,-0.559880912303925,0.000589661707635969,-0.828572869300842,-0.559880912303925,0.000589661707635969,-0.828572869300842,-0.707083582878113,0.000172480955370702,-0.707129955291748,-0.707106411457062,4.53139145975001e-05,-0.707107126712799,-0.40789720416069,0.0054909442551434,-0.913011372089386,-0.56216424703598,0.0017125770682469,-0.827023863792419,-0.39385199546814,0.00193417340051383,-0.919171810150146,-0.214038878679276,0.00354191451333463,-0.976818740367889,-0.40789720416069,0.0054909442551434,-0.913011372089386,-0.39385199546814,0.00193417340051383,-0.919171810150146,-0.39385199546814,0.00193417340051383,-0.919171810150146,-0.56216424703598,0.0017125770682469,-0.827023863792419,-0.559880912303925,0.000589661707635969,-0.828572869300842,0.000510042067617178,0.00075533491326496,-0.999999582767487,-0.214038878679276,0.00354191451333463,-0.976818740367889,-0.203779280185699,0.00126725144218653,-0.979016005992889,-0.214038878679276,0.00354191451333463,-0.976818740367889,-0.39385199546814,0.00193417340051383,-0.919171810150146,-0.203779280185699,0.00126725144218653,-0.979016005992889,0.000510042067617178,0.00075533491326496,-0.999999582767487,-0.203779280185699,0.00126725144218653,-0.979016005992889,-3.28576134052128e-05,-7.78205576352775e-05,-1,-0.559880912303925,0.000589661707635969,-0.828572869300842,-0.707106411457062,4.53139145975001e-05,-0.707107126712799,-0.559126794338226,5.31833029526751e-05,-0.829082131385803,-0.707126200199127,0.000153047789353877,-0.707087337970734,-0.559126794338226,5.31833029526751e-05,-0.829082131385803,-0.707106411457062,4.53139145975001e-05,-0.707107126712799,-0.39385199546814,0.00193417340051383,-0.919171810150146,-0.559880912303925,0.000589661707635969,-0.828572869300842,-0.389609724283218,0.000736864691134542,-0.920979738235474, +-0.203779280185699,0.00126725144218653,-0.979016005992889,-0.39385199546814,0.00193417340051383,-0.919171810150146,-0.389609724283218,0.000736864691134542,-0.920979738235474,-0.389609724283218,0.000736864691134542,-0.920979738235474,-0.559880912303925,0.000589661707635969,-0.828572869300842,-0.559126794338226,5.31833029526751e-05,-0.829082131385803,-3.28576134052128e-05,-7.78205576352775e-05,-1,-0.203779280185699,0.00126725144218653,-0.979016005992889,-0.200335890054703,0.00040177465416491,-0.979727208614349,-0.203779280185699,0.00126725144218653,-0.979016005992889,-0.389609724283218,0.000736864691134542,-0.920979738235474,-0.200335890054703,0.00040177465416491,-0.979727208614349,-3.28576134052128e-05,-7.78205576352775e-05,-1,-0.200335890054703,0.00040177465416491,-0.979727208614349,-0.000583521323278546,-0.00112645758781582,-0.999999165534973,-0.707126200199127,0.000153047789353877,-0.707087337970734,-0.559176325798035,-0.000455452303867787,-0.829048633575439,-0.559126794338226,5.31833029526751e-05,-0.829082131385803,-0.70720762014389,0.000392925459891558,-0.707005798816681,-0.559176325798035,-0.000455452303867787,-0.829048633575439,-0.707126200199127,0.000153047789353877,-0.707087337970734,-0.389609724283218,0.000736864691134542,-0.920979738235474,-0.559126794338226,5.31833029526751e-05,-0.829082131385803,-0.38835272192955,7.60684852139093e-05,-0.921510815620422,-0.200335890054703,0.00040177465416491,-0.979727208614349,-0.389609724283218,0.000736864691134542,-0.920979738235474,-0.38835272192955,7.60684852139093e-05,-0.921510815620422,-0.559176325798035,-0.000455452303867787,-0.829048633575439,-0.38835272192955,7.60684852139093e-05,-0.921510815620422,-0.559126794338226,5.31833029526751e-05,-0.829082131385803,-0.000583521323278546,-0.00112645758781582,-0.999999165534973,-0.200335890054703,0.00040177465416491,-0.979727208614349,-0.199867367744446,-0.00331251230090857,-0.979817390441895,-0.200335890054703,0.00040177465416491,-0.979727208614349,-0.38835272192955,7.60684852139093e-05,-0.921510815620422,-0.199867367744446,-0.00331251230090857,-0.979817390441895, +-0.000583521323278546,-0.00112645758781582,-0.999999165534973,-0.199867367744446,-0.00331251230090857,-0.979817390441895,-0.000937175180297345,-0.00329941301606596,-0.999994099140167,-0.70720762014389,0.000392925459891558,-0.707005798816681,-0.561412870883942,-0.00183657719753683,-0.827533841133118,-0.559176325798035,-0.000455452303867787,-0.829048633575439,-0.707564353942871,0.00118152284994721,-0.706647932529449,-0.561412870883942,-0.00183657719753683,-0.827533841133118,-0.70720762014389,0.000392925459891558,-0.707005798816681,-0.559176325798035,-0.000455452303867787,-0.829048633575439,-0.388628274202347,-0.000554730708245188,-0.921394467353821,-0.38835272192955,7.60684852139093e-05,-0.921510815620422,-0.388628274202347,-0.000554730708245188,-0.921394467353821,-0.199867367744446,-0.00331251230090857,-0.979817390441895,-0.38835272192955,7.60684852139093e-05,-0.921510815620422,-0.561412870883942,-0.00183657719753683,-0.827533841133118,-0.388628274202347,-0.000554730708245188,-0.921394467353821,-0.559176325798035,-0.000455452303867787,-0.829048633575439,-0.200186312198639,-0.00164540892001241,-0.979756474494934,-0.000937175180297345,-0.00329941301606596,-0.999994099140167,-0.199867367744446,-0.00331251230090857,-0.979817390441895,-0.388628274202347,-0.000554730708245188,-0.921394467353821,-0.200186312198639,-0.00164540892001241,-0.979756474494934,-0.199867367744446,-0.00331251230090857,-0.979817390441895,-0.200186312198639,-0.00164540892001241,-0.979756474494934,-0.000552969519048929,-0.000167504913406447,-0.999999821186066,-0.000937175180297345,-0.00329941301606596,-0.999994099140167,-0.707564353942871,0.00118152284994721,-0.706647932529449,-0.567684710025787,-0.0074498332105577,-0.823212325572968,-0.561412870883942,-0.00183657719753683,-0.827533841133118,-0.706359386444092,-0.00149013777263463,-0.707851827144623,-0.567684710025787,-0.0074498332105577,-0.823212325572968,-0.707564353942871,0.00118152284994721,-0.706647932529449,-0.706359386444092,-0.00149013777263463,-0.707851827144623,-0.604856967926025,-0.0121362982317805,-0.796241641044617, +-0.567684710025787,-0.0074498332105577,-0.823212325572968,-0.561412870883942,-0.00183657719753683,-0.827533841133118,-0.392932534217834,-0.002232083119452,-0.919564604759216,-0.388628274202347,-0.000554730708245188,-0.921394467353821,-0.392932534217834,-0.002232083119452,-0.919564604759216,-0.200186312198639,-0.00164540892001241,-0.979756474494934,-0.388628274202347,-0.000554730708245188,-0.921394467353821,-0.567684710025787,-0.0074498332105577,-0.823212325572968,-0.392932534217834,-0.002232083119452,-0.919564604759216,-0.561412870883942,-0.00183657719753683,-0.827533841133118,-0.203586027026176,-0.00132784980814904,-0.979056179523468,-0.000552969519048929,-0.000167504913406447,-0.999999821186066,-0.200186312198639,-0.00164540892001241,-0.979756474494934,-0.392932534217834,-0.002232083119452,-0.919564604759216,-0.203586027026176,-0.00132784980814904,-0.979056179523468,-0.200186312198639,-0.00164540892001241,-0.979756474494934,-0.203586027026176,-0.00132784980814904,-0.979056179523468,3.17272388201673e-05,-7.53394124330953e-05,-1,-0.000552969519048929,-0.000167504913406447,-0.999999821186066,-0.604856967926025,-0.0121362982317805,-0.796241641044617,-0.40790656208992,-0.00517204636707902,-0.91300904750824,-0.567684710025787,-0.0074498332105577,-0.823212325572968,-0.567684710025787,-0.0074498332105577,-0.823212325572968,-0.40790656208992,-0.00517204636707902,-0.91300904750824,-0.392932534217834,-0.002232083119452,-0.919564604759216,-0.40790656208992,-0.00517204636707902,-0.91300904750824,-0.203586027026176,-0.00132784980814904,-0.979056179523468,-0.392932534217834,-0.002232083119452,-0.919564604759216,-0.604856967926025,-0.0121362982317805,-0.796241641044617,-0.451166123151779,-0.00725378422066569,-0.892410516738892,-0.40790656208992,-0.00517204636707902,-0.91300904750824,-0.214775741100311,-0.00214513717219234,-0.976661026477814,3.17272388201673e-05,-7.53394124330953e-05,-1,-0.203586027026176,-0.00132784980814904,-0.979056179523468,-0.40790656208992,-0.00517204636707902,-0.91300904750824,-0.214775741100311,-0.00214513717219234,-0.976661026477814, +-0.203586027026176,-0.00132784980814904,-0.979056179523468,-0.451166123151779,-0.00725378422066569,-0.892410516738892,-0.214775741100311,-0.00214513717219234,-0.976661026477814,-0.40790656208992,-0.00517204636707902,-0.91300904750824,-0.214775741100311,-0.00214513717219234,-0.976661026477814,-0.000517006090376526,0.000766917306464165,-0.999999582767487,3.17272388201673e-05,-7.53394124330953e-05,-1,-0.451166123151779,-0.00725378422066569,-0.892410516738892,-0.244203969836235,-0.0021910525392741,-0.969721436500549,-0.214775741100311,-0.00214513717219234,-0.976661026477814,-0.244203969836235,-0.0021910525392741,-0.969721436500549,-0.000517006090376526,0.000766917306464165,-0.999999582767487,-0.214775741100311,-0.00214513717219234,-0.976661026477814,-0.244203969836235,-0.0021910525392741,-0.969721436500549,-0.00319789303466678,0.00319878710433841,-0.999989748001099,-0.000517006090376526,0.000766917306464165,-0.999999582767487,-0.772563457489014,-0.0352805256843567,0.633956551551819,-0.706330001354218,-0.00155105604790151,0.707880973815918,-0.707513391971588,0.00105078145861626,0.706699132919312,-0.772563457489014,-0.0352805256843567,0.633956551551819,-0.707513391971588,0.00105078145861626,0.706699132919312,-0.82212883234024,0.00526090105995536,0.569277167320251,-0.899949133396149,0.0266384053975344,0.435180395841599,-0.772563457489014,-0.0352805256843567,0.633956551551819,-0.82212883234024,0.00526090105995536,0.569277167320251,-0.82212883234024,0.00526090105995536,0.569277167320251,-0.707513391971588,0.00105078145861626,0.706699132919312,-0.707194149494171,0.000340722472174093,0.707019329071045,-0.899949133396149,0.0266384053975344,0.435180395841599,-0.82212883234024,0.00526090105995536,0.569277167320251,-0.913011252880096,0.00548931630328298,0.407897412776947,-0.972596287727356,0.0152670107781887,0.231998756527901,-0.899949133396149,0.0266384053975344,0.435180395841599,-0.913011252880096,0.00548931630328298,0.407897412776947,-0.82212883234024,0.00526090105995536,0.569277167320251,-0.707194149494171,0.000340722472174093,0.707019329071045, +-0.82702362537384,0.00171188835520297,0.562164545059204,-0.913011252880096,0.00548931630328298,0.407897412776947,-0.82212883234024,0.00526090105995536,0.569277167320251,-0.82702362537384,0.00171188835520297,0.562164545059204,-0.82702362537384,0.00171188835520297,0.562164545059204,-0.707194149494171,0.000340722472174093,0.707019329071045,-0.707130193710327,0.000173983964486979,0.707083344459534,-0.972596287727356,0.0152670107781887,0.231998756527901,-0.913011252880096,0.00548931630328298,0.407897412776947,-0.976818680763245,0.0035419063642621,0.21403893828392,-0.999992609024048,0.00272389035671949,-0.00272389058955014,-0.972596287727356,0.0152670107781887,0.231998756527901,-0.976818680763245,0.0035419063642621,0.21403893828392,-0.82702362537384,0.00171188835520297,0.562164545059204,-0.707130193710327,0.000173983964486979,0.707083344459534,-0.828572690486908,0.000587897724471986,0.559881210327148,-0.828572690486908,0.000587897724471986,0.559881210327148,-0.707130193710327,0.000173983964486979,0.707083344459534,-0.707107126712799,4.52838648925535e-05,0.707106471061707,-0.913011252880096,0.00548931630328298,0.407897412776947,-0.82702362537384,0.00171188835520297,0.562164545059204,-0.919171631336212,0.00192958232946694,0.39385250210762,-0.976818680763245,0.0035419063642621,0.21403893828392,-0.913011252880096,0.00548931630328298,0.407897412776947,-0.919171631336212,0.00192958232946694,0.39385250210762,-0.919171631336212,0.00192958232946694,0.39385250210762,-0.82702362537384,0.00171188835520297,0.562164545059204,-0.828572690486908,0.000587897724471986,0.559881210327148,-0.999992609024048,0.00272389035671949,-0.00272389058955014,-0.976818680763245,0.0035419063642621,0.21403893828392,-0.999999582767487,0.00075535400537774,-0.000510055164340883,-0.971715927124023,-0.0111520681530237,-0.235889345407486,-0.999992609024048,0.00272389035671949,-0.00272389058955014,-0.999999582767487,0.00075535400537774,-0.000510055164340883,-0.828572690486908,0.000587897724471986,0.559881210327148,-0.707107126712799,4.52838648925535e-05,0.707106471061707, +-0.829082131385803,5.31579353264533e-05,0.559126794338226,-0.707087278366089,0.00015145271026995,0.707126259803772,-0.829082131385803,5.31579353264533e-05,0.559126794338226,-0.707107126712799,4.52838648925535e-05,0.707106471061707,-0.919171631336212,0.00192958232946694,0.39385250210762,-0.828572690486908,0.000587897724471986,0.559881210327148,-0.920979976654053,0.000736800895538181,0.389609277248383,-0.920979976654053,0.000736800895538181,0.389609277248383,-0.828572690486908,0.000587897724471986,0.559881210327148,-0.829082131385803,5.31579353264533e-05,0.559126794338226,-0.976818680763245,0.0035419063642621,0.21403893828392,-0.919171631336212,0.00192958232946694,0.39385250210762,-0.979016005992889,0.00126731663476676,0.203779548406601,-0.999999582767487,0.00075535400537774,-0.000510055164340883,-0.976818680763245,0.0035419063642621,0.21403893828392,-0.979016005992889,0.00126731663476676,0.203779548406601,-0.979016005992889,0.00126731663476676,0.203779548406601,-0.919171631336212,0.00192958232946694,0.39385250210762,-0.920979976654053,0.000736800895538181,0.389609277248383,-0.971715927124023,-0.0111520681530237,-0.235889345407486,-0.999999582767487,0.00075535400537774,-0.000510055164340883,-0.976637482643127,-0.00223405822180212,-0.214881807565689,-0.885803580284119,0.00940424576401711,-0.463965117931366,-0.971715927124023,-0.0111520681530237,-0.235889345407486,-0.976637482643127,-0.00223405822180212,-0.214881807565689,-0.707087278366089,0.00015145271026995,0.707126259803772,-0.829048633575439,-0.000455445435363799,0.559176325798035,-0.829082131385803,5.31579353264533e-05,0.559126794338226,-0.707006216049194,0.00038740030140616,0.707207202911377,-0.829048633575439,-0.000455445435363799,0.559176325798035,-0.707087278366089,0.00015145271026995,0.707126259803772,-0.999999582767487,0.00075535400537774,-0.000510055164340883,-0.979016005992889,0.00126731663476676,0.203779548406601,-1,-7.71350751165301e-05,3.25682267430238e-05,-0.976637482643127,-0.00223405822180212,-0.214881807565689,-0.999999582767487,0.00075535400537774,-0.000510055164340883, +-1,-7.71350751165301e-05,3.25682267430238e-05,-0.920979976654053,0.000736800895538181,0.389609277248383,-0.829082131385803,5.31579353264533e-05,0.559126794338226,-0.921510815620422,7.60702532716095e-05,0.388352662324905,-0.829048633575439,-0.000455445435363799,0.559176325798035,-0.921510815620422,7.60702532716095e-05,0.388352662324905,-0.829082131385803,5.31579353264533e-05,0.559126794338226,-0.979016005992889,0.00126731663476676,0.203779548406601,-0.920979976654053,0.000736800895538181,0.389609277248383,-0.979727208614349,0.000404179038014263,0.200335755944252,-1,-7.71350751165301e-05,3.25682267430238e-05,-0.979016005992889,0.00126731663476676,0.203779548406601,-0.979727208614349,0.000404179038014263,0.200335755944252,-0.979727208614349,0.000404179038014263,0.200335755944252,-0.920979976654053,0.000736800895538181,0.389609277248383,-0.921510815620422,7.60702532716095e-05,0.388352662324905,-0.885803580284119,0.00940424576401711,-0.463965117931366,-0.976637482643127,-0.00223405822180212,-0.214881807565689,-0.912994384765625,-0.00542437471449375,-0.407936006784439,-0.787114143371582,0.00681642955169082,-0.616769731044769,-0.885803580284119,0.00940424576401711,-0.463965117931366,-0.912994384765625,-0.00542437471449375,-0.407936006784439,-0.707006216049194,0.00038740030140616,0.707207202911377,-0.827533841133118,-0.00183662457857281,0.561412870883942,-0.829048633575439,-0.000455445435363799,0.559176325798035,-0.706647396087646,0.00118098198436201,0.707564890384674,-0.827533841133118,-0.00183662457857281,0.561412870883942,-0.707006216049194,0.00038740030140616,0.707207202911377,-0.976637482643127,-0.00223405822180212,-0.214881807565689,-1,-7.71350751165301e-05,3.25682267430238e-05,-0.979016959667206,-0.00127772928681225,-0.203774765133858,-0.912994384765625,-0.00542437471449375,-0.407936006784439,-0.976637482643127,-0.00223405822180212,-0.214881807565689,-0.979016959667206,-0.00127772928681225,-0.203774765133858,-1,-7.71350751165301e-05,3.25682267430238e-05,-0.979727208614349,0.000404179038014263,0.200335755944252,-0.999999225139618,-0.00119642738718539,0.000253099540714175, +-0.979016959667206,-0.00127772928681225,-0.203774765133858,-1,-7.71350751165301e-05,3.25682267430238e-05,-0.999999225139618,-0.00119642738718539,0.000253099540714175,-0.979727208614349,0.000404179038014263,0.200335755944252,-0.921510815620422,7.60702532716095e-05,0.388352662324905,-0.979817390441895,-0.00331181823275983,0.199867367744446,-0.999999225139618,-0.00119642738718539,0.000253099540714175,-0.979727208614349,0.000404179038014263,0.200335755944252,-0.979817390441895,-0.00331181823275983,0.199867367744446,-0.829048633575439,-0.000455445435363799,0.559176325798035,-0.921394467353821,-0.000554741418454796,0.388628274202347,-0.921510815620422,7.60702532716095e-05,0.388352662324905,-0.827533841133118,-0.00183662457857281,0.561412870883942,-0.921394467353821,-0.000554741418454796,0.388628274202347,-0.829048633575439,-0.000455445435363799,0.559176325798035,-0.921394467353821,-0.000554741418454796,0.388628274202347,-0.979817390441895,-0.00331181823275983,0.199867367744446,-0.921510815620422,7.60702532716095e-05,0.388352662324905,-0.787114143371582,0.00681642955169082,-0.616769731044769,-0.912994384765625,-0.00542437471449375,-0.407936006784439,-0.822811663150787,-0.00739769544452429,-0.568265974521637,-0.707941770553589,-0.00167284219060093,-0.706268846988678,-0.787114143371582,0.00681642955169082,-0.616769731044769,-0.822811663150787,-0.00739769544452429,-0.568265974521637,-0.707941770553589,-0.00167284219060093,-0.706268846988678,-0.822811663150787,-0.00739769544452429,-0.568265974521637,-0.706698298454285,0.00105298846028745,-0.70751428604126,-0.912994384765625,-0.00542437471449375,-0.407936006784439,-0.979016959667206,-0.00127772928681225,-0.203774765133858,-0.919220149517059,-0.00224934727884829,-0.393737554550171,-0.822811663150787,-0.00739769544452429,-0.568265974521637,-0.912994384765625,-0.00542437471449375,-0.407936006784439,-0.919220149517059,-0.00224934727884829,-0.393737554550171,-0.706698298454285,0.00105298846028745,-0.70751428604126,-0.822811663150787,-0.00739769544452429,-0.568265974521637,-0.827026963233948,-0.0017292988486588,-0.562159597873688, +-0.822811663150787,-0.00739769544452429,-0.568265974521637,-0.919220149517059,-0.00224934727884829,-0.393737554550171,-0.827026963233948,-0.0017292988486588,-0.562159597873688,-0.706698298454285,0.00105298846028745,-0.70751428604126,-0.827026963233948,-0.0017292988486588,-0.562159597873688,-0.707019448280334,0.000339981954311952,-0.707193970680237,-0.979016959667206,-0.00127772928681225,-0.203774765133858,-0.999999225139618,-0.00119642738718539,0.000253099540714175,-0.979685604572296,0.0005895936046727,-0.200538694858551,-0.919220149517059,-0.00224934727884829,-0.393737554550171,-0.979016959667206,-0.00127772928681225,-0.203774765133858,-0.979685604572296,0.0005895936046727,-0.200538694858551,-0.999999225139618,-0.00119642738718539,0.000253099540714175,-0.979817390441895,-0.00331181823275983,0.199867367744446,-1,-2.52380541496677e-05,1.83510792339803e-07,-0.979685604572296,0.0005895936046727,-0.200538694858551,-0.999999225139618,-0.00119642738718539,0.000253099540714175,-1,-2.52380541496677e-05,1.83510792339803e-07,-0.921394467353821,-0.000554741418454796,0.388628274202347,-0.979756474494934,-0.00164541706908494,0.200186192989349,-0.979817390441895,-0.00331181823275983,0.199867367744446,-0.979756474494934,-0.00164541706908494,0.200186192989349,-1,-2.52380541496677e-05,1.83510792339803e-07,-0.979817390441895,-0.00331181823275983,0.199867367744446,-0.707019448280334,0.000339981954311952,-0.707193970680237,-0.827026963233948,-0.0017292988486588,-0.562159597873688,-0.828568994998932,-0.000553633726667613,-0.559886693954468,-0.707019448280334,0.000339981954311952,-0.707193970680237,-0.828568994998932,-0.000553633726667613,-0.559886693954468,-0.707083582878113,0.000172480955370702,-0.707129955291748,-0.827026963233948,-0.0017292988486588,-0.562159597873688,-0.919220149517059,-0.00224934727884829,-0.393737554550171,-0.92097932100296,-0.000731348583940417,-0.38961073756218,-0.919220149517059,-0.00224934727884829,-0.393737554550171,-0.979685604572296,0.0005895936046727,-0.200538694858551,-0.92097932100296,-0.000731348583940417,-0.38961073756218, +-0.827026963233948,-0.0017292988486588,-0.562159597873688,-0.92097932100296,-0.000731348583940417,-0.38961073756218,-0.828568994998932,-0.000553633726667613,-0.559886693954468,-0.979685604572296,0.0005895936046727,-0.200538694858551,-1,-2.52380541496677e-05,1.83510792339803e-07,-0.97981733083725,0.00330622680485249,-0.199867486953735,-0.92097932100296,-0.000731348583940417,-0.38961073756218,-0.979685604572296,0.0005895936046727,-0.200538694858551,-0.97981733083725,0.00330622680485249,-0.199867486953735,-0.707083582878113,0.000172480955370702,-0.707129955291748,-0.828568994998932,-0.000553633726667613,-0.559886693954468,-0.829082131385803,-5.51385564904194e-05,-0.559126794338226,-0.707083582878113,0.000172480955370702,-0.707129955291748,-0.829082131385803,-5.51385564904194e-05,-0.559126794338226,-0.707106411457062,4.53139145975001e-05,-0.707107126712799,-0.828568994998932,-0.000553633726667613,-0.559886693954468,-0.92097932100296,-0.000731348583940417,-0.38961073756218,-0.921510815620422,-7.28089435142465e-05,-0.38835272192955,-0.92097932100296,-0.000731348583940417,-0.38961073756218,-0.97981733083725,0.00330622680485249,-0.199867486953735,-0.921510815620422,-7.28089435142465e-05,-0.38835272192955,-0.828568994998932,-0.000553633726667613,-0.559886693954468,-0.921510815620422,-7.28089435142465e-05,-0.38835272192955,-0.829082131385803,-5.51385564904194e-05,-0.559126794338226,-0.999999523162842,0.000929463014472276,0.00018962325702887,-0.97981733083725,0.00330622680485249,-0.199867486953735,-1,-2.52380541496677e-05,1.83510792339803e-07,-0.979756474494934,-0.00164541706908494,0.200186192989349,-0.999999523162842,0.000929463014472276,0.00018962325702887,-1,-2.52380541496677e-05,1.83510792339803e-07,-0.919564664363861,-0.00223202211782336,0.392932385206223,-0.979756474494934,-0.00164541706908494,0.200186192989349,-0.921394467353821,-0.000554741418454796,0.388628274202347,-0.827533841133118,-0.00183662457857281,0.561412870883942,-0.919564664363861,-0.00223202211782336,0.392932385206223,-0.921394467353821,-0.000554741418454796,0.388628274202347, +-0.829053521156311,0.000502612092532218,-0.559169054031372,-0.707106411457062,4.53139145975001e-05,-0.707107126712799,-0.829082131385803,-5.51385564904194e-05,-0.559126794338226,-0.829053521156311,0.000502612092532218,-0.559169054031372,-0.707126200199127,0.000153047789353877,-0.707087337970734,-0.707106411457062,4.53139145975001e-05,-0.707107126712799,-0.921393632888794,0.000543325615581125,-0.388630330562592,-0.829082131385803,-5.51385564904194e-05,-0.559126794338226,-0.921510815620422,-7.28089435142465e-05,-0.38835272192955,-0.921393632888794,0.000543325615581125,-0.388630330562592,-0.829053521156311,0.000502612092532218,-0.559169054031372,-0.829082131385803,-5.51385564904194e-05,-0.559126794338226,-0.979705810546875,0.000353293231455609,-0.200440421700478,-0.921510815620422,-7.28089435142465e-05,-0.38835272192955,-0.97981733083725,0.00330622680485249,-0.199867486953735,-0.999999523162842,0.000929463014472276,0.00018962325702887,-0.979705810546875,0.000353293231455609,-0.200440421700478,-0.97981733083725,0.00330622680485249,-0.199867486953735,-0.979705810546875,0.000353293231455609,-0.200440421700478,-0.921393632888794,0.000543325615581125,-0.388630330562592,-0.921510815620422,-7.28089435142465e-05,-0.38835272192955,-0.979056179523468,-0.00132778799161315,0.20358581840992,-0.999999523162842,0.000929463014472276,0.00018962325702887,-0.979756474494934,-0.00164541706908494,0.200186192989349,-0.919564664363861,-0.00223202211782336,0.392932385206223,-0.979056179523468,-0.00132778799161315,0.20358581840992,-0.979756474494934,-0.00164541706908494,0.200186192989349,-0.823212325572968,-0.00744968233630061,0.567684769630432,-0.919564664363861,-0.00223202211782336,0.392932385206223,-0.827533841133118,-0.00183662457857281,0.561412870883942,-0.706647396087646,0.00118098198436201,0.707564890384674,-0.823212325572968,-0.00744968233630061,0.567684769630432,-0.827533841133118,-0.00183662457857281,0.561412870883942,-0.707754552364349,-0.00129534676671028,0.706457197666168,-0.823212325572968,-0.00744968233630061,0.567684769630432, +-0.706647396087646,0.00118098198436201,0.707564890384674,-0.707754552364349,-0.00129534676671028,0.706457197666168,-0.797510981559753,-0.0148527752608061,0.60312157869339,-0.823212325572968,-0.00744968233630061,0.567684769630432,-0.823212325572968,-0.00744968233630061,0.567684769630432,-0.913009345531464,-0.00517215114086866,0.407905906438828,-0.919564664363861,-0.00223202211782336,0.392932385206223,-0.797510981559753,-0.0148527752608061,0.60312157869339,-0.913009345531464,-0.00517215114086866,0.407905906438828,-0.823212325572968,-0.00744968233630061,0.567684769630432,-0.913009345531464,-0.00517215114086866,0.407905906438828,-0.979056179523468,-0.00132778799161315,0.20358581840992,-0.919564664363861,-0.00223202211782336,0.392932385206223,-0.797510981559753,-0.0148527752608061,0.60312157869339,-0.893069744110107,-0.00892823934555054,0.449829667806625,-0.913009345531464,-0.00517215114086866,0.407905906438828,-0.893069744110107,-0.00892823934555054,0.449829667806625,-0.976661145687103,-0.00214539840817451,0.214775145053864,-0.913009345531464,-0.00517215114086866,0.407905906438828,-0.913009345531464,-0.00517215114086866,0.407905906438828,-0.976661145687103,-0.00214539840817451,0.214775145053864,-0.979056179523468,-0.00132778799161315,0.20358581840992,-0.893069744110107,-0.00892823934555054,0.449829667806625,-0.970513582229614,-0.00561568280681968,0.240981131792068,-0.976661145687103,-0.00214539840817451,0.214775145053864,-0.979056179523468,-0.00132778799161315,0.20358581840992,-1,-7.54444918129593e-05,-3.17715021083131e-05,-0.999999523162842,0.000929463014472276,0.00018962325702887,-0.976661145687103,-0.00214539840817451,0.214775145053864,-1,-7.54444918129593e-05,-3.17715021083131e-05,-0.979056179523468,-0.00132778799161315,0.20358581840992,-1,-7.54444918129593e-05,-3.17715021083131e-05,-0.979705810546875,0.000353293231455609,-0.200440421700478,-0.999999523162842,0.000929463014472276,0.00018962325702887,-0.970513582229614,-0.00561568280681968,0.240981131792068,-0.999999582767487,0.000766783603467047,0.000516916275955737, +-0.976661145687103,-0.00214539840817451,0.214775145053864,-0.976661145687103,-0.00214539840817451,0.214775145053864,-0.999999582767487,0.000766783603467047,0.000516916275955737,-1,-7.54444918129593e-05,-3.17715021083131e-05,-0.970513582229614,-0.00561568280681968,0.240981131792068,-0.999997437000275,-0.00160208973102272,-0.00160164188127965,-0.999999582767487,0.000766783603467047,0.000516916275955737,-1,-7.54444918129593e-05,-3.17715021083131e-05,-0.979058504104614,0.00135612138547003,-0.20357458293438,-0.979705810546875,0.000353293231455609,-0.200440421700478,-0.999999582767487,0.000766783603467047,0.000516916275955737,-0.979058504104614,0.00135612138547003,-0.20357458293438,-1,-7.54444918129593e-05,-3.17715021083131e-05,-0.979058504104614,0.00135612138547003,-0.20357458293438,-0.921393632888794,0.000543325615581125,-0.388630330562592,-0.979705810546875,0.000353293231455609,-0.200440421700478,-0.999997437000275,-0.00160208973102272,-0.00160164188127965,-0.976842105388641,0.00345177808776498,-0.213933691382408,-0.999999582767487,0.000766783603467047,0.000516916275955737,-0.999999582767487,0.000766783603467047,0.000516916275955737,-0.976842105388641,0.00345177808776498,-0.213933691382408,-0.979058504104614,0.00135612138547003,-0.20357458293438,-0.999997437000275,-0.00160208973102272,-0.00160164188127965,-0.97009938955307,0.00381323136389256,-0.242677941918373,-0.976842105388641,0.00345177808776498,-0.213933691382408,-0.979058504104614,0.00135612138547003,-0.20357458293438,-0.919534504413605,0.00203501153737307,-0.393003940582275,-0.921393632888794,0.000543325615581125,-0.388630330562592,-0.976842105388641,0.00345177808776498,-0.213933691382408,-0.919534504413605,0.00203501153737307,-0.393003940582275,-0.979058504104614,0.00135612138547003,-0.20357458293438,-0.919534504413605,0.00203501153737307,-0.393003940582275,-0.829053521156311,0.000502612092532218,-0.559169054031372,-0.921393632888794,0.000543325615581125,-0.388630330562592,-0.97009938955307,0.00381323136389256,-0.242677941918373,-0.913047313690186,0.00532538443803787,-0.407818853855133, +-0.976842105388641,0.00345177808776498,-0.213933691382408,-0.976842105388641,0.00345177808776498,-0.213933691382408,-0.913047313690186,0.00532538443803787,-0.407818853855133,-0.919534504413605,0.00203501153737307,-0.393003940582275,-0.97009938955307,0.00381323136389256,-0.242677941918373,-0.892912149429321,0.00852669775485992,-0.450150191783905,-0.913047313690186,0.00532538443803787,-0.407818853855133,-0.919534504413605,0.00203501153737307,-0.393003940582275,-0.827493369579315,0.00164213567040861,-0.561473071575165,-0.829053521156311,0.000502612092532218,-0.559169054031372,-0.913047313690186,0.00532538443803787,-0.407818853855133,-0.827493369579315,0.00164213567040861,-0.561473071575165,-0.919534504413605,0.00203501153737307,-0.393003940582275,-0.827493369579315,0.00164213567040861,-0.561473071575165,-0.707126200199127,0.000153047789353877,-0.707087337970734,-0.829053521156311,0.000502612092532218,-0.559169054031372,-0.827493369579315,0.00164213567040861,-0.561473071575165,-0.70720762014389,0.000392925459891558,-0.707005798816681,-0.707126200199127,0.000153047789353877,-0.707087337970734,-0.892912149429321,0.00852669775485992,-0.450150191783905,-0.822408735752106,0.00493765622377396,-0.568875670433044,-0.913047313690186,0.00532538443803787,-0.407818853855133,-0.913047313690186,0.00532538443803787,-0.407818853855133,-0.822408735752106,0.00493765622377396,-0.568875670433044,-0.827493369579315,0.00164213567040861,-0.561473071575165,-0.822408735752106,0.00493765622377396,-0.568875670433044,-0.70720762014389,0.000392925459891558,-0.707005798816681,-0.827493369579315,0.00164213567040861,-0.561473071575165,-0.892912149429321,0.00852669775485992,-0.450150191783905,-0.795759439468384,0.0111095942556858,-0.605510890483856,-0.822408735752106,0.00493765622377396,-0.568875670433044,-0.822408735752106,0.00493765622377396,-0.568875670433044,-0.707564353942871,0.00118152284994721,-0.706647932529449,-0.70720762014389,0.000392925459891558,-0.707005798816681,-0.795759439468384,0.0111095942556858,-0.605510890483856,-0.707564353942871,0.00118152284994721,-0.706647932529449, +-0.822408735752106,0.00493765622377396,-0.568875670433044,-0.795759439468384,0.0111095942556858,-0.605510890483856,-0.706359386444092,-0.00149013777263463,-0.707851827144623,-0.707564353942871,0.00118152284994721,-0.706647932529449 + } + TangentsW: *2304 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "UVSet0" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *1030 { + a: 0.373799264431,0.318191409111023,0.623613119125366,0.318191409111023,0.123985528945923,0.318191409111023,0.873426795005798,0.318191409111023,0.373799264431,0.683609008789062,0.623613119125366,0.683609008789062,0.123985528945923,0.683609068393707,0.873426795005798,0.683609008789062,0.37345814704895,0.0217557065188885,0.38478285074234,0.97176468372345,0.498706161975861,0.500900208950043,0.748520016670227,0.500900208950043,0.998333692550659,0.500900208950043,0.248892396688461,0.500900208950043,0.248892396688461,0.277128577232361,-0.000921368598937988,0.277128577232361,0.748520016670227,0.277128577232361,0.498706161975861,0.277128577232361,0.498706161975861,0.72467178106308,0.748520016670227,0.72467178106308,0.998333692550659,0.72467178106308,0.248892396688461,0.72467178106308,0.623613119125366,0.500900208950043,0.373799264431,0.500900208950043,0.873426795005798,0.500900208950043,0.123985528945923,0.500900208950043,0.354002416133881,0.304813802242279,0.324335098266602,0.290563941001892,0.288420885801315,0.280647277832031,0.143782377243042,0.304813802242279,0.173449695110321,0.290563941001892,0.209363847970963,0.280647277832031,0.104188621044159,0.304813861846924,0.0745213329792023,0.290563881397247,0.038607120513916,0.280647277832031,0.893223643302917,0.304813861846924,0.922891020774841,0.290563941001892,0.958805322647095,0.280647277832031,0.853629887104034,0.304813802242279,0.823962688446045,0.290563941001892,0.788048386573792,0.280647277832031,0.643409907817841,0.304813802242279,0.673077344894409,0.290563941001892,0.708991408348083,0.280647277832031,0.603816211223602,0.304813802242279,0.574148833751678,0.290563881397247,0.538234651088715,0.280647277832031,0.393596172332764,0.304813802242279,0.423263490200043,0.290563941001892,0.459177643060684,0.280647277832031,0.393596172332764,0.696986556053162,0.423263490200043,0.711236476898193,0.459177643060684,0.721153140068054,0.603816211223602,0.696986556053162,0.574148833751678,0.711236476898193,0.538234651088715,0.721153140068054,0.643409907817841,0.696986556053162, +0.673077344894409,0.711236476898193,0.708991408348083,0.721153140068054,0.853629887104034,0.696986556053162,0.823962688446045,0.711236476898193,0.788048386573792,0.721153140068054,0.893223762512207,0.696986556053162,0.922891020774841,0.711236476898193,0.958805322647095,0.721153140068054,0.104188621044159,0.696986556053162,0.0745213329792023,0.711236476898193,0.038607120513916,0.721153140068054,0.143782407045364,0.696986556053162,0.173449695110321,0.711236476898193,0.209363847970963,0.721153140068054,0.354002416133881,0.696986556053162,0.324335098266602,0.711236476898193,0.28842094540596,0.721153140068054,0.623613119125366,0.348428010940552,0.623613119125366,0.392896622419357,0.623613119125366,0.445000439882278,0.623613119125366,0.653372466564178,0.623613119125366,0.608903884887695,0.623613119125366,0.556800007820129,0.373799264431,0.653372466564178,0.373799264431,0.608903884887695,0.373799264431,0.556800007820129,0.373799264431,0.348428010940552,0.373799264431,0.392896622419357,0.373799264431,0.445000439882278,0.873426795005798,0.348428010940552,0.873426795005798,0.392896622419357,0.873426795005798,0.445000439882278,0.873426795005798,0.653372466564178,0.873426795005798,0.608903884887695,0.873426795005798,0.556800007820129,0.123985528945923,0.348428010940552,0.123985528945923,0.392896622419357,0.123985528945923,0.445000439882278,0.123985528945923,0.653372466564178,0.123985528945923,0.608903884887695,0.123985528945923,0.556800007820129,0.248892396688461,0.233574971556664,0.248892396688461,0.174339637160301,0.248892396688461,0.102047123014927,-0.000921368598937988,0.233575001358986,-0.000921368598937988,0.173343554139137,-0.000921368598937988,0.111118711531162,0.748520016670227,0.233574971556664,0.748520016670227,0.174339637160301,0.748520016670227,0.104690290987492,0.498706161975861,0.233574971556664,0.498706161975861,0.169568672776222,0.498706161975861,0.0975686684250832,0.498706161975861,0.762663602828979,0.498706161975861,0.816242575645447,0.498706161975861,0.902040183544159,0.748520016670227,0.762663602828979,0.748520016670227, +0.816242575645447,0.748657047748566,0.901956498622894,0.998333692550659,0.762663602828979,0.998333692550659,0.816242575645447,0.997860312461853,0.899095118045807,0.248892396688461,0.762663602828979,0.248892396688461,0.816242575645447,0.248892396688461,0.902040183544159,0.498706161975861,0.323059171438217,0.498706161975861,0.376731753349304,0.498706161975861,0.436916708946228,0.59361332654953,0.500900208950043,0.562829971313477,0.500900208950043,0.531084060668945,0.500900208950043,0.498706161975861,0.678741216659546,0.498706161975861,0.625068664550781,0.498706161975861,0.564883768558502,0.403799027204514,0.500900208950043,0.434582352638245,0.500900208950043,0.466328263282776,0.500900208950043,0.748520016670227,0.323059171438217,0.748520016670227,0.376731753349304,0.748520016670227,0.436916708946228,0.843427062034607,0.500900208950043,0.812643766403198,0.500900208950043,0.780897855758667,0.500900208950043,0.748520016670227,0.678741216659546,0.748520016670227,0.625068664550781,0.748520016670227,0.564883768558502,0.653612852096558,0.500900208950043,0.684396147727966,0.500900208950043,0.716142058372498,0.500900208950043,0.998333692550659,0.323059171438217,0.998333692550659,0.376731753349304,0.998333692550659,0.436916708946228,0.0939857661724091,0.500900208950043,0.063202440738678,0.500900208950043,0.0314565300941467,0.500900208950043,-0.000921368598937988,0.678741216659546,-0.000921368598937988,0.625068664550781,-0.000921368598937988,0.564883768558502,0.903426647186279,0.500900208950043,0.934209942817688,0.500900208950043,0.965955853462219,0.500900208950043,0.248892396688461,0.323059171438217,0.248892396688461,0.376731753349304,0.248892396688461,0.436916708946228,0.343799531459808,0.500900208950043,0.313016206026077,0.500900208950043,0.281270325183868,0.500900208950043,0.248892396688461,0.678741216659546,0.248892396688461,0.625068664550781,0.248892396688461,0.564883768558502,0.153985261917114,0.500900208950043,0.184768587350845,0.500900208950043,0.216514497995377,0.500900208950043,0.373799264431,0.283399999141693,0.342018723487854, +0.250794291496277,0.299219369888306,0.237880393862724,0.405579805374146,0.250794291496277,0.373799264431,0.214218825101852,0.321637213230133,0.185627087950706,0.448379158973694,0.237880393862724,0.425961285829544,0.175267562270164,0.372580289840698,0.133625671267509,0.123985528945923,0.283399999141693,0.0922049582004547,0.250794291496277,0.049405574798584,0.237880423665047,0.155766040086746,0.250794291496277,0.123985528945923,0.209653377532959,0.0718234479427338,0.185920313000679,0.198565423488617,0.237880423665047,0.176147550344467,0.184810295701027,0.125204503536224,0.142171487212181,0.873426795005798,0.283399999141693,0.841646254062653,0.250794291496277,0.798846960067749,0.237880423665047,0.905207455158234,0.250794291496277,0.873426795005798,0.209653377532959,0.821264743804932,0.181852921843529,0.948006749153137,0.237880423665047,0.925588965415955,0.185920313000679,0.881959617137909,0.139528349041939,0.623613119125366,0.283399999141693,0.591832518577576,0.250794291496277,0.549033164978027,0.237880393862724,0.655393540859222,0.250794291496277,0.623613119125366,0.214218825101852,0.571451008319855,0.180769845843315,0.698192954063416,0.237880393862724,0.675775170326233,0.183082178235054,0.615080296993256,0.13210840523243,0.373799264431,0.725352764129639,0.405579805374146,0.745444178581238,0.448379158973694,0.758358120918274,0.342018783092499,0.745444178581238,0.373799264431,0.770862281322479,0.425961345434189,0.810543775558472,0.299219369888306,0.758358120918274,0.321637213230133,0.810543775558472,0.373799264431,0.870620608329773,0.623613119125366,0.725352764129639,0.655393540859222,0.745444178581238,0.698192954063416,0.758358120918274,0.591832518577576,0.745444178581238,0.623613119125366,0.770862281322479,0.675775170326233,0.810543775558472,0.549033164978027,0.758358120918274,0.57145094871521,0.810543775558472,0.623613119125366,0.870620608329773,0.873426795005798,0.725352764129639,0.905207455158234,0.745444178581238,0.948006868362427,0.758358120918274,0.841646254062653,0.745444178581238,0.873426795005798,0.770862281322479, +0.925588965415955,0.810543775558472,0.798846960067749,0.758358120918274,0.821264743804932,0.810543775558472,0.873426795005798,0.87664383649826,0.123985528945923,0.725352764129639,0.155766040086746,0.745444178581238,0.198565393686295,0.758358120918274,0.0922049582004547,0.745444178581238,0.123985528945923,0.770862281322479,0.176147550344467,0.810543775558472,0.049405574798584,0.758358120918274,0.0718234479427338,0.810543775558472,0.123985528945923,0.870620608329773,0.401278972625732,0.343152701854706,0.430935263633728,0.333501607179642,0.463898807764053,0.326018631458282,0.403241366147995,0.389889299869537,0.433783560991287,0.384135574102402,0.465802907943726,0.379020810127258,0.403813540935516,0.44363459944725,0.434603124856949,0.440907865762711,0.466343373060226,0.438213467597961,0.596133291721344,0.343152701854706,0.594170928001404,0.389889299869537,0.593598783016205,0.44363459944725,0.566477000713348,0.333501607179642,0.563628733158112,0.384135574102402,0.56280916929245,0.440907865762711,0.53351354598999,0.326018631458282,0.53160947561264,0.379020810127258,0.531068980693817,0.438213467597961,0.596133351325989,0.658647775650024,0.566477060317993,0.668298840522766,0.53351354598999,0.675781726837158,0.594170928001404,0.611911177635193,0.563628733158112,0.617664813995361,0.53160947561264,0.622779548168182,0.593598783016205,0.558165788650513,0.56280916929245,0.560892581939697,0.531068980693817,0.563586950302124,0.401278913021088,0.658647775650024,0.403241366147995,0.611911177635193,0.403813540935516,0.558165788650513,0.430935263633728,0.668298840522766,0.433783560991287,0.617664813995361,0.434603124856949,0.560892581939697,0.463898807764053,0.675781726837158,0.465802907943726,0.622779548168182,0.466343373060226,0.563586950302124,0.651092827320099,0.343152701854706,0.680749118328094,0.333501607179642,0.713712573051453,0.326018631458282,0.653055191040039,0.389889299869537,0.683597385883331,0.384135574102402,0.715616822242737,0.379020810127258,0.653627336025238,0.44363459944725,0.684417009353638,0.440907865762711,0.716157197952271, +0.438213467597961,0.845947086811066,0.343152701854706,0.843984723091125,0.389889299869537,0.843412518501282,0.44363459944725,0.81629091501236,0.333501607179642,0.813442647457123,0.384135574102402,0.812622904777527,0.440907865762711,0.783327341079712,0.326018631458282,0.781423211097717,0.379020810127258,0.780882716178894,0.438213467597961,0.845947206020355,0.658647775650024,0.81629091501236,0.668298840522766,0.783327341079712,0.675781726837158,0.843984723091125,0.611911177635193,0.813442647457123,0.617664813995361,0.781423211097717,0.622779667377472,0.843412518501282,0.558165788650513,0.812622904777527,0.560892581939697,0.780882716178894,0.563586950302124,0.651092827320099,0.658647775650024,0.653055191040039,0.611911177635193,0.653627336025238,0.558165788650513,0.680749118328094,0.668298840522766,0.683597385883331,0.617664813995361,0.684417009353638,0.560892581939697,0.713712573051453,0.675781726837158,0.715616822242737,0.622779667377472,0.716157197952271,0.563586950302124,0.900906443595886,0.343152701854706,0.930562734603882,0.333501607179642,0.963526368141174,0.326018631458282,0.902868986129761,0.389889299869537,0.933411180973053,0.384135574102402,0.965430498123169,0.379020810127258,0.90344113111496,0.44363459944725,0.93423068523407,0.440907865762711,0.965970993041992,0.438213467597961,0.0965058207511902,0.343152701854706,0.0945433974266052,0.389889299869537,0.0939712226390839,0.44363459944725,0.0668495297431946,0.333501607179642,0.0640012323856354,0.384135574102402,0.063181608915329,0.440907865762711,0.0338860154151917,0.326018631458282,0.031981885433197,0.379020810127258,0.0314414203166962,0.438213467597961,0.0965058505535126,0.658647775650024,0.0668495297431946,0.668298840522766,0.0338860154151917,0.675781726837158,0.0945433974266052,0.611911177635193,0.0640012323856354,0.617664813995361,0.031981885433197,0.622779667377472,0.0939712226390839,0.558165788650513,0.063181608915329,0.560892581939697,0.0314414203166962,0.563586950302124,0.900906443595886,0.658647775650024,0.902868986129761,0.611911177635193,0.90344113111496, +0.558165788650513,0.930562734603882,0.668298840522766,0.933411180973053,0.617664813995361,0.93423068523407,0.560892581939697,0.963526368141174,0.675781726837158,0.965430498123169,0.622779667377472,0.965970993041992,0.563586950302124,0.151465177536011,0.343152701854706,0.181121498346329,0.333501607179642,0.214085042476654,0.326018631458282,0.153427600860596,0.389889299869537,0.183969795703888,0.384135574102402,0.215989142656326,0.379020810127258,0.153999805450439,0.44363459944725,0.18478935956955,0.440907865762711,0.216529607772827,0.438213467597961,0.346319556236267,0.343152701854706,0.344357222318649,0.389889299869537,0.343784987926483,0.44363459944725,0.316663265228271,0.333501607179642,0.313814997673035,0.384135574102402,0.312995404005051,0.440907865762711,0.283699750900269,0.326018631458282,0.281795620918274,0.379020810127258,0.281255185604095,0.438213467597961,0.346319556236267,0.658647775650024,0.316663265228271,0.668298840522766,0.283699750900269,0.675781726837158,0.344357222318649,0.611911177635193,0.313814997673035,0.617664813995361,0.281795620918274,0.622779667377472,0.343784987926483,0.558165788650513,0.312995404005051,0.560892581939697,0.281255185604095,0.563586950302124,0.151465177536011,0.658647775650024,0.153427600860596,0.611911177635193,0.153999805450439,0.558165788650513,0.181121498346329,0.668298840522766,0.183969795703888,0.617664813995361,0.18478935956955,0.560892581939697,0.214085042476654,0.675781726837158,0.215989142656326,0.622779667377472,0.216529607772827,0.563586950302124,0.498706161975861,0.0975686684250832,0.37345814704895,0.0217557065188885,0.11941796541214,0.0217557065188885,0.998333692550659,0.277128577232361,0.998333692550659,0.233575001358986,0.998333692550659,0.173343554139137,0.998333692550659,0.103509671986103,0.873917102813721,0.0203801207244396,0.873917102813721,0.0203801207244396,0.622417390346527,0.0176289789378643,0.498706161975861,0.0975686684250832,0.38478285074234,0.97176468372345,0.619769930839539,0.97589123249054,0.875080227851868,0.973140239715576,0.875080227851868, +0.973140239715576,-0.000921368598937988,0.72467178106308,-0.000921368598937988,0.762663602828979,-0.000921368598937988,0.816242575645447,-0.000921368598937988,0.902040183544159,0.129472553730011,0.97176468372345,0.373799264431,0.318191409111023,0.393596172332764,0.304813802242279,0.423263490200043,0.290563941001892,0.459177643060684,0.280647277832031,0.498706161975861,0.277128577232361,0.603816211223602,0.304813802242279,0.623613119125366,0.318191409111023,0.574148833751678,0.290563881397247,0.538234651088715,0.280647277832031,0.623613119125366,0.683609008789062,0.603816211223602,0.696986556053162,0.574148833751678,0.711236476898193,0.538234651088715,0.721153140068054,0.498706161975861,0.72467178106308,0.393596172332764,0.696986556053162,0.373799264431,0.683609008789062,0.423263490200043,0.711236476898193,0.459177643060684,0.721153140068054,0.623613119125366,0.318191409111023,0.623613119125366,0.348428010940552,0.643409907817841,0.304813802242279,0.673077344894409,0.290563941001892,0.708991408348083,0.280647277832031,0.748520016670227,0.277128577232361,0.623613119125366,0.392896622419357,0.623613119125366,0.445000439882278,0.623613119125366,0.500900208950043,0.853629887104034,0.304813802242279,0.873426795005798,0.318191409111023,0.823962688446045,0.290563941001892,0.788048386573792,0.280647277832031,0.873426795005798,0.683609008789062,0.853629887104034,0.696986556053162,0.823962688446045,0.711236476898193,0.788048386573792,0.721153140068054,0.748520016670227,0.72467178106308,0.643409907817841,0.696986556053162,0.623613119125366,0.653372466564178,0.623613119125366,0.683609008789062,0.623613119125366,0.608903884887695,0.623613119125366,0.556800007820129,0.673077344894409,0.711236476898193,0.708991408348083,0.721153140068054,0.873426795005798,0.318191409111023,0.873426795005798,0.348428010940552,0.893223643302917,0.304813861846924,0.922891020774841,0.290563941001892,0.958805322647095,0.280647277832031,0.998333692550659,0.277128577232361,0.873426795005798,0.392896622419357,0.873426795005798,0.445000439882278,0.873426795005798, +0.500900208950043,0.104188621044159,0.304813861846924,0.123985528945923,0.318191409111023,0.0745213329792023,0.290563881397247,0.038607120513916,0.280647277832031,-0.000921368598937988,0.277128577232361,-0.000921368598937988,0.323059171438217,-0.000921368598937988,0.376731753349304,-0.000921368598937988,0.436916708946228,-0.000921368598937988,0.500900208950043,0.123985528945923,0.683609068393707,0.104188621044159,0.696986556053162,0.0745213329792023,0.711236476898193,0.038607120513916,0.721153140068054,-0.000921368598937988,0.72467178106308,0.893223762512207,0.696986556053162,0.873426795005798,0.653372466564178,0.873426795005798,0.683609008789062,0.873426795005798,0.608903884887695,0.873426795005798,0.556800007820129,0.922891020774841,0.711236476898193,0.958805322647095,0.721153140068054,0.998333692550659,0.72467178106308,0.998333692550659,0.678741216659546,0.998333692550659,0.625068664550781,0.998333692550659,0.564883768558502,0.123985528945923,0.318191409111023,0.123985528945923,0.348428010940552,0.143782377243042,0.304813802242279,0.173449695110321,0.290563941001892,0.209363847970963,0.280647277832031,0.248892396688461,0.277128577232361,0.123985528945923,0.392896622419357,0.123985528945923,0.445000439882278,0.123985528945923,0.500900208950043,0.354002416133881,0.304813802242279,0.373799264431,0.348428010940552,0.373799264431,0.318191409111023,0.373799264431,0.392896622419357,0.373799264431,0.445000439882278,0.373799264431,0.500900208950043,0.324335098266602,0.290563941001892,0.288420885801315,0.280647277832031,0.373799264431,0.683609008789062,0.373799264431,0.653372466564178,0.354002416133881,0.696986556053162,0.324335098266602,0.711236476898193,0.28842094540596,0.721153140068054,0.248892396688461,0.72467178106308,0.373799264431,0.608903884887695,0.373799264431,0.556800007820129,0.143782407045364,0.696986556053162,0.123985528945923,0.653372466564178,0.123985528945923,0.683609068393707,0.123985528945923,0.608903884887695,0.123985528945923,0.556800007820129,0.173449695110321,0.711236476898193,0.209363847970963,0.721153140068054 + } + UVIndex: *2304 { + a: 177,178,386,174,178,177,173,174,177,173,177,176,176,177,108,177,109,108,178,8,109,205,108,109,174,175,178,175,100,178,178,100,387,170,174,173,171,175,174,170,171,174,48,173,176,47,173,48,47,170,173,0,170,47,0,26,170,26,171,170,48,176,49,26,27,171,49,176,107,49,107,17,176,108,107,27,172,171,171,172,175,27,28,172,199,17,107,199,46,17,202,107,108,202,199,107,205,202,108,172,99,175,175,99,100,28,98,172,172,98,99,28,14,98,198,46,199,198,45,46,201,199,202,201,198,199,14,185,98,14,31,185,98,186,99,98,185,186,99,187,100,99,186,187,197,45,198,197,44,45,31,182,185,31,30,182,100,187,103,100,103,388,187,102,103,187,184,102,186,184,187,184,101,102,185,183,186,186,183,184,185,182,183,184,181,101,183,181,184,181,15,101,181,34,15,183,180,181,180,34,181,182,180,183,180,33,34,182,179,180,179,33,180,30,179,182,179,32,33,30,29,179,29,32,179,29,2,32,106,109,395,196,106,394,193,106,196,193,105,106,105,205,106,106,205,396,105,204,205,204,202,205,204,201,202,104,204,105,203,201,204,104,203,204,190,105,193,190,104,105,203,200,201,200,198,201,200,197,198,16,203,104,40,16,104,40,104,190,16,43,203,43,200,203,43,42,200,42,197,200,42,41,197,41,44,197,41,1,44,39,40,190,39,190,189,38,39,189,189,190,193,38,189,188,3,38,188,3,188,35,189,193,192,188,189,192,192,193,196,35,188,191,188,192,191,35,191,36,192,196,195,191,192,195,36,191,194,191,195,194,36,194,37,195,196,392,196,393,392,195,392,391,194,195,391,194,391,390,37,194,390,37,390,389,214,9,121,213,214,121,210,214,213,210,211,214,211,112,214,214,112,397,213,121,120,209,210,213,212,213,120,209,213,212,207,211,210,206,210,209,206,207,210,72,209,212,71,209,72,71,206,209,4,206,71,4,50,206,50,207,206,72,212,73,50,51,207,73,212,119,212,120,119,73,119,21,51,208,207,207,208,211,51,52,208,235,21,119,235,70,21,238,119,120,238,235,119,208,111,211,211,111,112,52,110,208,208,110,111,52,18,110,234,70,235,234,69,70,18,221,110,18,55,221,110,222,111,110,221,222,111,223,112,111,222,223,55,218,221,55,54,218,221,219,222,221,218,219,54,215,218,54,53,215,53,56,215,53,5,56,215,56,57,218,215,216, +215,57,216,218,216,219,216,57,58,216,58,217,219,216,217,217,58,19,222,219,220,219,217,220,222,220,223,217,19,113,220,217,113,61,113,19,223,220,114,220,113,114,61,230,113,230,114,113,60,230,61,223,114,115,112,223,115,112,115,398,60,227,230,59,227,60,230,231,114,231,115,114,227,231,230,59,224,227,7,224,59,7,62,224,231,232,115,232,399,115,227,228,231,224,228,227,228,232,231,62,225,224,224,225,228,62,63,225,228,229,232,225,229,228,63,226,225,225,226,229,63,64,226,229,118,232,232,118,400,229,117,118,226,117,229,226,116,117,64,116,226,64,20,116,65,6,68,65,68,233,233,68,69,66,65,233,233,69,234,66,233,236,236,233,234,67,66,236,236,234,237,237,234,235,237,235,238,67,236,239,239,236,237,401,67,239,401,239,402,239,237,240,402,239,240,240,237,238,402,240,403,240,238,241,403,240,241,241,238,120,403,241,404,241,120,121,404,241,121,404,121,405,411,412,74,411,74,251,413,411,251,251,74,75,413,251,254,414,413,254,251,75,252,254,251,252,252,75,76,414,254,257,410,414,257,252,76,253,253,76,22,254,252,255,257,254,255,255,252,253,410,257,122,409,410,122,253,22,125,79,125,22,255,253,256,256,253,125,257,255,258,122,257,258,258,255,256,409,122,244,408,409,244,79,266,125,78,266,79,122,258,123,244,122,123,256,125,126,266,126,125,258,256,259,123,258,259,259,256,126,408,244,243,407,408,243,78,263,266,77,263,78,244,123,247,243,244,247,123,259,124,247,123,124,259,126,127,124,259,127,266,267,126,263,267,266,267,127,126,407,243,242,406,407,242,406,242,83,243,247,246,242,243,246,83,242,245,242,246,245,83,245,84,247,124,250,246,247,250,124,127,10,250,124,10,267,268,127,268,10,127,84,245,248,84,248,85,245,246,249,246,250,249,245,249,248,250,10,133,249,250,133,85,248,131,85,131,23,248,249,132,249,133,132,248,132,131,130,133,10,268,130,10,264,268,267,263,264,267,271,23,131,271,82,23,274,131,132,274,271,131,277,132,133,130,277,133,277,274,132,265,130,268,264,265,268,260,264,263,77,260,263,415,260,77,415,416,260,260,261,264,416,261,260,261,265,264,416,417,261,417,262,261,261,262,265,417,418,262,265,129,130,262,129,265,129,277,130,418,128,262,262,128,129, +418,419,128,129,276,277,128,276,129,276,274,277,419,275,128,128,275,276,419,423,275,276,273,274,275,273,276,273,271,274,423,272,275,275,272,273,423,422,272,273,270,271,272,270,273,270,82,271,270,81,82,422,269,272,272,269,270,269,81,270,422,420,269,269,80,81,420,80,269,420,421,80,433,434,86,433,86,287,435,433,287,287,86,87,435,287,290,436,435,290,287,87,288,290,287,288,288,87,88,436,290,293,429,436,293,288,88,289,289,88,24,290,288,291,293,290,291,291,288,289,429,293,134,428,429,134,289,24,137,91,137,24,291,289,292,292,289,137,293,291,294,134,293,294,294,291,292,428,134,280,427,428,280,91,302,137,90,302,91,134,294,135,280,134,135,292,137,138,302,138,137,294,292,295,135,294,295,295,292,138,427,280,279,426,427,279,90,299,302,89,299,90,280,135,283,279,280,283,135,295,136,283,135,136,295,138,139,136,295,139,302,303,138,299,303,302,303,139,138,426,279,278,424,426,278,424,278,425,279,283,282,278,279,282,425,278,281,278,282,281,425,281,430,283,136,286,282,283,286,136,139,11,286,136,11,303,304,139,304,11,139,430,281,284,430,284,431,281,282,285,282,286,285,281,285,284,286,11,145,285,286,145,431,284,143,431,143,432,284,285,144,285,145,144,284,144,143,142,145,11,304,142,11,300,304,303,299,300,303,307,432,143,307,446,432,310,143,144,310,307,143,313,144,145,142,313,145,313,310,144,301,142,304,300,301,304,296,300,299,89,296,299,437,296,89,437,438,296,296,297,300,438,297,296,297,301,300,438,439,297,439,298,297,297,298,301,439,440,298,301,141,142,298,141,301,141,313,142,440,140,298,298,140,141,440,441,140,141,312,313,140,312,141,312,310,313,441,311,140,140,311,312,441,448,311,312,309,310,311,309,312,309,307,310,448,308,311,311,308,309,448,447,308,309,306,307,308,306,309,306,446,307,306,445,446,447,305,308,308,305,306,305,445,306,447,442,305,305,443,445,442,443,305,442,444,443,453,454,146,453,146,316,452,453,316,316,146,147,452,316,315,451,452,315,316,147,319,315,316,319,319,147,148,451,315,314,449,451,314,449,314,450,315,319,318,314,315,318,319,148,322,318,319,322,322,148,12,450,314,317,314,318,317,450,317,455,318,322,321,317,318,321, +322,12,157,321,322,157,482,157,12,455,317,320,317,321,320,455,320,456,482,349,157,481,349,482,321,157,156,320,321,156,349,156,157,456,320,155,320,156,155,456,155,457,481,348,349,480,348,481,349,346,156,346,155,156,348,346,349,343,457,155,346,343,155,343,476,457,480,347,348,479,347,480,479,478,347,348,345,346,345,343,346,347,345,348,342,476,343,345,342,343,342,475,476,478,344,347,347,344,345,344,342,345,478,477,344,341,475,342,344,341,342,477,341,344,341,473,475,477,472,341,472,473,341,472,474,473,458,459,92,458,92,323,460,458,323,323,92,93,460,323,326,461,460,326,323,93,324,326,323,324,324,93,94,461,326,329,462,461,329,462,329,463,324,94,325,325,94,25,326,324,327,329,326,327,327,324,325,463,329,330,329,327,330,463,330,464,325,25,149,97,149,25,327,325,328,330,327,328,328,325,149,464,330,331,330,328,331,464,331,465,97,338,149,96,338,97,328,149,150,331,328,150,338,150,149,465,331,151,331,150,151,465,151,466,96,335,338,95,335,96,338,339,150,339,151,150,335,339,338,340,466,151,339,340,151,340,154,466,95,332,335,467,332,95,467,468,332,335,336,339,336,340,339,332,336,335,337,154,340,336,337,340,337,153,154,468,333,332,332,333,336,333,337,336,468,469,333,334,153,337,333,334,337,469,334,333,334,152,153,469,470,334,470,152,334,470,471,152,492,494,493,492,493,359,498,492,359,359,493,495,498,359,362,499,498,362,359,495,360,362,359,360,360,495,496,499,362,365,488,499,365,360,496,361,361,496,497,362,360,363,365,362,363,363,360,361,488,365,158,487,488,158,361,497,161,507,161,497,363,361,364,364,361,161,365,363,366,158,365,366,366,363,364,487,158,352,486,487,352,507,374,161,506,374,507,158,366,159,352,158,159,364,161,162,374,162,161,366,364,367,159,366,367,367,364,162,486,352,351,485,486,351,506,371,374,501,371,506,352,159,355,351,352,355,159,367,160,355,159,160,367,162,163,160,367,163,374,375,162,371,375,374,375,163,162,485,351,350,483,485,350,483,350,484,351,355,354,350,351,354,484,350,353,350,354,353,484,353,489,355,160,358,354,355,358,160,163,13,358,160,13,375,376,163,376,13,163,489,353,356,489,356,490,353,354,357,354,358,357, +353,357,356,358,13,169,357,358,169,490,356,167,490,167,491,356,357,168,357,169,168,356,168,167,166,169,13,376,166,13,372,376,375,371,372,375,379,491,167,379,512,491,382,167,168,382,379,167,385,168,169,166,385,169,385,382,168,373,166,376,372,373,376,368,372,371,501,368,371,500,368,501,500,502,368,368,369,372,502,369,368,369,373,372,502,503,369,503,370,369,369,370,373,503,504,370,373,165,166,370,165,373,165,385,166,504,164,370,370,164,165,504,505,164,165,384,385,164,384,165,384,382,385,505,383,164,164,383,384,505,514,383,384,381,382,383,381,384,381,379,382,514,380,383,383,380,381,514,513,380,381,378,379,380,378,381,378,512,379,378,511,512,513,377,380,380,377,378,377,511,378,513,508,377,377,509,511,508,509,377,508,510,509 + } + } + LayerElementUV: 1 { + Version: 101 + Name: "UVSet1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *1030 { + a: 0.346146762371063,0.346147000789642,0.346146762371063,0.653853535652161,0.65385377407074,0.346147000789642,0.65385377407074,0.653853535652161,0.692293286323547,0.30770680308342,0.692293286323547,2.98023223876953e-07,1,0.30770680308342,1,2.98023223876953e-07,0.500000715255737,0.500000536441803,0.846147298812866,0.153853476047516,0.153853431344032,0.153852701187134,0.499999850988388,0.153852462768555,0.153854221105576,0.499999642372131,0.846146941184998,0.499999403953552,0.500000715255737,0.346147000789642,0.65385377407074,0.500000536441803,0.500000715255737,0.653853535652161,0.346146762371063,0.500000536441803,0.692293286323547,0.153853476047516,0.846147298812866,2.98023223876953e-07,1,0.153853476047516,0.846147298812866,0.30770680308342,0.153853416442871,0,0.153853431344032,0.307706832885742,0.499999850988388,1.19209289550781e-07,0.153854206204414,0.346146762371063,0.384610503911972,0.346147000789642,0.423073023557663,0.346147000789642,0.461536645889282,0.346147000789642,0.615389108657837,0.346147000789642,0.576925754547119,0.346147000789642,0.538461446762085,0.346147000789642,0.65385377407074,0.384609639644623,0.65385377407074,0.423074185848236,0.65385377407074,0.461538851261139,0.65385377407074,0.615390598773956,0.65385377407074,0.576927065849304,0.65385377407074,0.538463711738586,0.615389108657837,0.653853535652161,0.576925754547119,0.653853535652161,0.538461446762085,0.653853535652161,0.384610503911972,0.653853535652161,0.423073023557663,0.653853535652161,0.461536645889282,0.653853535652161,0.346146762371063,0.615390598773956,0.346146762371063,0.576927065849304,0.346146762371063,0.538463711738586,0.346146762371063,0.384609639644623,0.346146762371063,0.423074185848236,0.346146762371063,0.461538851261139,0.692293286323547,0.269243896007538,0.692293286323547,0.230780690908432,0.692293286323547,0.192317008972168,0.692293286323547,0.0384631156921387,0.692293286323547,0.0769274234771729,0.692293286323547,0.11539089679718,0.730756998062134,2.98023223876953e-07,0.769219160079956,2.98023223876953e-07, +0.807683110237122,2.98023223876953e-07,0.961535692214966,2.98023223876953e-07,0.923072934150696,2.98023223876953e-07,0.884609460830688,2.98023223876953e-07,1,0.0384631156921387,1,0.0769274234771729,1,0.11539089679718,1,0.269243896007538,1,0.230780690908432,1,0.192317008972168,0.961535692214966,0.30770680308342,0.923072934150696,0.30770680308342,0.884609460830688,0.30770680308342,0.730756998062134,0.30770680308342,0.769219160079956,0.30770680308342,0.807683110237122,0.30770680308342,0.0384628474712372,0,0.076926164329052,0,0.115389592945576,0,0.269244015216827,0,0.230779483914375,0,0.192315861582756,0,0.269244015216827,0.307706832885742,0.230779498815536,0.307706832885742,0.192315876483917,0.307706832885742,0.0384628623723984,0.307706832885742,0.0769261792302132,0.307706832885742,0.115389607846737,0.307706832885742,0.384609490633011,1.19209289550781e-07,0.423072785139084,1.19209289550781e-07,0.46153661608696,1.19209289550781e-07,0.615390419960022,1.19209289550781e-07,0.576925992965698,1.19209289550781e-07,0.538461089134216,1.19209289550781e-07,0.0384633839130402,0.346146762371063,0.0769261345267296,0.346146762371063,0.115389786660671,0.346146762371063,0.269243448972702,0.346146762371063,0.230779513716698,0.346146762371063,0.192315667867661,0.346146762371063,0.500000715255737,0.384609639644623,0.500000715255737,0.423074185848236,0.500000715255737,0.461538851261139,0.615389108657837,0.500000536441803,0.576925754547119,0.500000536441803,0.538461446762085,0.500000536441803,0.500000715255737,0.615390598773956,0.500000715255737,0.576927065849304,0.500000715255737,0.538463711738586,0.384610503911972,0.500000536441803,0.423073023557663,0.500000536441803,0.461536645889282,0.500000536441803,0.730756998062134,0.153853476047516,0.769219160079956,0.153853476047516,0.807683110237122,0.153853476047516,0.846147298812866,0.0384631156921387,0.846147298812866,0.0769274234771729,0.846147298812866,0.11539089679718,0.961535692214966,0.153853476047516,0.923072934150696,0.153853476047516,0.884609460830688,0.153853476047516,0.846147298812866, +0.269243896007538,0.846147298812866,0.230780690908432,0.846147298812866,0.192317008972168,0.0384628623723984,0.153852701187134,0.0769261717796326,0.153852701187134,0.115389600396156,0.153852701187134,0.153853416442871,0.0384647846221924,0.153853416442871,0.0769273638725281,0.153853416442871,0.1153923869133,0.269244015216827,0.153852701187134,0.230779498815536,0.153852701187134,0.192315876483917,0.153852701187134,0.153853431344032,0.269243091344833,0.153853431344032,0.23078054189682,0.153853431344032,0.192316889762878,0.384609490633011,0.153852462768555,0.423072785139084,0.153852462768555,0.46153661608696,0.153852462768555,0.499999850988388,0.0384635329246521,0.499999850988388,0.0769279003143311,0.499999850988388,0.115392744541168,0.615390419960022,0.153852462768555,0.576925873756409,0.153852462768555,0.538461089134216,0.153852462768555,0.499999850988388,0.269243776798248,0.499999850988388,0.230780214071274,0.499999850988388,0.192316830158234,0.0384633988142014,0.499999642372131,0.0769261419773102,0.499999642372131,0.115389794111252,0.499999642372131,0.153854206204414,0.384610593318939,0.153854206204414,0.423074185848236,0.153854206204414,0.461539208889008,0.269243448972702,0.499999642372131,0.230779528617859,0.499999642372131,0.192315682768822,0.499999642372131,0.153854221105576,0.615390121936798,0.153854221105576,0.576926708221436,0.153854221105576,0.538463294506073,0.730757474899292,0.499999403953552,0.769219994544983,0.499999403953552,0.80768358707428,0.499999403953552,0.846146941184998,0.384609162807465,0.846146941184998,0.423073828220367,0.846146941184998,0.461538016796112,0.961536645889282,0.499999403953552,0.923073172569275,0.499999403953552,0.884608864784241,0.499999403953552,0.846146941184998,0.615390300750732,0.846146941184998,0.576926827430725,0.846146941184998,0.538463652133942,0.384610503911972,0.384609639644623,0.423073023557663,0.384609639644623,0.461536645889282,0.384609639644623,0.384610503911972,0.423074185848236,0.423073023557663,0.423074185848236,0.461536645889282,0.423074185848236,0.384610503911972, +0.461538851261139,0.423073023557663,0.461538851261139,0.461536645889282,0.461538851261139,0.615389108657837,0.384609639644623,0.615389108657837,0.423074185848236,0.615389108657837,0.461538851261139,0.576925754547119,0.384609639644623,0.576925754547119,0.423074185848236,0.576925754547119,0.461538851261139,0.538461446762085,0.384609639644623,0.538461446762085,0.423074185848236,0.538461446762085,0.461538851261139,0.615389108657837,0.615390598773956,0.576925754547119,0.615390598773956,0.538461446762085,0.615390598773956,0.615389108657837,0.576927065849304,0.576925754547119,0.576927065849304,0.538461446762085,0.576927065849304,0.615389108657837,0.538463711738586,0.576925754547119,0.538463711738586,0.538461446762085,0.538463711738586,0.384610503911972,0.615390598773956,0.384610503911972,0.576927065849304,0.384610503911972,0.538463711738586,0.423073023557663,0.615390598773956,0.423073023557663,0.576927065849304,0.423073023557663,0.538463711738586,0.461536645889282,0.615390598773956,0.461536645889282,0.576927065849304,0.461536645889282,0.538463711738586,0.730756998062134,0.269243896007538,0.730756998062134,0.230780690908432,0.730756998062134,0.192317008972168,0.769219160079956,0.269243896007538,0.769219160079956,0.230780690908432,0.769219160079956,0.192317008972168,0.807683110237122,0.269243896007538,0.807683110237122,0.230780690908432,0.807683110237122,0.192317008972168,0.730756998062134,0.0384631156921387,0.769219160079956,0.0384631156921387,0.807683110237122,0.0384631156921387,0.730756998062134,0.0769274234771729,0.769219160079956,0.0769274234771729,0.807683110237122,0.0769274234771729,0.730756998062134,0.11539089679718,0.769219160079956,0.11539089679718,0.807683110237122,0.11539089679718,0.961535692214966,0.0384631156921387,0.961535692214966,0.0769274234771729,0.961535692214966,0.11539089679718,0.923072934150696,0.0384631156921387,0.923072934150696,0.0769274234771729,0.923072934150696,0.11539089679718,0.884609460830688,0.0384631156921387,0.884609460830688,0.0769274234771729,0.884609460830688,0.11539089679718,0.961535692214966, +0.269243896007538,0.923072934150696,0.269243896007538,0.884609460830688,0.269243896007538,0.961535692214966,0.230780690908432,0.923072934150696,0.230780690908432,0.884609460830688,0.230780690908432,0.961535692214966,0.192317008972168,0.923072934150696,0.192317008972168,0.884609460830688,0.192317008972168,0.0384628623723984,0.269243091344833,0.0384628623723984,0.23078054189682,0.0384628623723984,0.192316889762878,0.0769261792302132,0.269243091344833,0.0769261792302132,0.23078054189682,0.0769261717796326,0.192316889762878,0.115389607846737,0.269243091344833,0.115389607846737,0.23078054189682,0.115389600396156,0.192316889762878,0.0384628474712372,0.0384647846221924,0.076926164329052,0.0384647846221924,0.115389592945576,0.0384647846221924,0.0384628474712372,0.0769273638725281,0.0769261717796326,0.0769273638725281,0.115389600396156,0.0769273638725281,0.0384628623723984,0.1153923869133,0.0769261717796326,0.1153923869133,0.115389600396156,0.1153923869133,0.269244015216827,0.0384647846221924,0.269244015216827,0.0769273638725281,0.269244015216827,0.1153923869133,0.230779483914375,0.0384647846221924,0.230779483914375,0.0769273638725281,0.230779483914375,0.1153923869133,0.192315861582756,0.0384647846221924,0.192315861582756,0.0769273638725281,0.192315861582756,0.1153923869133,0.269244015216827,0.269243091344833,0.230779498815536,0.269243091344833,0.192315876483917,0.269243091344833,0.269244015216827,0.23078054189682,0.230779498815536,0.23078054189682,0.192315876483917,0.23078054189682,0.269244015216827,0.192316889762878,0.230779498815536,0.192316889762878,0.192315876483917,0.192316889762878,0.384609490633011,0.269243776798248,0.384609490633011,0.230780214071274,0.384609490633011,0.192316830158234,0.423072785139084,0.269243776798248,0.423072785139084,0.230780214071274,0.423072785139084,0.192316830158234,0.46153649687767,0.269243776798248,0.46153661608696,0.230780214071274,0.46153661608696,0.192316830158234,0.384609490633011,0.0384635329246521,0.423072785139084,0.0384635329246521,0.46153661608696,0.0384635329246521,0.384609490633011, +0.0769279003143311,0.423072785139084,0.0769279003143311,0.46153661608696,0.0769279003143311,0.384609490633011,0.115392804145813,0.423072785139084,0.115392804145813,0.46153661608696,0.115392804145813,0.615390419960022,0.0384635329246521,0.615390419960022,0.0769279003143311,0.615390419960022,0.115392744541168,0.576925992965698,0.0384635329246521,0.576925992965698,0.0769279003143311,0.576925992965698,0.115392744541168,0.538461089134216,0.0384635329246521,0.538461089134216,0.0769279003143311,0.538461089134216,0.115392744541168,0.615390419960022,0.269243776798248,0.576925873756409,0.269243776798248,0.538461089134216,0.269243776798248,0.615390419960022,0.230780035257339,0.576925873756409,0.230780214071274,0.538461089134216,0.230780214071274,0.615390419960022,0.192316830158234,0.576925873756409,0.192316830158234,0.538461089134216,0.192316830158234,0.0384633988142014,0.615390121936798,0.0384633988142014,0.576926708221436,0.0384633988142014,0.538463354110718,0.0769261494278908,0.615390121936798,0.0769261494278908,0.576926708221436,0.0769261419773102,0.538463354110718,0.115389801561832,0.615390121936798,0.115389801561832,0.576926708221436,0.115389794111252,0.538463294506073,0.0384633839130402,0.384610593318939,0.0769261345267296,0.384610593318939,0.115389786660671,0.384610593318939,0.0384633839130402,0.423074185848236,0.0769261419773102,0.423074185848236,0.115389794111252,0.423074185848236,0.0384633988142014,0.461539208889008,0.0769261419773102,0.461539208889008,0.115389794111252,0.461539208889008,0.269243448972702,0.384610593318939,0.269243448972702,0.423074185848236,0.269243448972702,0.461539208889008,0.230779513716698,0.384610593318939,0.230779513716698,0.423074185848236,0.230779513716698,0.461539208889008,0.192315667867661,0.384610593318939,0.192315667867661,0.423074185848236,0.192315667867661,0.461539208889008,0.269243448972702,0.615390121936798,0.230779528617859,0.615390121936798,0.192315682768822,0.615390121936798,0.269243448972702,0.576926708221436,0.230779528617859,0.576926708221436,0.192315682768822,0.576926708221436, +0.269243448972702,0.538463294506073,0.230779528617859,0.538463294506073,0.192315682768822,0.538463294506073,0.730757474899292,0.615390300750732,0.730757474899292,0.576926827430725,0.730757474899292,0.538463652133942,0.769219994544983,0.615390300750732,0.769219994544983,0.576926827430725,0.769219994544983,0.538463652133942,0.80768358707428,0.615390300750732,0.80768358707428,0.576926827430725,0.80768358707428,0.538463652133942,0.730757474899292,0.384609162807465,0.769219994544983,0.384609162807465,0.80768358707428,0.384609162807465,0.730757474899292,0.423073828220367,0.769219994544983,0.423073828220367,0.80768358707428,0.423073828220367,0.730757474899292,0.461538016796112,0.769219994544983,0.461538016796112,0.80768358707428,0.461538016796112,0.961536645889282,0.384609162807465,0.961536645889282,0.423073828220367,0.961536645889282,0.461538016796112,0.923073172569275,0.384609162807465,0.923073172569275,0.423073828220367,0.923073172569275,0.461538016796112,0.884608864784241,0.384609162807465,0.884608864784241,0.423073828220367,0.884608864784241,0.461538016796112,0.961536645889282,0.615390241146088,0.923073172569275,0.615390241146088,0.884608864784241,0.615390300750732,0.961536645889282,0.576926827430725,0.923073172569275,0.576926827430725,0.884608864784241,0.576926827430725,0.961536645889282,0.538463652133942,0.923073172569275,0.538463652133942,0.884608864784241,0.538463652133942,0.461536645889282,0.500000536441803,0.500000715255737,0.500000536441803,0.500000715255737,0.500000536441803,0.65385377407074,0.500000536441803,0.615389108657837,0.500000536441803,0.576925754547119,0.500000536441803,0.538461446762085,0.500000536441803,0.500000715255737,0.500000536441803,0.500000715255737,0.500000536441803,0.500000715255737,0.500000536441803,0.461536645889282,0.500000536441803,0.846147298812866,0.153853476047516,0.846147298812866,0.153853476047516,0.846147298812866,0.153853476047516,0.846147298812866,0.153853476047516,1,0.153853476047516,0.961535692214966,0.153853476047516,0.923072934150696,0.153853476047516,0.884609460830688,0.153853476047516, +0.846147298812866,0.153853476047516,1.49011611938477e-08,0.307706832885742,1.49011611938477e-08,0.269243091344833,1.49011611938477e-08,0.23078054189682,1.49011611938477e-08,0.192316889762878,1.49011611938477e-08,0.153852701187134,0,0.0384647846221924,0,0,0,0.0769273638725281,0,0.1153923869133,0.307706624269485,0,0.307706624269485,0.0384647846221924,0.307706624269485,0.0769273638725281,0.307706624269485,0.1153923869133,0.307706624269485,0.153852701187134,0.307706624269485,0.269243091344833,0.307706624269485,0.307706832885742,0.307706624269485,0.23078054189682,0.307706624269485,0.192316889762878,0.346146583557129,0.30770680308342,0.384609490633011,0.30770680308342,0.346146583557129,0.269243776798248,0.346146583557129,0.230780214071274,0.346146583557129,0.192316830158234,0.346146583557129,0.153852462768555,0.423072785139084,0.30770680308342,0.46153649687767,0.30770680308342,0.499999850988388,0.30770680308342,0.346146583557129,0.0384635329246521,0.346146583557129,1.19209289550781e-07,0.346146583557129,0.0769279003143311,0.346146583557129,0.115392804145813,0.653853297233582,1.19209289550781e-07,0.653853297233582,0.0384635329246521,0.653853297233582,0.0769279003143311,0.653853297233582,0.115392744541168,0.653853297233582,0.153852462768555,0.653853297233582,0.269243776798248,0.615390419960022,0.30770680308342,0.653853297233582,0.30770680308342,0.576925873756409,0.30770680308342,0.538461089134216,0.30770680308342,0.653853297233582,0.230780035257339,0.653853297233582,0.192316830158234,2.98023223876953e-08,0.653853535652161,0.0384633988142014,0.653853535652161,2.98023223876953e-08,0.615390121936798,2.98023223876953e-08,0.576926708221436,2.98023223876953e-08,0.538463354110718,2.98023223876953e-08,0.499999642372131,0.0769261494278908,0.653853535652161,0.115389801561832,0.653853535652161,0.153854221105576,0.653853535652161,1.49011611938477e-08,0.384610593318939,1.49011611938477e-08,0.346146762371063,1.49011611938477e-08,0.423074185848236,1.49011611938477e-08,0.461539208889008,2.98023223876953e-08,0.499999642372131,0.0384633988142014, +0.499999642372131,0.0769261419773102,0.499999642372131,0.115389794111252,0.499999642372131,0.153854221105576,0.499999642372131,0.30770680308342,0.346146762371063,0.30770680308342,0.384610593318939,0.30770680308342,0.423074185848236,0.30770680308342,0.461539208889008,0.30770680308342,0.499999642372131,0.30770680308342,0.615390062332153,0.269243448972702,0.653853535652161,0.30770680308342,0.653853535652161,0.230779528617859,0.653853535652161,0.192315682768822,0.653853535652161,0.30770680308342,0.576926708221436,0.30770680308342,0.538463294506073,0.30770680308342,0.499999642372131,0.269243448972702,0.499999642372131,0.230779528617859,0.499999642372131,0.192315682768822,0.499999642372131,0.692293763160706,0.653853476047516,0.730757474899292,0.653853476047516,0.692293763160706,0.615390300750732,0.692293763160706,0.576926827430725,0.692293763160706,0.538463652133942,0.692293763160706,0.499999403953552,0.769219994544983,0.653853476047516,0.80768358707428,0.653853476047516,0.846146941184998,0.653853476047516,0.692293763160706,0.384609162807465,0.730757474899292,0.346146762371063,0.692293763160706,0.346146762371063,0.769219994544983,0.346146762371063,0.80768358707428,0.346146762371063,0.846146941184998,0.346146762371063,0.692293763160706,0.423073828220367,0.692293763160706,0.461538016796112,1.00000035762787,0.346146762371063,0.961536645889282,0.346146762371063,1.00000035762787,0.384609162807465,1.00000035762787,0.423073828220367,1.00000035762787,0.461538016796112,1.00000035762787,0.499999403953552,0.923073172569275,0.346146762371063,0.884608864784241,0.346146762371063,1.00000035762787,0.615390241146088,0.961536645889282,0.653853476047516,1.00000035762787,0.653853476047516,0.923073172569275,0.653853476047516,0.884608864784241,0.653853476047516,1.00000035762787,0.576926827430725,1.00000035762787,0.538463652133942 + } + UVIndex: *2304 { + a: 177,178,386,174,178,177,173,174,177,173,177,176,176,177,108,177,109,108,178,8,109,205,108,109,174,175,178,175,100,178,178,100,387,170,174,173,171,175,174,170,171,174,48,173,176,47,173,48,47,170,173,0,170,47,0,26,170,26,171,170,48,176,49,26,27,171,49,176,107,49,107,17,176,108,107,27,172,171,171,172,175,27,28,172,199,17,107,199,46,17,202,107,108,202,199,107,205,202,108,172,99,175,175,99,100,28,98,172,172,98,99,28,14,98,198,46,199,198,45,46,201,199,202,201,198,199,14,185,98,14,31,185,98,186,99,98,185,186,99,187,100,99,186,187,197,45,198,197,44,45,31,182,185,31,30,182,100,187,103,100,103,388,187,102,103,187,184,102,186,184,187,184,101,102,185,183,186,186,183,184,185,182,183,184,181,101,183,181,184,181,15,101,181,34,15,183,180,181,180,34,181,182,180,183,180,33,34,182,179,180,179,33,180,30,179,182,179,32,33,30,29,179,29,32,179,29,2,32,106,109,395,196,106,394,193,106,196,193,105,106,105,205,106,106,205,396,105,204,205,204,202,205,204,201,202,104,204,105,203,201,204,104,203,204,190,105,193,190,104,105,203,200,201,200,198,201,200,197,198,16,203,104,40,16,104,40,104,190,16,43,203,43,200,203,43,42,200,42,197,200,42,41,197,41,44,197,41,1,44,39,40,190,39,190,189,38,39,189,189,190,193,38,189,188,3,38,188,3,188,35,189,193,192,188,189,192,192,193,196,35,188,191,188,192,191,35,191,36,192,196,195,191,192,195,36,191,194,191,195,194,36,194,37,195,196,392,196,393,392,195,392,391,194,195,391,194,391,390,37,194,390,37,390,389,214,9,121,213,214,121,210,214,213,210,211,214,211,112,214,214,112,397,213,121,120,209,210,213,212,213,120,209,213,212,207,211,210,206,210,209,206,207,210,72,209,212,71,209,72,71,206,209,4,206,71,4,50,206,50,207,206,72,212,73,50,51,207,73,212,119,212,120,119,73,119,21,51,208,207,207,208,211,51,52,208,235,21,119,235,70,21,238,119,120,238,235,119,208,111,211,211,111,112,52,110,208,208,110,111,52,18,110,234,70,235,234,69,70,18,221,110,18,55,221,110,222,111,110,221,222,111,223,112,111,222,223,55,218,221,55,54,218,221,219,222,221,218,219,54,215,218,54,53,215,53,56,215,53,5,56,215,56,57,218,215,216, +215,57,216,218,216,219,216,57,58,216,58,217,219,216,217,217,58,19,222,219,220,219,217,220,222,220,223,217,19,113,220,217,113,61,113,19,223,220,114,220,113,114,61,230,113,230,114,113,60,230,61,223,114,115,112,223,115,112,115,398,60,227,230,59,227,60,230,231,114,231,115,114,227,231,230,59,224,227,7,224,59,7,62,224,231,232,115,232,399,115,227,228,231,224,228,227,228,232,231,62,225,224,224,225,228,62,63,225,228,229,232,225,229,228,63,226,225,225,226,229,63,64,226,229,118,232,232,118,400,229,117,118,226,117,229,226,116,117,64,116,226,64,20,116,65,6,68,65,68,233,233,68,69,66,65,233,233,69,234,66,233,236,236,233,234,67,66,236,236,234,237,237,234,235,237,235,238,67,236,239,239,236,237,401,67,239,401,239,402,239,237,240,402,239,240,240,237,238,402,240,403,240,238,241,403,240,241,241,238,120,403,241,404,241,120,121,404,241,121,404,121,405,411,412,74,411,74,251,413,411,251,251,74,75,413,251,254,414,413,254,251,75,252,254,251,252,252,75,76,414,254,257,410,414,257,252,76,253,253,76,22,254,252,255,257,254,255,255,252,253,410,257,122,409,410,122,253,22,125,79,125,22,255,253,256,256,253,125,257,255,258,122,257,258,258,255,256,409,122,244,408,409,244,79,266,125,78,266,79,122,258,123,244,122,123,256,125,126,266,126,125,258,256,259,123,258,259,259,256,126,408,244,243,407,408,243,78,263,266,77,263,78,244,123,247,243,244,247,123,259,124,247,123,124,259,126,127,124,259,127,266,267,126,263,267,266,267,127,126,407,243,242,406,407,242,406,242,83,243,247,246,242,243,246,83,242,245,242,246,245,83,245,84,247,124,250,246,247,250,124,127,10,250,124,10,267,268,127,268,10,127,84,245,248,84,248,85,245,246,249,246,250,249,245,249,248,250,10,133,249,250,133,85,248,131,85,131,23,248,249,132,249,133,132,248,132,131,130,133,10,268,130,10,264,268,267,263,264,267,271,23,131,271,82,23,274,131,132,274,271,131,277,132,133,130,277,133,277,274,132,265,130,268,264,265,268,260,264,263,77,260,263,415,260,77,415,416,260,260,261,264,416,261,260,261,265,264,416,417,261,417,262,261,261,262,265,417,418,262,265,129,130,262,129,265,129,277,130,418,128,262,262,128,129, +418,419,128,129,276,277,128,276,129,276,274,277,419,275,128,128,275,276,419,423,275,276,273,274,275,273,276,273,271,274,423,272,275,275,272,273,423,422,272,273,270,271,272,270,273,270,82,271,270,81,82,422,269,272,272,269,270,269,81,270,422,420,269,269,80,81,420,80,269,420,421,80,433,434,86,433,86,287,435,433,287,287,86,87,435,287,290,436,435,290,287,87,288,290,287,288,288,87,88,436,290,293,429,436,293,288,88,289,289,88,24,290,288,291,293,290,291,291,288,289,429,293,134,428,429,134,289,24,137,91,137,24,291,289,292,292,289,137,293,291,294,134,293,294,294,291,292,428,134,280,427,428,280,91,302,137,90,302,91,134,294,135,280,134,135,292,137,138,302,138,137,294,292,295,135,294,295,295,292,138,427,280,279,426,427,279,90,299,302,89,299,90,280,135,283,279,280,283,135,295,136,283,135,136,295,138,139,136,295,139,302,303,138,299,303,302,303,139,138,426,279,278,424,426,278,424,278,425,279,283,282,278,279,282,425,278,281,278,282,281,425,281,430,283,136,286,282,283,286,136,139,11,286,136,11,303,304,139,304,11,139,430,281,284,430,284,431,281,282,285,282,286,285,281,285,284,286,11,145,285,286,145,431,284,143,431,143,432,284,285,144,285,145,144,284,144,143,142,145,11,304,142,11,300,304,303,299,300,303,307,432,143,307,446,432,310,143,144,310,307,143,313,144,145,142,313,145,313,310,144,301,142,304,300,301,304,296,300,299,89,296,299,437,296,89,437,438,296,296,297,300,438,297,296,297,301,300,438,439,297,439,298,297,297,298,301,439,440,298,301,141,142,298,141,301,141,313,142,440,140,298,298,140,141,440,441,140,141,312,313,140,312,141,312,310,313,441,311,140,140,311,312,441,448,311,312,309,310,311,309,312,309,307,310,448,308,311,311,308,309,448,447,308,309,306,307,308,306,309,306,446,307,306,445,446,447,305,308,308,305,306,305,445,306,447,442,305,305,443,445,442,443,305,442,444,443,453,454,146,453,146,316,452,453,316,316,146,147,452,316,315,451,452,315,316,147,319,315,316,319,319,147,148,451,315,314,449,451,314,449,314,450,315,319,318,314,315,318,319,148,322,318,319,322,322,148,12,450,314,317,314,318,317,450,317,455,318,322,321,317,318,321, +322,12,157,321,322,157,482,157,12,455,317,320,317,321,320,455,320,456,482,349,157,481,349,482,321,157,156,320,321,156,349,156,157,456,320,155,320,156,155,456,155,457,481,348,349,480,348,481,349,346,156,346,155,156,348,346,349,343,457,155,346,343,155,343,476,457,480,347,348,479,347,480,479,478,347,348,345,346,345,343,346,347,345,348,342,476,343,345,342,343,342,475,476,478,344,347,347,344,345,344,342,345,478,477,344,341,475,342,344,341,342,477,341,344,341,473,475,477,472,341,472,473,341,472,474,473,458,459,92,458,92,323,460,458,323,323,92,93,460,323,326,461,460,326,323,93,324,326,323,324,324,93,94,461,326,329,462,461,329,462,329,463,324,94,325,325,94,25,326,324,327,329,326,327,327,324,325,463,329,330,329,327,330,463,330,464,325,25,149,97,149,25,327,325,328,330,327,328,328,325,149,464,330,331,330,328,331,464,331,465,97,338,149,96,338,97,328,149,150,331,328,150,338,150,149,465,331,151,331,150,151,465,151,466,96,335,338,95,335,96,338,339,150,339,151,150,335,339,338,340,466,151,339,340,151,340,154,466,95,332,335,467,332,95,467,468,332,335,336,339,336,340,339,332,336,335,337,154,340,336,337,340,337,153,154,468,333,332,332,333,336,333,337,336,468,469,333,334,153,337,333,334,337,469,334,333,334,152,153,469,470,334,470,152,334,470,471,152,492,494,493,492,493,359,498,492,359,359,493,495,498,359,362,499,498,362,359,495,360,362,359,360,360,495,496,499,362,365,488,499,365,360,496,361,361,496,497,362,360,363,365,362,363,363,360,361,488,365,158,487,488,158,361,497,161,507,161,497,363,361,364,364,361,161,365,363,366,158,365,366,366,363,364,487,158,352,486,487,352,507,374,161,506,374,507,158,366,159,352,158,159,364,161,162,374,162,161,366,364,367,159,366,367,367,364,162,486,352,351,485,486,351,506,371,374,501,371,506,352,159,355,351,352,355,159,367,160,355,159,160,367,162,163,160,367,163,374,375,162,371,375,374,375,163,162,485,351,350,483,485,350,483,350,484,351,355,354,350,351,354,484,350,353,350,354,353,484,353,489,355,160,358,354,355,358,160,163,13,358,160,13,375,376,163,376,13,163,489,353,356,489,356,490,353,354,357,354,358,357, +353,357,356,358,13,169,357,358,169,490,356,167,490,167,491,356,357,168,357,169,168,356,168,167,166,169,13,376,166,13,372,376,375,371,372,375,379,491,167,379,512,491,382,167,168,382,379,167,385,168,169,166,385,169,385,382,168,373,166,376,372,373,376,368,372,371,501,368,371,500,368,501,500,502,368,368,369,372,502,369,368,369,373,372,502,503,369,503,370,369,369,370,373,503,504,370,373,165,166,370,165,373,165,385,166,504,164,370,370,164,165,504,505,164,165,384,385,164,384,165,384,382,385,505,383,164,164,383,384,505,514,383,384,381,382,383,381,384,381,379,382,514,380,383,383,380,381,514,513,380,381,378,379,380,378,381,378,512,379,378,511,512,513,377,380,380,377,378,377,511,378,513,508,377,377,509,511,508,509,377,508,510,509 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + Layer: 1 { + Version: 100 + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 1 + } + } + } + Geometry: 140631868352768, "Geometry::Scene", "Mesh" { + Vertices: *126 { + a: 47.5528568029404,-100,-15.4508590698242,40.4508769512177,-100,-29.3892800807953,29.3892800807953,-100,-40.4508739709854,15.4508575797081,-100,-47.5528508424759,-0,-100,-50.0000238418579,-15.4508575797081,-100,-47.5528478622437,-29.3892741203308,-100,-40.4508650302887,-40.4508620500565,-100,-29.3892711400986,-47.5528389215469,-100,-15.4508531093597,-50.000011920929,-100,0,-47.5528389215469,-100,15.4508531093597,-40.4508590698242,-100,29.3892681598663,-29.3892681598663,-100,40.450856089592,-15.4508531093597,-100,47.5528329610825,-1.49011611938477e-06,-100,50.0000059604645,15.4508486390114,-100,47.5528299808502,29.3892621994019,-100,40.4508531093597,40.4508501291275,-100,29.3892651796341,47.552827000618,-100,15.4508501291275,50,-100,0,47.5528568029404,100,-15.4508590698242,40.4508769512177,100,-29.3892800807953,29.3892800807953,100,-40.4508739709854,15.4508575797081,100,-47.5528508424759,-0,100,-50.0000238418579,-15.4508575797081,100,-47.5528478622437,-29.3892741203308,100,-40.4508650302887,-40.4508620500565,100,-29.3892711400986,-47.5528389215469,100,-15.4508531093597,-50.000011920929,100,0,-47.5528389215469,100,15.4508531093597,-40.4508590698242,100,29.3892681598663,-29.3892681598663,100,40.450856089592,-15.4508531093597,100,47.5528329610825,-1.49011611938477e-06,100,50.0000059604645,15.4508486390114,100,47.5528299808502,29.3892621994019,100,40.4508531093597,40.4508501291275,100,29.3892651796341,47.552827000618,100,15.4508501291275,50,100,0,-0,-100,0,-0,100,0 + } + PolygonVertexIndex: *240 { + a: 0,21,-21,0,1,-22,1,22,-22,1,2,-23,2,23,-23,2,3,-24,3,24,-24,3,4,-25,4,25,-25,4,5,-26,5,26,-26,5,6,-27,6,27,-27,6,7,-28,7,28,-28,7,8,-29,8,29,-29,8,9,-30,9,30,-30,9,10,-31,10,31,-31,10,11,-32,11,32,-32,11,12,-33,12,33,-33,12,13,-34,13,34,-34,13,14,-35,14,35,-35,14,15,-36,15,36,-36,15,16,-37,16,37,-37,16,17,-38,17,38,-38,17,18,-39,18,39,-39,18,19,-40,19,20,-40,19,0,-21,38,39,-42,37,38,-42,39,20,-42,36,37,-42,20,21,-42,35,36,-42,21,22,-42,34,35,-42,22,23,-42,33,34,-42,23,24,-42,32,33,-42,24,25,-42,31,32,-42,25,26,-42,30,31,-42,26,27,-42,29,30,-42,27,28,-42,28,29,-42,19,18,-41,0,19,-41,18,17,-41,1,0,-41,17,16,-41,2,1,-41,16,15,-41,3,2,-41,15,14,-41,4,3,-41,14,13,-41,5,4,-41,13,12,-41,6,5,-41,12,11,-41,7,6,-41,11,10,-41,8,7,-41,10,9,-41,9,8,-41 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *720 { + a: 0.951056778430939,0,-0.309016019105911,0.80901700258255,0,-0.587785363197327,0.951056778430939,0,-0.309016019105911,0.951056778430939,0,-0.309016019105911,0.80901700258255,0,-0.587785363197327,0.80901700258255,0,-0.587785363197327,0.80901700258255,0,-0.587785363197327,0.587785065174103,0,-0.80901712179184,0.80901700258255,0,-0.587785363197327,0.80901700258255,0,-0.587785363197327,0.587785065174103,0,-0.80901712179184,0.587785065174103,0,-0.80901712179184,0.587785065174103,0,-0.80901712179184,0.309016793966293,0,-0.95105654001236,0.587785065174103,0,-0.80901712179184,0.587785065174103,0,-0.80901712179184,0.309016793966293,0,-0.95105654001236,0.309016793966293,0,-0.95105654001236,0.309016793966293,0,-0.95105654001236,-0,0,-1,0.309016793966293,0,-0.95105654001236,0.309016793966293,0,-0.95105654001236,-0,0,-1,-0,0,-1,-0,0,-1,-0.30901712179184,0,-0.951056480407715,-0,0,-1,-0,0,-1,-0.30901712179184,0,-0.951056480407715,-0.30901712179184,0,-0.951056480407715,-0.30901712179184,0,-0.951056480407715,-0.587785422801971,0,-0.809016823768616,-0.30901712179184,0,-0.951056480407715,-0.30901712179184,0,-0.951056480407715,-0.587785422801971,0,-0.809016823768616,-0.587785422801971,0,-0.809016823768616,-0.587785422801971,0,-0.809016823768616,-0.809017062187195,0,-0.587785124778748,-0.587785422801971,0,-0.809016823768616,-0.587785422801971,0,-0.809016823768616,-0.809017062187195,0,-0.587785124778748,-0.809017062187195,0,-0.587785124778748,-0.809017062187195,0,-0.587785124778748,-0.95105654001236,0,-0.309016853570938,-0.809017062187195,0,-0.587785124778748,-0.809017062187195,0,-0.587785124778748,-0.95105654001236,0,-0.309016853570938,-0.95105654001236,0,-0.309016853570938,-0.95105654001236,0,-0.309016853570938,-1,0,0,-0.95105654001236,0,-0.309016853570938,-0.95105654001236,0,-0.309016853570938,-1,0,0,-1,0,0,-1,0,0,-0.95105654001236,0,0.309017032384872,-1,0,0,-1,0,0,-0.95105654001236,0,0.309017032384872,-0.95105654001236,0,0.309017032384872,-0.95105654001236,0,0.309017032384872,-0.80901688337326,0,0.587785363197327, +-0.95105654001236,0,0.309017032384872,-0.95105654001236,0,0.309017032384872,-0.80901688337326,0,0.587785363197327,-0.80901688337326,0,0.587785363197327,-0.80901688337326,0,0.587785363197327,-0.587785184383392,0,0.809017062187195,-0.80901688337326,0,0.587785363197327,-0.80901688337326,0,0.587785363197327,-0.587785184383392,0,0.809017062187195,-0.587785184383392,0,0.809017062187195,-0.587785184383392,0,0.809017062187195,-0.309016942977905,0,0.95105654001236,-0.587785184383392,0,0.809017062187195,-0.587785184383392,0,0.809017062187195,-0.309016942977905,0,0.95105654001236,-0.309016942977905,0,0.95105654001236,-0.309016942977905,0,0.95105654001236,-0,0,1,-0.309016942977905,0,0.95105654001236,-0.309016942977905,0,0.95105654001236,-0,0,1,-0,0,1,-0,0,1,0.309017062187195,0,0.95105654001236,-0,0,1,-0,0,1,0.309017062187195,0,0.95105654001236,0.309017062187195,0,0.95105654001236,0.309017062187195,0,0.95105654001236,0.587785243988037,0,0.80901700258255,0.309017062187195,0,0.95105654001236,0.309017062187195,0,0.95105654001236,0.587785243988037,0,0.80901700258255,0.587785243988037,0,0.80901700258255,0.587785243988037,0,0.80901700258255,0.80901700258255,0,0.587785243988037,0.587785243988037,0,0.80901700258255,0.587785243988037,0,0.80901700258255,0.80901700258255,0,0.587785243988037,0.80901700258255,0,0.587785243988037,0.80901700258255,0,0.587785243988037,0.95105654001236,0,0.309016942977905,0.80901700258255,0,0.587785243988037,0.80901700258255,0,0.587785243988037,0.95105654001236,0,0.309016942977905,0.95105654001236,0,0.309016942977905,0.95105654001236,0,0.309016942977905,1,0,0,0.95105654001236,0,0.309016942977905,0.95105654001236,0,0.309016942977905,1,0,0,1,0,0,1,0,0,0.951056778430939,0,-0.309016019105911,1,0,0,1,0,0,0.951056778430939,0,-0.309016019105911,0.951056778430939,0,-0.309016019105911,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0, +-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0 + } + NormalsW: *240 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *720 { + a: 0,1,0,0,1.00000011920929,0,0,0.999999940395355,0,0,1,0,0,1.00000011920929,0,0,1.00000011920929,0,0,1.00000011920929,0,0,1,0,0,1.00000011920929,0,0,1.00000011920929,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,-0,0,1,0,0,1,0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,0.999999940395355,-0,0,1,-0,0,1,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,1,-0,0,0.999999940395355,-0,0,0.999999940395355,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,0.999999940395355,-0,0,1,-0,0,0.999999940395355,-0,0,1,-0,0,1,-0,0,0.999999940395355,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,0,1,-0,-0,1,-0,0,1,-0,0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,-0,-0,1,0,-0,1,-0,-0,1,-0,-0,1,0,-0,1,0,-0,1,0,0,0.999999940395355,0,-0,1,0,-0,1,0,0,1,0,0,0.999999940395355,0,-0.687906444072723,-0,-0.725799381732941,-0.542808890342712,-0,-0.839856266975403,7.8300516292984e-08,0,-1,-0.533614456653595,-0,-0.845727860927582,-0.687906444072723,-0,-0.725799381732941,7.8300516292984e-08,0,-1,-0.542808890342712,-0,-0.839856266975403,-5.74044349832548e-07,-0,-1,7.8300516292984e-08,0,-1,-0.364119678735733,-0,-0.931352198123932,-0.533614456653595,-0,-0.845727860927582,7.8300516292984e-08,0,-1,-5.74044349832548e-07,-0,-1,-6.830559300397e-07,-0,-1,7.8300516292984e-08,0,-1,-0.184570282697678,-0,-0.982819318771362,-0.364119678735733,-0,-0.931352198123932,7.8300516292984e-08,0,-1,-6.830559300397e-07,-0,-1,-8.93125672973838e-07,-0,-1,7.8300516292984e-08,0,-1,2.4648217689105e-08,0,-1,-0.184570282697678,-0,-0.982819318771362,7.8300516292984e-08,0,-1,-8.93125672973838e-07,-0,-1,-1.01224463833205e-06,-0,-1, +7.8300516292984e-08,0,-1,0.184570357203484,0,-0.982819318771362,2.4648217689105e-08,0,-1,7.8300516292984e-08,0,-1,-1.01224463833205e-06,-0,-1,-9.64424629046334e-08,-0,-1,7.8300516292984e-08,0,-1,0.36412039399147,0,-0.931351900100708,0.184570357203484,0,-0.982819318771362,7.8300516292984e-08,0,-1,-9.64424629046334e-08,-0,-1,1.08841970813955e-06,0,-1,7.8300516292984e-08,0,-1,0.533614993095398,0,-0.845727503299713,0.36412039399147,0,-0.931351900100708,7.8300516292984e-08,0,-1,1.08841970813955e-06,0,-1,1.40228439704515e-06,0,-1,7.8300516292984e-08,0,-1,0.687906801700592,0,-0.725799024105072,0.533614993095398,0,-0.845727503299713,7.8300516292984e-08,0,-1,1.40228439704515e-06,0,-1,9.83869426818273e-07,0,-1,7.8300516292984e-08,0,-1,0.542809903621674,0,-0.83985561132431,0.687906801700592,0,-0.725799024105072,7.8300516292984e-08,0,-1,9.83869426818273e-07,0,-1,5.98387543959689e-07,0,-1,7.8300516292984e-08,0,-1,5.98387543959689e-07,0,-1,0.542809903621674,0,-0.83985561132431,7.8300516292984e-08,0,-1,0.542810261249542,-0,-0.839855372905731,-1.0190984056635e-07,-0,-1,4.09386501587505e-07,-0,-1,0.687907159328461,-0,-0.725798666477203,0.542810261249542,-0,-0.839855372905731,4.09386501587505e-07,-0,-1,-1.0190984056635e-07,-0,-1,3.31849662416062e-07,-0,-1,4.09386501587505e-07,-0,-1,0.533614456653595,-0,-0.845727860927582,0.687907159328461,-0,-0.725798666477203,4.09386501587505e-07,-0,-1,3.31849662416062e-07,-0,-1,6.8922281570849e-07,-0,-1,4.09386501587505e-07,-0,-1,0.3641197681427,-0,-0.931352138519287,0.533614456653595,-0,-0.845727860927582,4.09386501587505e-07,-0,-1,6.8922281570849e-07,-0,-1,9.09227367174026e-07,-0,-1,4.09386501587505e-07,-0,-1,0.184569805860519,-0,-0.982819378376007,0.3641197681427,-0,-0.931352138519287,4.09386501587505e-07,-0,-1,9.09227367174026e-07,-0,-1,8.05308445706032e-07,-0,-1,4.09386501587505e-07,-0,-1,-2.53402046013207e-08,-0,-1,0.184569805860519,-0,-0.982819378376007,4.09386501587505e-07,-0,-1,8.05308445706032e-07,-0,-1,3.83298782935526e-07,-0,-1,4.09386501587505e-07,-0,-1,-0.184569895267487,-0,-0.982819378376007, +-2.53402046013207e-08,-0,-1,4.09386501587505e-07,-0,-1,3.83298782935526e-07,-0,-1,4.69029089344986e-07,-0,-1,4.09386501587505e-07,-0,-1,-0.364119231700897,-0,-0.931352317333221,-0.184569895267487,-0,-0.982819378376007,4.09386501587505e-07,-0,-1,4.69029089344986e-07,-0,-1,8.28585143608507e-07,-0,-1,4.09386501587505e-07,-0,-1,-0.533613860607147,-0,-0.84572821855545,-0.364119231700897,-0,-0.931352317333221,4.09386501587505e-07,-0,-1,8.28585143608507e-07,-0,-1,1.01180887668306e-06,-0,-1,4.09386501587505e-07,-0,-1,-0.687906563282013,-0,-0.725799262523651,-0.533613860607147,-0,-0.84572821855545,4.09386501587505e-07,-0,-1,1.01180887668306e-06,-0,-1,-0.54280960559845,-0,-0.839855790138245,4.09386501587505e-07,-0,-1,-0.54280960559845,-0,-0.839855790138245,-0.687906563282013,-0,-0.725799262523651,4.09386501587505e-07,-0,-1 + } + BinormalsW: *240 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *720 { + a: -0.309016078710556,0,-0.951056838035583,-0.587785303592682,0,-0.809016942977905,-0.309016048908234,0,-0.951056838035583,-0.309016078710556,0,-0.951056838035583,-0.587785303592682,0,-0.80901700258255,-0.587785303592682,0,-0.809016942977905,-0.587785303592682,0,-0.80901700258255,-0.80901712179184,0,-0.587785065174103,-0.587785303592682,0,-0.809016942977905,-0.587785303592682,0,-0.80901700258255,-0.80901712179184,0,-0.587785065174103,-0.80901712179184,0,-0.587785065174103,-0.80901712179184,0,-0.587785065174103,-0.951056599617004,0,-0.309016793966293,-0.80901712179184,0,-0.587785065174103,-0.80901712179184,0,-0.587785065174103,-0.951056599617004,0,-0.309016793966293,-0.951056599617004,0,-0.309016793966293,-0.951056599617004,0,-0.309016793966293,-1,0,0,-0.951056599617004,0,-0.309016793966293,-0.951056599617004,0,-0.309016793966293,-1,0,0,-1,0,0,-1,0,0,-0.951056480407715,0,0.30901712179184,-1,0,0,-1,0,0,-0.951056480407715,0,0.30901712179184,-0.951056480407715,0,0.30901712179184,-0.951056480407715,0,0.30901712179184,-0.80901688337326,0,0.587785422801971,-0.951056480407715,0,0.30901712179184,-0.951056480407715,0,0.30901712179184,-0.80901688337326,0,0.587785422801971,-0.80901688337326,0,0.587785422801971,-0.80901688337326,0,0.587785422801971,-0.587785124778748,0,0.809017062187195,-0.80901688337326,0,0.587785422801971,-0.80901688337326,0,0.587785422801971,-0.587785124778748,0,0.809017062187195,-0.587785124778748,0,0.809017062187195,-0.587785124778748,0,0.809017062187195,-0.309016853570938,0,0.95105654001236,-0.587785124778748,0,0.809017062187195,-0.587785124778748,0,0.809017062187195,-0.30901688337326,0,0.95105654001236,-0.309016853570938,0,0.95105654001236,-0.30901688337326,0,0.95105654001236,-0,0,1,-0.309016853570938,0,0.95105654001236,-0.30901688337326,0,0.95105654001236,-0,0,1,-0,0,1,-0,0,1,0.309016972780228,0,0.95105654001236,-0,0,1,-0,0,1,0.309017032384872,0,0.951056480407715,0.309016972780228,0,0.95105654001236,0.309017032384872,0,0.951056480407715,0.587785422801971,0,0.80901688337326,0.309016972780228,0,0.95105654001236, +0.309017032384872,0,0.951056480407715,0.587785363197327,0,0.80901688337326,0.587785422801971,0,0.80901688337326,0.587785363197327,0,0.80901688337326,0.809017062187195,0,0.587785184383392,0.587785422801971,0,0.80901688337326,0.587785363197327,0,0.80901688337326,0.809017062187195,0,0.587785184383392,0.809017062187195,0,0.587785184383392,0.809017062187195,0,0.587785184383392,0.95105654001236,0,0.309016942977905,0.809017062187195,0,0.587785184383392,0.809017062187195,0,0.587785184383392,0.95105654001236,0,0.309016942977905,0.95105654001236,0,0.309016942977905,0.95105654001236,0,0.309016942977905,1,0,0,0.95105654001236,0,0.309016942977905,0.95105654001236,0,0.309016942977905,1,0,0,1,0,0,1,0,0,0.951056480407715,0,-0.309017062187195,1,0,0,1,0,0,0.951056480407715,0,-0.309017062187195,0.951056480407715,0,-0.309017062187195,0.951056480407715,0,-0.309017062187195,0.80901700258255,0,-0.587785243988037,0.951056480407715,0,-0.309017062187195,0.951056480407715,0,-0.309017062187195,0.80901700258255,0,-0.587785243988037,0.80901700258255,0,-0.587785243988037,0.80901700258255,0,-0.587785243988037,0.587785243988037,0,-0.80901700258255,0.80901700258255,0,-0.587785243988037,0.80901700258255,0,-0.587785243988037,0.587785243988037,0,-0.80901700258255,0.587785243988037,0,-0.80901700258255,0.587785243988037,0,-0.80901700258255,0.309016942977905,0,-0.95105654001236,0.587785243988037,0,-0.80901700258255,0.587785243988037,0,-0.80901700258255,0.309016942977905,0,-0.95105654001236,0.309016942977905,0,-0.95105654001236,0.309016942977905,0,-0.95105654001236,-0,0,-1,0.309016942977905,0,-0.95105654001236,0.309016942977905,0,-0.95105654001236,-0,0,-1,-0,0,-1,-0,0,-1,-0.309016048908234,0,-0.951056838035583,-0,0,-1,-0,0,-1,-0.309016078710556,0,-0.951056838035583,-0.309016048908234,0,-0.951056838035583,0.725799381732941,0,-0.687906444072723,0.839856266975403,0,-0.542808890342712,1,0,7.8300516292984e-08,0.845727860927582,0,-0.533614456653595,0.725799381732941,0,-0.687906444072723,1,0,7.8300516292984e-08,0.839856266975403,0,-0.542808890342712,1,0,-5.74044349832548e-07, +1,0,7.8300516292984e-08,0.931352198123932,0,-0.364119678735733,0.845727860927582,0,-0.533614456653595,1,0,7.8300516292984e-08,1,0,-5.74044349832548e-07,1,0,-6.830559300397e-07,1,0,7.8300516292984e-08,0.982819318771362,0,-0.184570282697678,0.931352198123932,0,-0.364119678735733,1,0,7.8300516292984e-08,1,0,-6.830559300397e-07,1,0,-8.93125672973838e-07,1,0,7.8300516292984e-08,1,0,2.4648217689105e-08,0.982819318771362,0,-0.184570282697678,1,0,7.8300516292984e-08,1,0,-8.93125672973838e-07,1,0,-1.01224463833205e-06,1,0,7.8300516292984e-08,0.982819318771362,0,0.184570357203484,1,0,2.4648217689105e-08,1,0,7.8300516292984e-08,1,0,-1.01224463833205e-06,1,0,-9.64424629046334e-08,1,0,7.8300516292984e-08,0.931351900100708,0,0.36412039399147,0.982819318771362,0,0.184570357203484,1,0,7.8300516292984e-08,1,0,-9.64424629046334e-08,1,0,1.08841970813955e-06,1,0,7.8300516292984e-08,0.845727503299713,0,0.533614993095398,0.931351900100708,0,0.36412039399147,1,0,7.8300516292984e-08,1,0,1.08841970813955e-06,1,0,1.40228439704515e-06,1,0,7.8300516292984e-08,0.725799024105072,0,0.687906801700592,0.845727503299713,0,0.533614993095398,1,0,7.8300516292984e-08,1,0,1.40228439704515e-06,1,0,9.83869426818273e-07,1,0,7.8300516292984e-08,0.83985561132431,0,0.542809903621674,0.725799024105072,0,0.687906801700592,1,0,7.8300516292984e-08,1,0,9.83869426818273e-07,1,0,5.98387543959689e-07,1,0,7.8300516292984e-08,1,0,5.98387543959689e-07,0.83985561132431,0,0.542809903621674,1,0,7.8300516292984e-08,-0.839855372905731,0,-0.542810261249542,-1,0,1.0190984056635e-07,-1,0,-4.09386501587505e-07,-0.725798666477203,0,-0.687907159328461,-0.839855372905731,0,-0.542810261249542,-1,0,-4.09386501587505e-07,-1,0,1.0190984056635e-07,-1,0,-3.31849662416062e-07,-1,0,-4.09386501587505e-07,-0.845727860927582,0,-0.533614456653595,-0.725798666477203,0,-0.687907159328461,-1,0,-4.09386501587505e-07,-1,0,-3.31849662416062e-07,-1,0,-6.8922281570849e-07,-1,0,-4.09386501587505e-07,-0.931352138519287,0,-0.3641197681427,-0.845727860927582,0,-0.533614456653595,-1,0,-4.09386501587505e-07, +-1,0,-6.8922281570849e-07,-1,0,-9.09227367174026e-07,-1,0,-4.09386501587505e-07,-0.982819378376007,0,-0.184569805860519,-0.931352138519287,0,-0.3641197681427,-1,0,-4.09386501587505e-07,-1,0,-9.09227367174026e-07,-1,0,-8.05308445706032e-07,-1,0,-4.09386501587505e-07,-1,0,2.53402046013207e-08,-0.982819378376007,0,-0.184569805860519,-1,0,-4.09386501587505e-07,-1,0,-8.05308445706032e-07,-1,0,-3.83298782935526e-07,-1,0,-4.09386501587505e-07,-0.982819378376007,0,0.184569895267487,-1,0,2.53402046013207e-08,-1,0,-4.09386501587505e-07,-1,0,-3.83298782935526e-07,-1,0,-4.69029089344986e-07,-1,0,-4.09386501587505e-07,-0.931352317333221,0,0.364119231700897,-0.982819378376007,0,0.184569895267487,-1,0,-4.09386501587505e-07,-1,0,-4.69029089344986e-07,-1,0,-8.28585143608507e-07,-1,0,-4.09386501587505e-07,-0.84572821855545,0,0.533613860607147,-0.931352317333221,0,0.364119231700897,-1,0,-4.09386501587505e-07,-1,0,-8.28585143608507e-07,-1,0,-1.01180887668306e-06,-1,0,-4.09386501587505e-07,-0.725799262523651,0,0.687906563282013,-0.84572821855545,0,0.533613860607147,-1,0,-4.09386501587505e-07,-1,0,-1.01180887668306e-06,-0.839855790138245,0,0.54280960559845,-1,0,-4.09386501587505e-07,-0.839855790138245,0,0.54280960559845,-0.725799262523651,0,0.687906563282013,-1,0,-4.09386501587505e-07 + } + TangentsW: *240 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "UVSet0" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *176 { + a: 0.100599855184555,0.000453738117357716,0.200505390763283,0.000453738117357716,0.300410985946655,0.000453738117357716,0.400316506624222,0.000453738117357716,0.500221967697144,0.000453738117357716,0.600127279758453,0.000453738117357716,0.700032711029053,0.000453738117357716,0.799937963485718,0.000453738117357716,0.899843215942383,0.000453738117357716,0.999749004840851,0.000453738117357716,0.100599348545074,0.000453738117357716,0.200505018234253,0.000453738117357716,0.300410568714142,0.000453738117357716,0.400315999984741,0.000453738117357716,0.500221490859985,0.000453738117357716,0.600126802921295,0.000453738117357716,0.70003217458725,0.000453738117357716,0.79993748664856,0.000453738117357716,0.899842798709869,0.000453738117357716,0.999748051166534,0.000453738117357716,0.100599564611912,0.999430775642395,0.200505271553993,0.999430775642395,0.300410985946655,0.999430775642395,0.400316506624222,0.999430775642395,0.500221967697144,0.999430775642395,0.600127279758453,0.999430775642395,0.700032770633698,0.999430775642395,0.799938142299652,0.999430775642395,0.899843454360962,0.999430775642395,0.99974912405014,0.999430775642395,0.100599646568298,0.999430775642395,0.200505092740059,0.999430775642395,0.300410568714142,0.999430775642395,0.400315999984741,0.999430775642395,0.500221490859985,0.999430775642395,0.600126802921295,0.999430775642395,0.700032114982605,0.999430775642395,0.799937129020691,0.999430775642395,0.899842441082001,0.999430775642395,0.999747812747955,0.999430775642395,0.500223875045776,0.499944269657135,0.500224471092224,0.499944150447845,0.000693685607984662,0.000453738117357716,0.000694044632837176,0.999430775642395,0.000694270012900233,0.000453738117357716,0.000693908892571926,0.999430775642395,0.100599564611912,0.999430775642395,0.100599855184555,0.000453738117357716,0.0988569036126137,0.791553914546967,0.0283887684345245,0.653252303600311,0.208613634109497,0.901310741901398,0.346915364265442,0.971779048442841,0.500223994255066,0.996060848236084,0.653532683849335,0.971779048442841,0.79183441400528, +0.901310622692108,0.901591002941132,0.791553556919098,0.972058832645416,0.653252065181732,0.996340453624725,0.499943733215332,0.972058594226837,0.346635490655899,0.901590406894684,0.208334133028984,0.791833698749542,0.0985775515437126,0.653531968593597,0.0281094424426556,0.500223398208618,0.00382787548005581,0.346915006637573,0.0281097181141376,0.208613634109497,0.0985779464244843,0.098857082426548,0.208334684371948,0.0283891335129738,0.346636056900024,0.00410750508308411,0.499944150447845,0.972059607505798,0.653252303600311,0.90159147977829,0.791553914546967,0.791834652423859,0.901310741901398,0.653532981872559,0.971779048442841,0.50022429227829,0.996060848236084,0.346915662288666,0.971779048442841,0.208614185452461,0.901310622692108,0.0988576039671898,0.791553676128387,0.0283895954489708,0.653252184391022,0.00410802662372589,0.499943852424622,0.0283897146582603,0.346635550260544,0.0988578200340271,0.208334133028984,0.20861442387104,0.0985775515437126,0.346915870904922,0.0281093828380108,0.500224173069,0.00382772274315357,0.653532683849335,0.0281094126403332,0.79183441400528,0.0985775515437126,0.901591002941132,0.208334252238274,0.972059071063995,0.346635669469833,0.996340811252594,0.499943912029266 + } + UVIndex: *240 { + a: 0,21,20,0,1,21,1,22,21,1,2,22,2,23,22,2,3,23,3,24,23,3,4,24,4,25,24,4,5,25,5,26,25,5,6,26,6,27,26,6,7,27,7,28,27,7,8,28,8,29,28,8,9,29,42,30,43,42,10,30,10,31,30,10,11,31,11,32,31,11,12,32,12,33,32,12,13,33,13,34,33,13,14,34,14,35,34,14,15,35,15,36,35,15,16,36,16,37,36,16,17,37,17,38,37,17,18,38,18,39,38,18,19,39,44,46,45,44,47,46,86,87,41,85,86,41,87,68,41,84,85,41,68,69,41,83,84,41,69,70,41,82,83,41,70,71,41,81,82,41,71,72,41,80,81,41,72,73,41,79,80,41,73,74,41,78,79,41,74,75,41,77,78,41,75,76,41,76,77,41,67,66,40,49,67,40,66,65,40,48,49,40,65,64,40,50,48,40,64,63,40,51,50,40,63,62,40,52,51,40,62,61,40,53,52,40,61,60,40,54,53,40,60,59,40,55,54,40,59,58,40,56,55,40,58,57,40,57,56,40 + } + } + LayerElementUV: 1 { + Version: 101 + Name: "UVSet1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *176 { + a: 0.00828967522829771,0.00260018068365753,0.057734489440918,0.00260018068365753,0.107179269194603,0.00260018068365753,0.156623899936676,0.00260018068365753,0.20606841146946,0.00260018068365753,0.255512773990631,0.00260018068365753,0.30495697259903,0.00260018068365753,0.354400753974915,0.00260022329166532,0.403844773769379,0.00260022329166532,0.453288406133652,0.00260018068365753,0.502732157707214,0.00260018068365753,0.55217581987381,0.00260018068365753,0.601619124412537,0.00260018068365753,0.651062309741974,0.00260018068365753,0.700505316257477,0.00260018068365753,0.749948441982269,0.00260018068365753,0.79939216375351,0.00260018068365753,0.84883576631546,0.00260018068365753,0.89827972650528,0.00260018068365753,0.947724103927612,0.00260018068365753,0.0082895727828145,0.634747207164764,0.057734489440918,0.634747207164764,0.107179269194603,0.634747207164764,0.156623899936676,0.634747207164764,0.20606841146946,0.634747207164764,0.255512773990631,0.634747207164764,0.30495697259903,0.634747207164764,0.354401171207428,0.634747207164764,0.40384516119957,0.634747207164764,0.45328876376152,0.634747207164764,0.502732396125793,0.634747207164764,0.55217581987381,0.634747207164764,0.601619124412537,0.634747207164764,0.651062309741974,0.634747207164764,0.700505316257477,0.634747207164764,0.749948441982269,0.634747207164764,0.79939216375351,0.634747207164764,0.84883576631546,0.634747207164764,0.89827972650528,0.634747207164764,0.947724103927612,0.634747207164764,0.553604245185852,0.827422082424164,0.174818933010101,0.827422022819519,0.453288406133652,0.00260018068365753,0.45328876376152,0.634747207164764,0.947724103927612,0.00260018068365753,0.947724103927612,0.634747207164764,0.997168362140656,0.634747207164764,0.997168362140656,0.00260018068365753,0.415700495243073,0.92761504650116,0.391488492488861,0.88009649515152,0.453411161899567,0.965325891971588,0.500929772853851,0.98953765630722,0.553604245185852,0.997880637645721,0.606278836727142,0.98953765630722,0.653797268867493,0.965325653553009,0.691507995128632, +0.927614867687225,0.715719759464264,0.880096435546875,0.724062561988831,0.827421903610229,0.715719759464264,0.774747431278229,0.691507875919342,0.727228999137878,0.653796851634979,0.68951827287674,0.606278717517853,0.665306508541107,0.553604245185852,0.656963646411896,0.500929772853851,0.665306508541107,0.453411161899567,0.689518332481384,0.415700495243073,0.727229118347168,0.391488671302795,0.774747431278229,0.383145749568939,0.827422022819519,0.336934745311737,0.880096435546875,0.312722861766815,0.92761504650116,0.275012075901031,0.965325653553009,0.227493479847908,0.98953765630722,0.174818933010101,0.997880399227142,0.122144386172295,0.98953765630722,0.0746258795261383,0.965325653553009,0.0369151495397091,0.927614688873291,0.0127034150063992,0.88009637594223,0.00436061900109053,0.827421903610229,0.0127034150063992,0.774747431278229,0.0369153283536434,0.727228999137878,0.0746260583400726,0.68951827287674,0.122144497931004,0.665306448936462,0.174818843603134,0.656963586807251,0.227493420243263,0.665306448936462,0.275011837482452,0.68951815366745,0.312722682952881,0.727228999137878,0.336934506893158,0.774747431278229,0.345277369022369,0.827421903610229 + } + UVIndex: *240 { + a: 0,21,20,0,1,21,1,22,21,1,2,22,2,23,22,2,3,23,3,24,23,3,4,24,4,25,24,4,5,25,5,26,25,5,6,26,6,27,26,6,7,27,7,28,27,7,8,28,8,29,28,8,9,29,42,30,43,42,10,30,10,31,30,10,11,31,11,32,31,11,12,32,12,33,32,12,13,33,13,34,33,13,14,34,14,35,34,14,15,35,15,36,35,15,16,36,16,37,36,16,17,37,17,38,37,17,18,38,18,39,38,18,19,39,44,46,45,44,47,46,86,87,41,85,86,41,87,68,41,84,85,41,68,69,41,83,84,41,69,70,41,82,83,41,70,71,41,81,82,41,71,72,41,80,81,41,72,73,41,79,80,41,73,74,41,78,79,41,74,75,41,77,78,41,75,76,41,76,77,41,67,66,40,49,67,40,66,65,40,48,49,40,65,64,40,50,48,40,64,63,40,51,50,40,63,62,40,52,51,40,62,61,40,53,52,40,61,60,40,54,53,40,60,59,40,55,54,40,59,58,40,56,55,40,58,57,40,57,56,40 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + Layer: 1 { + Version: 100 + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 1 + } + } + } + Geometry: 140631874080352, "Geometry::Scene", "Mesh" { + Vertices: *18 { + a: -98.2456207275391,-65.4970765113831,-19.8215201497078,98.2456207275391,-65.4970765113831,-19.8215201497078,-0,93.3351039886475,-19.8215201497078,-98.2456207275391,-65.4970765113831,19.8215171694756,-0,93.3351039886475,19.8215171694756,98.2456207275391,-65.4970765113831,19.8215171694756 + } + PolygonVertexIndex: *24 { + a: 0,2,-2,3,5,-5,2,3,-5,2,0,-4,1,4,-6,1,2,-5,0,5,-4,0,1,-6 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *72 { + a: -0,0,-1,-0,0,-1,-0,0,-1,-0,0,1,-0,0,1,-0,0,1,-0.85045450925827,0.526048541069031,0,-0.85045450925827,0.526048541069031,0,-0.85045450925827,0.526048541069031,0,-0.85045450925827,0.526048541069031,0,-0.85045450925827,0.526048541069031,0,-0.85045450925827,0.526048541069031,0,0.85045450925827,0.526048541069031,0,0.85045450925827,0.526048541069031,0,0.85045450925827,0.526048541069031,0,0.85045450925827,0.526048541069031,0,0.85045450925827,0.526048541069031,0,0.85045450925827,0.526048541069031,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0,-0,-1,0 + } + NormalsW: *24 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *72 { + a: 0,1,-0,0,1,-0,0,1,-0,0,-1,-0,0,-1,-0,0,-1,-0,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,0,-0,0.526048541069031,-0,-0,-1,-0,-0,-1,-0,-0,-1,-0,-0,-1,-0,-0,-1,-0,-0,-1 + } + BinormalsW: *24 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *72 { + a: -1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0 + } + TangentsW: *24 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + } + } + Geometry: 140631874151072, "Geometry::Scene", "Mesh" { + Vertices: *432 { + a: -17.3648193478584,98.4807848930359,-20.15241086483,-17.3648193478584,98.4807848930359,20.1520875096321,-34.2020153999329,93.9692735671997,20.1520875096321,-34.2020153999329,93.9692735671997,-20.15241086483,-56.7443609237671,-32.761350274086,-18.0988386273384,-56.7443609237671,-32.761350274086,18.0985152721405,-61.5712344646454,-22.410075366497,18.0985152721405,-61.5712344646454,-22.410075366497,-18.0988386273384,98.4807848930359,17.3647791147232,-20.15241086483,98.4807848930359,17.3647791147232,20.1520875096321,93.9692795276642,34.2019736766815,20.1520875096321,93.9692795276642,34.2019736766815,-20.15241086483,-50,86.6025507450104,20.1520875096321,-50,86.6025507450104,-20.15241086483,-50.1933336257935,-42.1171814203262,-18.0988386273384,-50.1933336257935,-42.1171814203262,18.0985152721405,86.6025686264038,49.9999582767487,20.1520875096321,86.6025686264038,49.9999582767487,-20.15241086483,-64.2787635326385,76.6044557094574,20.1520875096321,-64.2787635326385,76.6044557094574,-20.15241086483,-42.1172142028809,-50.1933038234711,-18.0988386273384,-42.1172142028809,-50.1933038234711,18.0985152721405,76.6044855117798,64.2787277698517,20.1520875096321,76.6044855117798,64.2787277698517,-20.15241086483,-76.6044497489929,64.278769493103,20.1520875096321,-76.6044497489929,64.278769493103,-20.15241086483,-32.7613800764084,-56.7443311214447,-18.0988386273384,-32.7613800764084,-56.7443311214447,18.0985152721405,64.2788112163544,76.6044139862061,20.1520875096321,64.2788112163544,76.6044139862061,-20.15241086483,-86.6025447845459,50.0000059604645,20.1520875096321,-86.6025447845459,50.0000059604645,-20.15241086483,-22.4101170897484,-61.5712106227875,-18.0988386273384,-22.4101170897484,-61.5712106227875,18.0985152721405,50.0000596046448,86.602520942688,20.1520875096321,50.0000596046448,86.602520942688,-20.15241086483,-93.9692616462708,34.2020243406296,20.1520875096321,-93.9692616462708,34.2020243406296,-20.15241086483,-11.377926170826,-64.5272850990295,-18.0988386273384,-11.377926170826,-64.5272850990295,18.0985152721405, +34.2020809650421,93.9692497253418,20.1520875096321,34.2020809650421,93.9692497253418,-20.15241086483,-98.4807729721069,17.3648327589035,20.1520875096321,-98.4807729721069,17.3648327589035,-20.15241086483,-2.2783132180848e-05,-65.5227243900299,-18.0988386273384,-2.2783132180848e-05,-65.5227243900299,18.0985152721405,17.3648908734322,98.4807729721069,20.1520875096321,17.3648908734322,98.4807729721069,-20.15241086483,-100,1.78150344254391e-05,20.1520875096321,-100,1.78150344254391e-05,-20.15241086483,11.377876251936,-64.527291059494,-18.0988386273384,11.377876251936,-64.527291059494,18.0985152721405,-3.0009283946697e-07,100.000011920929,20.1520875096321,-3.0009283946697e-07,100.000011920929,-20.15241086483,-98.4807789325714,-17.3647969961166,20.1520875096321,-98.4807789325714,-17.3647969961166,-20.15241086483,22.4100634455681,-61.5712344646454,-18.0988386273384,22.4100634455681,-61.5712344646454,18.0985152721405,-93.9692676067352,-34.201991558075,20.1520875096321,-93.9692676067352,-34.201991558075,-20.15241086483,32.761338353157,-56.7443609237671,-18.0988386273384,32.761338353157,-56.7443609237671,18.0985152721405,-86.6025507450104,-49.9999761581421,20.1520875096321,-86.6025507450104,-49.9999761581421,-20.15241086483,42.1171754598618,-50.1933395862579,-18.0988386273384,42.1171754598618,-50.1933395862579,18.0985152721405,-76.6044557094574,-64.2787337303162,20.1520875096321,-76.6044557094574,-64.2787337303162,-20.15241086483,50.1933157444,-42.1172112226486,-18.0988386273384,50.1933157444,-42.1172112226486,18.0985152721405,-64.278781414032,-76.6044139862061,20.1520875096321,-64.278781414032,-76.6044139862061,-20.15241086483,56.7443370819092,-32.7613770961761,-18.0988386273384,56.7443370819092,-32.7613770961761,18.0985152721405,-50.0000238418579,-86.6025149822235,20.1520875096321,-50.0000238418579,-86.6025149822235,-20.15241086483,61.5712225437164,-22.4101096391678,-18.0988386273384,61.5712225437164,-22.4101096391678,18.0985152721405,-34.2020452022552,-93.9692378044128,20.1520875096321,-34.2020452022552,-93.9692378044128,-20.15241086483, +64.527291059494,-11.3779224455357,-18.0988386273384,64.527291059494,-11.3779224455357,18.0985152721405,-17.3648521304131,-98.4807550907135,20.1520875096321,-17.3648521304131,-98.4807550907135,-20.15241086483,65.5227363109589,-2.00179371745435e-05,-18.0988386273384,65.5227363109589,-2.00179371745435e-05,18.0985152721405,-11.3779045641422,64.527302980423,-18.0988386273384,-11.3779045641422,64.527302980423,18.0985152721405,-4.33947882072516e-06,65.5227482318878,18.0985152721405,-4.33947882072516e-06,65.5227482318878,-18.0988386273384,-3.92415302030713e-05,-99.999988079071,20.1520875096321,-3.92415302030713e-05,-99.999988079071,-20.15241086483,64.527302980423,11.3778799772263,-18.0988386273384,64.527302980423,11.3778799772263,18.0985152721405,-22.4100962281227,61.5712404251099,-18.0988386273384,-22.4100962281227,61.5712404251099,18.0985152721405,17.364776134491,-98.4807729721069,20.1520875096321,17.364776134491,-98.4807729721069,-20.15241086483,61.5712404251099,22.4100694060326,-18.0988386273384,61.5712404251099,22.4100694060326,18.0985152721405,-32.7613681554794,56.7443609237671,-18.0988386273384,-32.7613681554794,56.7443609237671,18.0985152721405,34.2019706964493,-93.9692676067352,20.1520875096321,34.2019706964493,-93.9692676067352,-20.15241086483,56.744372844696,32.7613443136215,-18.0988386273384,56.744372844696,32.7613443136215,18.0985152721405,-42.1172022819519,50.1933336257935,-18.0988386273384,-42.1172022819519,50.1933336257935,18.0985152721405,49.9999582767487,-86.6025507450104,20.1520875096321,49.9999582767487,-86.6025507450104,-20.15241086483,50.1933515071869,42.1171814203262,-18.0988386273384,50.1933515071869,42.1171814203262,18.0985152721405,-50.193327665329,42.1172052621841,-18.0988386273384,-50.193327665329,42.1172052621841,18.0985152721405,64.2787218093872,-76.6044676303864,20.1520875096321,64.2787218093872,-76.6044676303864,-20.15241086483,42.1172350645065,50.1933097839355,-18.0988386273384,42.1172350645065,50.1933097839355,18.0985152721405,-56.7443549633026,32.7613741159439,-18.0988386273384,-56.7443549633026,32.7613741159439,18.0985152721405, +76.604425907135,-64.2787754535675,20.1520875096321,76.604425907135,-64.2787754535675,-20.15241086483,32.7614068984985,56.7443370819092,-18.0988386273384,32.7614068984985,56.7443370819092,18.0985152721405,-61.5712285041809,22.4101066589355,-18.0988386273384,-61.5712285041809,22.4101066589355,18.0985152721405,86.602520942688,-50.0000178813934,20.1520875096321,86.602520942688,-50.0000178813934,-20.15241086483,22.4101409316063,61.5712225437164,-18.0988386273384,22.4101409316063,61.5712225437164,18.0985152721405,-64.527291059494,11.3779157400131,-18.0988386273384,-64.527291059494,11.3779157400131,18.0985152721405,93.9692497253418,-34.202042222023,20.1520875096321,93.9692497253418,-34.202042222023,-20.15241086483,11.3779552280903,64.5272970199585,-18.0988386273384,11.3779552280903,64.5272970199585,18.0985152721405,-65.5227363109589,1.18049619857175e-05,-18.0988386273384,-65.5227363109589,1.18049619857175e-05,18.0985152721405,98.4807670116425,-17.3648491501808,20.1520875096321,98.4807670116425,-17.3648491501808,-20.15241086483,-64.5272970199585,-11.3778874278069,-18.0988386273384,-64.5272970199585,-11.3778874278069,18.0985152721405,100,-3.62259839903345e-05,20.1520875096321,100,-3.62259839903345e-05,-20.15241086483 + } + PolygonVertexIndex: *864 { + a: 0,2,-2,0,3,-3,4,6,-6,4,7,-7,8,10,-10,8,11,-11,3,12,-3,3,13,-13,14,5,-16,14,4,-6,11,16,-11,11,17,-17,13,18,-13,13,19,-19,20,15,-22,20,14,-16,17,22,-17,17,23,-23,19,24,-19,19,25,-25,26,21,-28,26,20,-22,23,28,-23,23,29,-29,25,30,-25,25,31,-31,32,27,-34,32,26,-28,29,34,-29,29,35,-35,31,36,-31,31,37,-37,38,33,-40,38,32,-34,35,40,-35,35,41,-41,37,42,-37,37,43,-43,44,39,-46,44,38,-40,41,46,-41,41,47,-47,43,48,-43,43,49,-49,50,45,-52,50,44,-46,47,52,-47,47,53,-53,49,54,-49,49,55,-55,56,51,-58,56,50,-52,55,58,-55,55,59,-59,60,57,-62,60,56,-58,59,62,-59,59,63,-63,64,61,-66,64,60,-62,63,66,-63,63,67,-67,68,65,-70,68,64,-66,67,70,-67,67,71,-71,72,69,-74,72,68,-70,71,74,-71,71,75,-75,76,73,-78,76,72,-74,75,78,-75,75,79,-79,80,77,-82,80,76,-78,79,82,-79,79,83,-83,84,81,-86,84,80,-82,86,88,-88,86,89,-89,83,90,-83,83,91,-91,92,85,-94,92,84,-86,94,87,-96,94,86,-88,91,96,-91,91,97,-97,98,93,-100,98,92,-94,100,95,-102,100,94,-96,97,102,-97,97,103,-103,104,99,-106,104,98,-100,106,101,-108,106,100,-102,103,108,-103,103,109,-109,110,105,-112,110,104,-106,112,107,-114,112,106,-108,109,114,-109,109,115,-115,116,111,-118,116,110,-112,118,113,-120,118,112,-114,115,120,-115,115,121,-121,122,117,-124,122,116,-118,124,119,-126,124,118,-120,121,126,-121,121,127,-127,128,123,-130,128,122,-124,130,125,-132,130,124,-126,127,132,-127,127,133,-133,134,129,-136,134,128,-130,136,131,-138,136,130,-132,133,138,-133,133,139,-139,89,135,-89,89,134,-136,140,137,-142,140,136,-138,139,142,-139,139,143,-143,53,1,-53,53,0,-2,7,141,-7,7,140,-142,143,9,-143,143,8,-10,135,40,-47,135,129,-41,88,135,-47,129,34,-41,88,46,-53,129,123,-35,87,88,-53,123,28,-35,87,52,-2,123,117,-29,95,87,-2,117,22,-29,95,1,-3,117,111,-23,101,95,-3,111,16,-23,101,2,-13,111,105,-17,107,101,-13,105,10,-17,107,12,-19,105,99,-11,113,107,-19,99,9,-11,113,18,-25,99,93,-10,119,113,-25,93,142,-10,119,24,-31,93,85,-143,125,119,-31,85,138,-143,125,30,-37,85,81,-139,131,125,-37,81,132,-139,131,36,-43,81,77,-133,137,131,-43,77,126,-133,137,42,-49,77,73,-127,141,137,-49,73,120,-127, +141,48,-55,73,69,-121,6,141,-55,69,114,-121,6,54,-59,69,65,-115,5,6,-59,65,108,-115,5,58,-63,65,61,-109,15,5,-63,61,102,-109,15,62,-67,61,57,-103,21,15,-67,57,96,-103,21,66,-71,57,51,-97,27,21,-71,51,90,-97,27,70,-75,51,45,-91,33,27,-75,45,82,-91,33,74,-79,45,39,-83,39,33,-79,39,78,-83,134,41,-129,134,47,-42,128,41,-36,89,47,-135,128,35,-123,89,53,-48,122,35,-30,86,53,-90,122,29,-117,86,0,-54,116,29,-24,94,0,-87,116,23,-111,94,3,-1,110,23,-18,100,3,-95,110,17,-105,100,13,-4,104,17,-12,106,13,-101,104,11,-99,106,19,-14,98,11,-9,112,19,-107,98,8,-93,112,25,-20,92,8,-144,118,25,-113,92,143,-85,118,31,-26,84,143,-140,124,31,-119,84,139,-81,124,37,-32,80,139,-134,130,37,-125,80,133,-77,130,43,-38,76,133,-128,136,43,-131,76,127,-73,136,49,-44,72,127,-122,140,49,-137,72,121,-69,140,55,-50,68,121,-116,7,55,-141,68,115,-65,7,59,-56,64,115,-110,4,59,-8,64,109,-61,4,63,-60,60,109,-104,14,63,-5,60,103,-57,14,67,-64,56,103,-98,20,67,-15,56,97,-51,20,71,-68,50,97,-92,26,71,-21,50,91,-45,26,75,-72,44,91,-84,32,75,-27,44,83,-39,32,79,-76,38,79,-33,38,83,-80 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "Normals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *2592 { + a: -0.258818954229355,0.965925812721252,0,-0.258818954229355,0.965925812721252,0,-0.258818954229355,0.965925812721252,0,-0.258818954229355,0.965925812721252,0,-0.258818954229355,0.965925812721252,0,-0.258818954229355,0.965925812721252,0,0.906307876110077,0.422618061304092,0,0.906307876110077,0.422618061304092,0,0.906307876110077,0.422618061304092,0,0.906307876110077,0.422618061304092,0,0.906307876110077,0.422618061304092,0,0.906307876110077,0.422618061304092,0,0.965925931930542,0.258818417787552,0,0.965925931930542,0.258818417787552,0,0.965925931930542,0.258818417787552,0,0.965925931930542,0.258818417787552,0,0.965925931930542,0.258818417787552,0,0.965925931930542,0.258818417787552,0,-0.422618299722672,0.906307756900787,0,-0.422618299722672,0.906307756900787,0,-0.422618299722672,0.906307756900787,0,-0.422618299722672,0.906307756900787,0,-0.422618299722672,0.906307756900787,0,-0.422618299722672,0.906307756900787,0,0.819151997566223,0.57357656955719,0,0.819151997566223,0.57357656955719,0,0.819151997566223,0.57357656955719,0,0.819151997566223,0.57357656955719,0,0.819151997566223,0.57357656955719,0,0.819151997566223,0.57357656955719,0,0.906308054924011,0.422617763280869,0,0.906308054924011,0.422617763280869,0,0.906308054924011,0.422617763280869,0,0.906308054924011,0.422617763280869,0,0.906308054924011,0.422617763280869,0,0.906308054924011,0.422617763280869,0,-0.573576331138611,0.819152057170868,0,-0.573576331138611,0.819152057170868,0,-0.573576331138611,0.819152057170868,0,-0.573576331138611,0.819152057170868,0,-0.573576331138611,0.819152057170868,0,-0.573576331138611,0.819152057170868,0,0.707106947898865,0.707106590270996,0,0.707106947898865,0.707106590270996,0,0.707106947898865,0.707106590270996,0,0.707106947898865,0.707106590270996,0,0.707106947898865,0.707106590270996,0,0.707106947898865,0.707106590270996,0,0.819152414798737,0.573575913906097,0,0.819152414798737,0.573575913906097,0,0.819152414798737,0.573575913906097,0,0.819152414798737,0.573575913906097,0,0.819152414798737,0.573575913906097,0, +0.819152414798737,0.573575913906097,0,-0.70710676908493,0.707106709480286,0,-0.70710676908493,0.707106709480286,0,-0.70710676908493,0.707106709480286,0,-0.70710676908493,0.707106709480286,0,-0.70710676908493,0.707106709480286,0,-0.70710676908493,0.707106709480286,0,0.573576509952545,0.819151997566223,0,0.573576509952545,0.819151997566223,0,0.573576509952545,0.819151997566223,0,0.573576509952545,0.819151997566223,0,0.573576509952545,0.819151997566223,0,0.573576509952545,0.819151997566223,0,0.707107186317444,0.707106292247772,0,0.707107186317444,0.707106292247772,0,0.707107186317444,0.707106292247772,0,0.707107186317444,0.707106292247772,0,0.707107186317444,0.707106292247772,0,0.707107186317444,0.707106292247772,0,-0.819152057170868,0.573576271533966,0,-0.819152057170868,0.573576271533966,0,-0.819152057170868,0.573576271533966,0,-0.819152057170868,0.573576271533966,0,-0.819152057170868,0.573576271533966,0,-0.819152057170868,0.573576271533966,0,0.422618687152863,0.906307578086853,0,0.422618687152863,0.906307578086853,0,0.422618687152863,0.906307578086853,0,0.422618687152863,0.906307578086853,0,0.422618687152863,0.906307578086853,0,0.422618687152863,0.906307578086853,0,0.573576986789703,0.81915158033371,0,0.573576986789703,0.81915158033371,0,0.573576986789703,0.81915158033371,0,0.573576986789703,0.81915158033371,0,0.573576986789703,0.81915158033371,0,0.573576986789703,0.81915158033371,0,-0.906307756900787,0.422618180513382,0,-0.906307756900787,0.422618180513382,0,-0.906307756900787,0.422618180513382,0,-0.906307756900787,0.422618180513382,0,-0.906307756900787,0.422618180513382,0,-0.906307756900787,0.422618180513382,0,0.258819699287415,0.965925633907318,0,0.258819699287415,0.965925633907318,0,0.258819699287415,0.965925633907318,0,0.258819699287415,0.965925633907318,0,0.258819699287415,0.965925633907318,0,0.258819699287415,0.965925633907318,0,0.422618746757507,0.906307578086853,0,0.422618746757507,0.906307578086853,0,0.422618746757507,0.906307578086853,0,0.422618746757507,0.906307578086853,0,0.422618746757507,0.906307578086853,0, +0.422618746757507,0.906307578086853,0,-0.965925693511963,0.258819282054901,0,-0.965925693511963,0.258819282054901,0,-0.965925693511963,0.258819282054901,0,-0.965925693511963,0.258819282054901,0,-0.965925693511963,0.258819282054901,0,-0.965925693511963,0.258819282054901,0,0.0871559008955956,0.99619472026825,0,0.0871559008955956,0.99619472026825,0,0.0871559008955956,0.99619472026825,0,0.0871559008955956,0.99619472026825,0,0.0871559008955956,0.99619472026825,0,0.0871559008955956,0.99619472026825,0,0.25881963968277,0.965925633907318,0,0.25881963968277,0.965925633907318,0,0.25881963968277,0.965925633907318,0,0.25881963968277,0.965925633907318,0,0.25881963968277,0.965925633907318,0,0.25881963968277,0.965925633907318,0,-0.99619472026825,0.0871557071805,0,-0.99619472026825,0.0871557071805,0,-0.99619472026825,0.0871557071805,0,-0.99619472026825,0.0871557071805,0,-0.99619472026825,0.0871557071805,0,-0.99619472026825,0.0871557071805,0,-0.0871554091572762,0.99619472026825,0,-0.0871554091572762,0.99619472026825,0,-0.0871554091572762,0.99619472026825,0,-0.0871554091572762,0.99619472026825,0,-0.0871554091572762,0.99619472026825,0,-0.0871554091572762,0.99619472026825,0,0.0871561989188194,0.99619472026825,0,0.0871561989188194,0.99619472026825,0,0.0871561989188194,0.99619472026825,0,0.0871561989188194,0.99619472026825,0,0.0871561989188194,0.99619472026825,0,0.0871561989188194,0.99619472026825,0,-0.99619472026825,-0.0871557071805,0,-0.99619472026825,-0.0871557071805,0,-0.99619472026825,-0.0871557071805,0,-0.99619472026825,-0.0871557071805,0,-0.99619472026825,-0.0871557071805,0,-0.99619472026825,-0.0871557071805,0,-0.258818298578262,0.965926051139832,0,-0.258818298578262,0.965926051139832,0,-0.258818298578262,0.965926051139832,0,-0.258818298578262,0.965926051139832,0,-0.258818298578262,0.965926051139832,0,-0.258818298578262,0.965926051139832,0,-0.965925812721252,-0.258818805217743,0,-0.965925812721252,-0.258818805217743,0,-0.965925812721252,-0.258818805217743,0,-0.965925812721252,-0.258818805217743,0,-0.965925812721252,-0.258818805217743,0, +-0.965925812721252,-0.258818805217743,0,-0.422617852687836,0.906307995319366,0,-0.422617852687836,0.906307995319366,0,-0.422617852687836,0.906307995319366,0,-0.422617852687836,0.906307995319366,0,-0.422617852687836,0.906307995319366,0,-0.422617852687836,0.906307995319366,0,-0.906307876110077,-0.422618120908737,0,-0.906307876110077,-0.422618120908737,0,-0.906307876110077,-0.422618120908737,0,-0.906307876110077,-0.422618120908737,0,-0.906307876110077,-0.422618120908737,0,-0.906307876110077,-0.422618120908737,0,-0.573576152324677,0.819152235984802,0,-0.573576152324677,0.819152235984802,0,-0.573576152324677,0.819152235984802,0,-0.573576152324677,0.819152235984802,0,-0.573576152324677,0.819152235984802,0,-0.573576152324677,0.819152235984802,0,-0.819151997566223,-0.573576509952545,0,-0.819151997566223,-0.573576509952545,0,-0.819151997566223,-0.573576509952545,0,-0.819151997566223,-0.573576509952545,0,-0.819151997566223,-0.573576509952545,0,-0.819151997566223,-0.573576509952545,0,-0.707106113433838,0.707107365131378,0,-0.707106113433838,0.707107365131378,0,-0.707106113433838,0.707107365131378,0,-0.707106113433838,0.707107365131378,0,-0.707106113433838,0.707107365131378,0,-0.707106113433838,0.707107365131378,0,-0.70710700750351,-0.707106471061707,0,-0.70710700750351,-0.707106471061707,0,-0.70710700750351,-0.707106471061707,0,-0.70710700750351,-0.707106471061707,0,-0.70710700750351,-0.707106471061707,0,-0.70710700750351,-0.707106471061707,0,-0.819152235984802,0.573576152324677,0,-0.819152235984802,0.573576152324677,0,-0.819152235984802,0.573576152324677,0,-0.819152235984802,0.573576152324677,0,-0.819152235984802,0.573576152324677,0,-0.819152235984802,0.573576152324677,0,-0.573576629161835,-0.819151937961578,0,-0.573576629161835,-0.819151937961578,0,-0.573576629161835,-0.819151937961578,0,-0.573576629161835,-0.819151937961578,0,-0.573576629161835,-0.819151937961578,0,-0.573576629161835,-0.819151937961578,0,-0.906307458877563,0.422618865966797,0,-0.906307458877563,0.422618865966797,0,-0.906307458877563,0.422618865966797,0,-0.906307458877563,0.422618865966797,0, +-0.906307458877563,0.422618865966797,0,-0.906307458877563,0.422618865966797,0,-0.422618448734283,-0.906307697296143,0,-0.422618448734283,-0.906307697296143,0,-0.422618448734283,-0.906307697296143,0,-0.422618448734283,-0.906307697296143,0,-0.422618448734283,-0.906307697296143,0,-0.422618448734283,-0.906307697296143,0,-0.965925693511963,0.258819162845612,0,-0.965925693511963,0.258819162845612,0,-0.965925693511963,0.258819162845612,0,-0.965925693511963,0.258819162845612,0,-0.965925693511963,0.258819162845612,0,-0.965925693511963,0.258819162845612,0,-0.258819311857224,-0.965925693511963,0,-0.258819311857224,-0.965925693511963,0,-0.258819311857224,-0.965925693511963,0,-0.258819311857224,-0.965925693511963,0,-0.258819311857224,-0.965925693511963,0,-0.258819311857224,-0.965925693511963,0,-0.99619460105896,0.0871564522385597,0,-0.99619460105896,0.0871564522385597,0,-0.99619460105896,0.0871564522385597,0,-0.99619460105896,0.0871564522385597,0,-0.99619460105896,0.0871564522385597,0,-0.99619460105896,0.0871564522385597,0,0.0871564373373985,-0.99619460105896,0,0.0871564373373985,-0.99619460105896,0,0.0871564373373985,-0.99619460105896,0,0.0871564373373985,-0.99619460105896,0,0.0871564373373985,-0.99619460105896,0,0.0871564373373985,-0.99619460105896,0,-0.087156243622303,-0.99619472026825,0,-0.087156243622303,-0.99619472026825,0,-0.087156243622303,-0.99619472026825,0,-0.087156243622303,-0.99619472026825,0,-0.087156243622303,-0.99619472026825,0,-0.087156243622303,-0.99619472026825,0,-0.99619472026825,-0.087155394256115,0,-0.99619472026825,-0.087155394256115,0,-0.99619472026825,-0.087155394256115,0,-0.99619472026825,-0.087155394256115,0,-0.99619472026825,-0.087155394256115,0,-0.99619472026825,-0.087155394256115,0,0.258818715810776,-0.965925931930542,0,0.258818715810776,-0.965925931930542,0,0.258818715810776,-0.965925931930542,0,0.258818715810776,-0.965925931930542,0,0.258818715810776,-0.965925931930542,0,0.258818715810776,-0.965925931930542,0,0.0871552005410194,-0.99619472026825,0,0.0871552005410194,-0.99619472026825,0,0.0871552005410194,-0.99619472026825,0, +0.0871552005410194,-0.99619472026825,0,0.0871552005410194,-0.99619472026825,0,0.0871552005410194,-0.99619472026825,0,-0.965925812721252,-0.258818775415421,0,-0.965925812721252,-0.258818775415421,0,-0.965925812721252,-0.258818775415421,0,-0.965925812721252,-0.258818775415421,0,-0.965925812721252,-0.258818775415421,0,-0.965925812721252,-0.258818775415421,0,0.422618448734283,-0.906307756900787,0,0.422618448734283,-0.906307756900787,0,0.422618448734283,-0.906307756900787,0,0.422618448734283,-0.906307756900787,0,0.422618448734283,-0.906307756900787,0,0.422618448734283,-0.906307756900787,0,0.258818626403809,-0.965925931930542,0,0.258818626403809,-0.965925931930542,0,0.258818626403809,-0.965925931930542,0,0.258818626403809,-0.965925931930542,0,0.258818626403809,-0.965925931930542,0,0.258818626403809,-0.965925931930542,0,-0.906308174133301,-0.422617465257645,0,-0.906308174133301,-0.422617465257645,0,-0.906308174133301,-0.422617465257645,0,-0.906308174133301,-0.422617465257645,0,-0.906308174133301,-0.422617465257645,0,-0.906308174133301,-0.422617465257645,0,0.573576509952545,-0.819151997566223,0,0.573576509952545,-0.819151997566223,0,0.573576509952545,-0.819151997566223,0,0.573576509952545,-0.819151997566223,0,0.573576509952545,-0.819151997566223,0,0.573576509952545,-0.819151997566223,0,0.422617971897125,-0.906307995319366,0,0.422617971897125,-0.906307995319366,0,0.422617971897125,-0.906307995319366,0,0.422617971897125,-0.906307995319366,0,0.422617971897125,-0.906307995319366,0,0.422617971897125,-0.906307995319366,0,-0.819152295589447,-0.573576092720032,0,-0.819152295589447,-0.573576092720032,0,-0.819152295589447,-0.573576092720032,0,-0.819152295589447,-0.573576092720032,0,-0.819152295589447,-0.573576092720032,0,-0.819152295589447,-0.573576092720032,0,0.70710700750351,-0.707106471061707,0,0.70710700750351,-0.707106471061707,0,0.70710700750351,-0.707106471061707,0,0.70710700750351,-0.707106471061707,0,0.70710700750351,-0.707106471061707,0,0.70710700750351,-0.707106471061707,0,0.573575794696808,-0.819152474403381,0,0.573575794696808,-0.819152474403381,0, +0.573575794696808,-0.819152474403381,0,0.573575794696808,-0.819152474403381,0,0.573575794696808,-0.819152474403381,0,0.573575794696808,-0.819152474403381,0,-0.707107365131378,-0.707106113433838,0,-0.707107365131378,-0.707106113433838,0,-0.707107365131378,-0.707106113433838,0,-0.707107365131378,-0.707106113433838,0,-0.707107365131378,-0.707106113433838,0,-0.707107365131378,-0.707106113433838,0,0.819151759147644,-0.573576748371124,0,0.819151759147644,-0.573576748371124,0,0.819151759147644,-0.573576748371124,0,0.819151759147644,-0.573576748371124,0,0.819151759147644,-0.573576748371124,0,0.819151759147644,-0.573576748371124,0,0.707106530666351,-0.70710700750351,0,0.707106530666351,-0.70710700750351,0,0.707106530666351,-0.70710700750351,0,0.707106530666351,-0.70710700750351,0,0.707106530666351,-0.70710700750351,0,0.707106530666351,-0.70710700750351,0,-0.573576748371124,-0.819151759147644,0,-0.573576748371124,-0.819151759147644,0,-0.573576748371124,-0.819151759147644,0,-0.573576748371124,-0.819151759147644,0,-0.573576748371124,-0.819151759147644,0,-0.573576748371124,-0.819151759147644,0,0.906307876110077,-0.422617971897125,0,0.906307876110077,-0.422617971897125,0,0.906307876110077,-0.422617971897125,0,0.906307876110077,-0.422617971897125,0,0.906307876110077,-0.422617971897125,0,0.906307876110077,-0.422617971897125,0,0.819151997566223,-0.573576509952545,0,0.819151997566223,-0.573576509952545,0,0.819151997566223,-0.573576509952545,0,0.819151997566223,-0.573576509952545,0,0.819151997566223,-0.573576509952545,0,0.819151997566223,-0.573576509952545,0,-0.422619014978409,-0.906307399272919,0,-0.422619014978409,-0.906307399272919,0,-0.422619014978409,-0.906307399272919,0,-0.422619014978409,-0.906307399272919,0,-0.422619014978409,-0.906307399272919,0,-0.422619014978409,-0.906307399272919,0,0.965925812721252,-0.258818715810776,0,0.965925812721252,-0.258818715810776,0,0.965925812721252,-0.258818715810776,0,0.965925812721252,-0.258818715810776,0,0.965925812721252,-0.258818715810776,0,0.965925812721252,-0.258818715810776,0,0.906307399272919,-0.422619044780731,0, +0.906307399272919,-0.422619044780731,0,0.906307399272919,-0.422619044780731,0,0.906307399272919,-0.422619044780731,0,0.906307399272919,-0.422619044780731,0,0.906307399272919,-0.422619044780731,0,-0.258819788694382,-0.965925633907318,0,-0.258819788694382,-0.965925633907318,0,-0.258819788694382,-0.965925633907318,0,-0.258819788694382,-0.965925633907318,0,-0.258819788694382,-0.965925633907318,0,-0.258819788694382,-0.965925633907318,0,0.99619460105896,-0.0871564447879791,0,0.99619460105896,-0.0871564447879791,0,0.99619460105896,-0.0871564447879791,0,0.99619460105896,-0.0871564447879791,0,0.99619460105896,-0.0871564447879791,0,0.99619460105896,-0.0871564447879791,0,0.965925693511963,-0.258819252252579,0,0.965925693511963,-0.258819252252579,0,0.965925693511963,-0.258819252252579,0,0.965925693511963,-0.258819252252579,0,0.965925693511963,-0.258819252252579,0,0.965925693511963,-0.258819252252579,0,-0.0871565043926239,-0.99619460105896,0,-0.0871565043926239,-0.99619460105896,0,-0.0871565043926239,-0.99619460105896,0,-0.0871565043926239,-0.99619460105896,0,-0.0871565043926239,-0.99619460105896,0,-0.0871565043926239,-0.99619460105896,0,0.99619472026825,0.0871557593345642,0,0.99619472026825,0.0871557593345642,0,0.99619472026825,0.0871557593345642,0,0.99619472026825,0.0871557593345642,0,0.99619472026825,0.0871557593345642,0,0.99619472026825,0.0871557593345642,0,0.99619472026825,-0.0871561318635941,0,0.99619472026825,-0.0871561318635941,0,0.99619472026825,-0.0871561318635941,0,0.99619472026825,-0.0871561318635941,0,0.99619472026825,-0.0871561318635941,0,0.99619472026825,-0.0871561318635941,0,-0.0871558636426926,0.99619472026825,0,-0.0871558636426926,0.99619472026825,0,-0.0871558636426926,0.99619472026825,0,-0.0871558636426926,0.99619472026825,0,-0.0871558636426926,0.99619472026825,0,-0.0871558636426926,0.99619472026825,0,0.965925812721252,0.258818805217743,0,0.965925812721252,0.258818805217743,0,0.965925812721252,0.258818805217743,0,0.965925812721252,0.258818805217743,0,0.965925812721252,0.258818805217743,0,0.965925812721252,0.258818805217743,0, +0.99619472026825,0.087155282497406,0,0.99619472026825,0.087155282497406,0,0.99619472026825,0.087155282497406,0,0.99619472026825,0.087155282497406,0,0.99619472026825,0.087155282497406,0,0.99619472026825,0.087155282497406,0,-0.0154475457966328,-0.0576503090560436,0.998217284679413,-0.0252235140651464,-0.0540920607745647,0.998217284679413,-0.0154475457966328,-0.0576503090560436,0.998217284679413,-0.0154475457966328,-0.0576503090560436,0.998217284679413,-0.0252235140651464,-0.0540920607745647,0.998217284679413,-0.0252235140651464,-0.0540920607745647,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,-0.0154475457966328,-0.0576503090560436,0.998217284679413,-0.0154475457966328,-0.0576503090560436,0.998217284679413,-0.0252235140651464,-0.0540920607745647,0.998217284679413,-0.0342333875596523,-0.048890259116888,0.998217284679413,-0.0252235140651464,-0.0540920607745647,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,-0.0154475457966328,-0.0576503090560436,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,-0.0252235140651464,-0.0540920607745647,0.998217284679413,-0.0342333875596523,-0.048890259116888,0.998217284679413,-0.0342333875596523,-0.048890259116888,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,-0.0342333875596523,-0.048890259116888,0.998217284679413,-0.0422030240297318,-0.0422029681503773,0.998217284679413,-0.0342333875596523,-0.048890259116888,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,-0.0342333875596523,-0.048890259116888,0.998217284679413,-0.0422030240297318,-0.0422029681503773,0.998217284679413,-0.0422030240297318,-0.0422029681503773,0.998217284679413,0.0154473586007953,-0.0576503351330757,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413, +0.0052018454298377,-0.0594568960368633,0.998217284679413,-0.0422030240297318,-0.0422029681503773,0.998217284679413,-0.0488903075456619,-0.0342332795262337,0.998217284679413,-0.0422030240297318,-0.0422029681503773,0.998217284679413,0.0154473586007953,-0.0576503351330757,0.998217284679413,0.0052018454298377,-0.0594568960368633,0.998217284679413,0.0154473586007953,-0.0576503351330757,0.998217284679413,-0.0422030240297318,-0.0422029681503773,0.998217284679413,-0.0488903075456619,-0.0342332795262337,0.998217284679413,-0.0488903075456619,-0.0342332795262337,0.998217284679413,0.0252234898507595,-0.0540920868515968,0.998217284679413,0.0154473586007953,-0.0576503351330757,0.998217284679413,0.0154473586007953,-0.0576503351330757,0.998217284679413,-0.0488903075456619,-0.0342332795262337,0.998217284679413,-0.0540921092033386,-0.0252235233783722,0.998217284679413,-0.0488903075456619,-0.0342332795262337,0.998217284679413,0.0252234898507595,-0.0540920868515968,0.998217284679413,0.0154473586007953,-0.0576503351330757,0.998217284679413,0.0252234898507595,-0.0540920868515968,0.998217284679413,-0.0488903075456619,-0.0342332795262337,0.998217284679413,-0.0540921092033386,-0.0252235233783722,0.998217284679413,-0.0540921092033386,-0.0252235233783722,0.998217284679413,0.0342333503067493,-0.0488902777433395,0.998217284679413,0.0252234898507595,-0.0540920868515968,0.998217284679413,0.0252234898507595,-0.0540920868515968,0.998217284679413,-0.0540921092033386,-0.0252235233783722,0.998217284679413,-0.0576503612101078,-0.0154473418369889,0.998217284679413,-0.0540921092033386,-0.0252235233783722,0.998217284679413,0.0342333503067493,-0.0488902777433395,0.998217284679413,0.0252234898507595,-0.0540920868515968,0.998217284679413,0.0342333503067493,-0.0488902777433395,0.998217284679413,-0.0540921092033386,-0.0252235233783722,0.998217284679413,-0.0576503612101078,-0.0154473418369889,0.998217284679413,-0.0576503612101078,-0.0154473418369889,0.998217284679413,0.0422029793262482,-0.0422029420733452,0.998217284679413,0.0342333503067493,-0.0488902777433395,0.998217284679413, +0.0342333503067493,-0.0488902777433395,0.998217284679413,-0.0576503612101078,-0.0154473418369889,0.998217284679413,-0.0594568774104118,-0.00520180026069283,0.998217284679413,-0.0576503612101078,-0.0154473418369889,0.998217284679413,0.0422029793262482,-0.0422029420733452,0.998217284679413,0.0342333503067493,-0.0488902777433395,0.998217284679413,0.0422029793262482,-0.0422029420733452,0.998217284679413,-0.0576503612101078,-0.0154473418369889,0.998217284679413,-0.0594568774104118,-0.00520180026069283,0.998217284679413,-0.0594568774104118,-0.00520180026069283,0.998217284679413,0.0488902926445007,-0.0342333652079105,0.998217284679413,0.0422029793262482,-0.0422029420733452,0.998217284679413,0.0422029793262482,-0.0422029420733452,0.998217284679413,-0.0594568774104118,-0.00520180026069283,0.998217284679413,-0.0594569444656372,0.0052018747664988,0.998217284679413,-0.0594568774104118,-0.00520180026069283,0.998217284679413,0.0488902926445007,-0.0342333652079105,0.998217284679413,0.0422029793262482,-0.0422029420733452,0.998217284679413,0.0488902926445007,-0.0342333652079105,0.998217284679413,-0.0594568774104118,-0.00520180026069283,0.998217284679413,-0.0594569444656372,0.0052018747664988,0.998217284679413,-0.0594569444656372,0.0052018747664988,0.998217284679413,0.0540921092033386,-0.0252235233783722,0.998217284679413,0.0488902926445007,-0.0342333652079105,0.998217284679413,0.0488902926445007,-0.0342333652079105,0.998217284679413,-0.0594569444656372,0.0052018747664988,0.998217284679413,-0.0576503276824951,0.0154473800212145,0.998217284679413,-0.0594569444656372,0.0052018747664988,0.998217284679413,0.0540921092033386,-0.0252235233783722,0.998217284679413,0.0488902926445007,-0.0342333652079105,0.998217284679413,0.0540921092033386,-0.0252235233783722,0.998217284679413,-0.0594569444656372,0.0052018747664988,0.998217284679413,-0.0576503276824951,0.0154473800212145,0.998217284679413,-0.0576503276824951,0.0154473800212145,0.998217284679413,0.0576502792537212,-0.0154473781585693,0.998217284679413,0.0540921092033386,-0.0252235233783722,0.998217284679413, +0.0540921092033386,-0.0252235233783722,0.998217284679413,-0.0576503276824951,0.0154473800212145,0.998217284679413,-0.0540920570492744,0.0252235736697912,0.998217284679413,-0.0576503276824951,0.0154473800212145,0.998217284679413,0.0576502792537212,-0.0154473781585693,0.998217284679413,0.0540921092033386,-0.0252235233783722,0.998217284679413,0.0576502792537212,-0.0154473781585693,0.998217284679413,-0.0576503276824951,0.0154473800212145,0.998217284679413,-0.0540920570492744,0.0252235736697912,0.998217284679413,-0.0540920570492744,0.0252235736697912,0.998217284679413,0.0594568587839603,-0.00520183611661196,0.998217284679413,0.0576502792537212,-0.0154473781585693,0.998217284679413,0.0576502792537212,-0.0154473781585693,0.998217284679413,-0.0540920570492744,0.0252235736697912,0.998217284679413,-0.0488903112709522,0.0342333428561687,0.998217284679413,-0.0540920570492744,0.0252235736697912,0.998217284679413,0.0594568587839603,-0.00520183611661196,0.998217284679413,0.0576502792537212,-0.0154473781585693,0.998217284679413,0.0594568587839603,-0.00520183611661196,0.998217284679413,-0.0540920570492744,0.0252235736697912,0.998217284679413,-0.0488903112709522,0.0342333428561687,0.998217284679413,-0.0488903112709522,0.0342333428561687,0.998217284679413,0.0594569519162178,0.00520183751359582,0.998217284679413,0.0594568587839603,-0.00520183611661196,0.998217284679413,0.0594568587839603,-0.00520183611661196,0.998217284679413,-0.0488903112709522,0.0342333428561687,0.998217284679413,-0.0422029532492161,0.0422029942274094,0.998217284679413,-0.0488903112709522,0.0342333428561687,0.998217284679413,0.0594569519162178,0.00520183751359582,0.998217284679413,0.0594568587839603,-0.00520183611661196,0.998217284679413,0.0594569519162178,0.00520183751359582,0.998217284679413,-0.0488903112709522,0.0342333428561687,0.998217284679413,-0.0422029532492161,0.0422029942274094,0.998217284679413,-0.0422029532492161,0.0422029942274094,0.998217284679413,0.0576503165066242,0.0154473409056664,0.998217284679413,0.0594569519162178,0.00520183751359582,0.998217284679413, +0.0594569519162178,0.00520183751359582,0.998217284679413,-0.0422029532492161,0.0422029942274094,0.998217284679413,-0.034233320504427,0.0488903038203716,0.998217284679413,-0.0422029532492161,0.0422029942274094,0.998217284679413,0.0576503165066242,0.0154473409056664,0.998217284679413,0.0594569519162178,0.00520183751359582,0.998217284679413,0.0576503165066242,0.0154473409056664,0.998217284679413,-0.0422029532492161,0.0422029942274094,0.998217284679413,-0.034233320504427,0.0488903038203716,0.998217284679413,-0.034233320504427,0.0488903038203716,0.998217284679413,0.0540920980274677,0.0252235550433397,0.998217284679413,0.0576503165066242,0.0154473409056664,0.998217284679413,0.0576503165066242,0.0154473409056664,0.998217284679413,-0.034233320504427,0.0488903038203716,0.998217284679413,-0.025223471224308,0.0540921054780483,0.998217284679413,-0.034233320504427,0.0488903038203716,0.998217284679413,0.0540920980274677,0.0252235550433397,0.998217284679413,0.0576503165066242,0.0154473409056664,0.998217284679413,0.0540920980274677,0.0252235550433397,0.998217284679413,-0.034233320504427,0.0488903038203716,0.998217284679413,-0.025223471224308,0.0540921054780483,0.998217284679413,-0.025223471224308,0.0540921054780483,0.998217284679413,0.0488903075456619,0.0342333242297173,0.998217284679413,0.0540920980274677,0.0252235550433397,0.998217284679413,0.0540920980274677,0.0252235550433397,0.998217284679413,-0.025223471224308,0.0540921054780483,0.998217284679413,-0.0154473418369889,0.0576503202319145,0.998217284679413,-0.025223471224308,0.0540921054780483,0.998217284679413,0.0488903075456619,0.0342333242297173,0.998217284679413,0.0540920980274677,0.0252235550433397,0.998217284679413,0.0488903075456619,0.0342333242297173,0.998217284679413,-0.025223471224308,0.0540921054780483,0.998217284679413,-0.0154473418369889,0.0576503202319145,0.998217284679413,-0.0154473418369889,0.0576503202319145,0.998217284679413,0.0422029830515385,0.042202964425087,0.998217284679413,0.0488903075456619,0.0342333242297173,0.998217284679413,0.0488903075456619,0.0342333242297173,0.998217284679413, +-0.0154473418369889,0.0576503202319145,0.998217284679413,-0.00520181516185403,0.0594569146633148,0.998217284679413,-0.0154473418369889,0.0576503202319145,0.998217284679413,0.0422029830515385,0.042202964425087,0.998217284679413,0.0488903075456619,0.0342333242297173,0.998217284679413,0.0422029830515385,0.042202964425087,0.998217284679413,-0.0154473418369889,0.0576503202319145,0.998217284679413,-0.00520181516185403,0.0594569146633148,0.998217284679413,-0.00520181516185403,0.0594569146633148,0.998217284679413,0.034233346581459,0.0488902702927589,0.998217284679413,0.0422029830515385,0.042202964425087,0.998217284679413,0.0422029830515385,0.042202964425087,0.998217284679413,-0.00520181516185403,0.0594569146633148,0.998217284679413,0.00520194135606289,0.0594569072127342,0.998217284679413,-0.00520181516185403,0.0594569146633148,0.998217284679413,0.034233346581459,0.0488902702927589,0.998217284679413,0.0422029830515385,0.042202964425087,0.998217284679413,0.034233346581459,0.0488902702927589,0.998217284679413,-0.00520181516185403,0.0594569146633148,0.998217284679413,0.00520194135606289,0.0594569072127342,0.998217284679413,0.00520194135606289,0.0594569072127342,0.998217284679413,0.0252235885709524,0.0540921092033386,0.998217284679413,0.034233346581459,0.0488902702927589,0.998217284679413,0.034233346581459,0.0488902702927589,0.998217284679413,0.00520194135606289,0.0594569072127342,0.998217284679413,0.015447448939085,0.0576503165066242,0.998217284679413,0.00520194135606289,0.0594569072127342,0.998217284679413,0.0252235885709524,0.0540921092033386,0.998217284679413,0.034233346581459,0.0488902702927589,0.998217284679413,0.0252235885709524,0.0540921092033386,0.998217284679413,0.00520194135606289,0.0594569072127342,0.998217284679413,0.015447448939085,0.0576503165066242,0.998217284679413,0.015447448939085,0.0576503165066242,0.998217284679413,0.015447448939085,0.0576503165066242,0.998217284679413,0.0252235885709524,0.0540921092033386,0.998217284679413,0.0252235885709524,0.0540921092033386,0.998217284679413,0.015447448939085,0.0576503165066242,0.998217284679413, +0.0252235885709524,0.0540921092033386,0.998217284679413,0.015447448939085,0.0576503165066242,0.998217284679413,-0.015447448939085,-0.0576502978801727,-0.998217284679413,-0.0252236276865005,-0.0540920607745647,-0.998217284679413,-0.0252236276865005,-0.0540920607745647,-0.998217284679413,-0.015447448939085,-0.0576502978801727,-0.998217284679413,-0.015447448939085,-0.0576502978801727,-0.998217284679413,-0.0252236276865005,-0.0540920607745647,-0.998217284679413,-0.0252236276865005,-0.0540920607745647,-0.998217284679413,-0.0252236276865005,-0.0540920607745647,-0.998217284679413,-0.0342333093285561,-0.0488902516663074,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,-0.015447448939085,-0.0576502978801727,-0.998217284679413,-0.015447448939085,-0.0576502978801727,-0.998217284679413,-0.0252236276865005,-0.0540920607745647,-0.998217284679413,-0.0342333093285561,-0.0488902516663074,-0.998217284679413,-0.0342333093285561,-0.0488902516663074,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,-0.015447448939085,-0.0576502978801727,-0.998217284679413,-0.0342333093285561,-0.0488902516663074,-0.998217284679413,-0.0342333093285561,-0.0488902516663074,-0.998217284679413,-0.0422030240297318,-0.0422029681503773,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,-0.0342333093285561,-0.0488902516663074,-0.998217284679413,-0.0422030240297318,-0.0422029681503773,-0.998217284679413,-0.0422030240297318,-0.0422029681503773,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,-0.0422030240297318,-0.0422029681503773,-0.998217284679413,-0.0422030240297318,-0.0422029681503773,-0.998217284679413,-0.0488903112709522,-0.0342332795262337,-0.998217284679413, +0.0154472254216671,-0.0576503314077854,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,-0.0422030240297318,-0.0422029681503773,-0.998217284679413,-0.0488903112709522,-0.0342332795262337,-0.998217284679413,-0.0488903112709522,-0.0342332795262337,-0.998217284679413,0.0154472254216671,-0.0576503314077854,-0.998217284679413,0.0154472254216671,-0.0576503314077854,-0.998217284679413,0.00520176161080599,-0.0594568997621536,-0.998217284679413,-0.0488903112709522,-0.0342332795262337,-0.998217284679413,-0.0488903112709522,-0.0342332795262337,-0.998217284679413,-0.054092101752758,-0.0252235196530819,-0.998217284679413,0.025223545730114,-0.0540920868515968,-0.998217284679413,0.0154472254216671,-0.0576503314077854,-0.998217284679413,0.0154472254216671,-0.0576503314077854,-0.998217284679413,-0.0488903112709522,-0.0342332795262337,-0.998217284679413,-0.054092101752758,-0.0252235196530819,-0.998217284679413,-0.054092101752758,-0.0252235196530819,-0.998217284679413,0.025223545730114,-0.0540920868515968,-0.998217284679413,0.025223545730114,-0.0540920868515968,-0.998217284679413,0.0154472254216671,-0.0576503314077854,-0.998217284679413,-0.054092101752758,-0.0252235196530819,-0.998217284679413,-0.054092101752758,-0.0252235196530819,-0.998217284679413,-0.0576502904295921,-0.0154473427683115,-0.998217284679413,0.0342333130538464,-0.0488902777433395,-0.998217284679413,0.025223545730114,-0.0540920868515968,-0.998217284679413,0.025223545730114,-0.0540920868515968,-0.998217284679413,-0.054092101752758,-0.0252235196530819,-0.998217284679413,-0.0576502904295921,-0.0154473427683115,-0.998217284679413,-0.0576502904295921,-0.0154473427683115,-0.998217284679413,0.0342333130538464,-0.0488902777433395,-0.998217284679413,0.0342333130538464,-0.0488902777433395,-0.998217284679413,0.025223545730114,-0.0540920868515968,-0.998217284679413,-0.0576502904295921,-0.0154473427683115,-0.998217284679413,-0.0576502904295921,-0.0154473427683115,-0.998217284679413,-0.0594569258391857,-0.00520180026069283,-0.998217284679413, +0.0422029048204422,-0.0422029420733452,-0.998217284679413,0.0342333130538464,-0.0488902777433395,-0.998217284679413,0.0342333130538464,-0.0488902777433395,-0.998217284679413,-0.0576502904295921,-0.0154473427683115,-0.998217284679413,-0.0594569258391857,-0.00520180026069283,-0.998217284679413,-0.0594569258391857,-0.00520180026069283,-0.998217284679413,0.0422029048204422,-0.0422029420733452,-0.998217284679413,0.0422029048204422,-0.0422029420733452,-0.998217284679413,0.0342333130538464,-0.0488902777433395,-0.998217284679413,-0.0594569258391857,-0.00520180026069283,-0.998217284679413,-0.0594569258391857,-0.00520180026069283,-0.998217284679413,-0.0594569258391857,0.0052018747664988,-0.998217284679413,0.0488903261721134,-0.0342333652079105,-0.998217284679413,0.0422029048204422,-0.0422029420733452,-0.998217284679413,0.0422029048204422,-0.0422029420733452,-0.998217284679413,-0.0594569258391857,-0.00520180026069283,-0.998217284679413,-0.0594569258391857,0.0052018747664988,-0.998217284679413,-0.0594569258391857,0.0052018747664988,-0.998217284679413,0.0488903261721134,-0.0342333652079105,-0.998217284679413,0.0488903261721134,-0.0342333652079105,-0.998217284679413,0.0422029048204422,-0.0422029420733452,-0.998217284679413,-0.0594569258391857,0.0052018747664988,-0.998217284679413,-0.0594569258391857,0.0052018747664988,-0.998217284679413,-0.0576502904295921,0.0154473800212145,-0.998217284679413,0.054092101752758,-0.0252235196530819,-0.998217284679413,0.0488903261721134,-0.0342333652079105,-0.998217284679413,0.0488903261721134,-0.0342333652079105,-0.998217284679413,-0.0594569258391857,0.0052018747664988,-0.998217284679413,-0.0576502904295921,0.0154473800212145,-0.998217284679413,-0.0576502904295921,0.0154473800212145,-0.998217284679413,0.054092101752758,-0.0252235196530819,-0.998217284679413,0.054092101752758,-0.0252235196530819,-0.998217284679413,0.0488903261721134,-0.0342333652079105,-0.998217284679413,-0.0576502904295921,0.0154473800212145,-0.998217284679413,-0.0576502904295921,0.0154473800212145,-0.998217284679413,-0.0540920943021774,0.0252235736697912,-0.998217284679413, +0.0576503165066242,-0.0154473781585693,-0.998217284679413,0.054092101752758,-0.0252235196530819,-0.998217284679413,0.054092101752758,-0.0252235196530819,-0.998217284679413,-0.0576502904295921,0.0154473800212145,-0.998217284679413,-0.0540920943021774,0.0252235736697912,-0.998217284679413,-0.0540920943021774,0.0252235736697912,-0.998217284679413,0.0576503165066242,-0.0154473781585693,-0.998217284679413,0.0576503165066242,-0.0154473781585693,-0.998217284679413,0.054092101752758,-0.0252235196530819,-0.998217284679413,-0.0540920943021774,0.0252235736697912,-0.998217284679413,-0.0540920943021774,0.0252235736697912,-0.998217284679413,-0.0488902740180492,0.0342333428561687,-0.998217284679413,0.0594569146633148,-0.00520183611661196,-0.998217284679413,0.0576503165066242,-0.0154473781585693,-0.998217284679413,0.0576503165066242,-0.0154473781585693,-0.998217284679413,-0.0540920943021774,0.0252235736697912,-0.998217284679413,-0.0488902740180492,0.0342333428561687,-0.998217284679413,-0.0488902740180492,0.0342333428561687,-0.998217284679413,0.0594569146633148,-0.00520183611661196,-0.998217284679413,0.0594569146633148,-0.00520183611661196,-0.998217284679413,0.0576503165066242,-0.0154473781585693,-0.998217284679413,-0.0488902740180492,0.0342333428561687,-0.998217284679413,-0.0488902740180492,0.0342333428561687,-0.998217284679413,-0.0422028787434101,0.0422029942274094,-0.998217284679413,0.0594568699598312,0.00520183751359582,-0.998217284679413,0.0594569146633148,-0.00520183611661196,-0.998217284679413,0.0594569146633148,-0.00520183611661196,-0.998217284679413,-0.0488902740180492,0.0342333428561687,-0.998217284679413,-0.0422028787434101,0.0422029942274094,-0.998217284679413,-0.0422028787434101,0.0422029942274094,-0.998217284679413,0.0594568699598312,0.00520183751359582,-0.998217284679413,0.0594568699598312,0.00520183751359582,-0.998217284679413,0.0594569146633148,-0.00520183611661196,-0.998217284679413,-0.0422028787434101,0.0422029942274094,-0.998217284679413,-0.0422028787434101,0.0422029942274094,-0.998217284679413,-0.034233245998621,0.0488903038203716,-0.998217284679413, +0.0576503239572048,0.0154473418369889,-0.998217284679413,0.0594568699598312,0.00520183751359582,-0.998217284679413,0.0594568699598312,0.00520183751359582,-0.998217284679413,-0.0422028787434101,0.0422029942274094,-0.998217284679413,-0.034233245998621,0.0488903038203716,-0.998217284679413,-0.034233245998621,0.0488903038203716,-0.998217284679413,0.0576503239572048,0.0154473418369889,-0.998217284679413,0.0576503239572048,0.0154473418369889,-0.998217284679413,0.0594568699598312,0.00520183751359582,-0.998217284679413,-0.034233245998621,0.0488903038203716,-0.998217284679413,-0.034233245998621,0.0488903038203716,-0.998217284679413,-0.025223545730114,0.0540921054780483,-0.998217284679413,0.0540920943021774,0.0252235550433397,-0.998217284679413,0.0576503239572048,0.0154473418369889,-0.998217284679413,0.0576503239572048,0.0154473418369889,-0.998217284679413,-0.034233245998621,0.0488903038203716,-0.998217284679413,-0.025223545730114,0.0540921054780483,-0.998217284679413,-0.025223545730114,0.0540921054780483,-0.998217284679413,0.0540920943021774,0.0252235550433397,-0.998217284679413,0.0540920943021774,0.0252235550433397,-0.998217284679413,0.0576503239572048,0.0154473418369889,-0.998217284679413,-0.025223545730114,0.0540921054780483,-0.998217284679413,-0.025223545730114,0.0540921054780483,-0.998217284679413,-0.0154472291469574,0.0576503202319145,-0.998217284679413,0.0488903038203716,0.034233320504427,-0.998217284679413,0.0540920943021774,0.0252235550433397,-0.998217284679413,0.0540920943021774,0.0252235550433397,-0.998217284679413,-0.025223545730114,0.0540921054780483,-0.998217284679413,-0.0154472291469574,0.0576503202319145,-0.998217284679413,-0.0154472291469574,0.0576503202319145,-0.998217284679413,0.0488903038203716,0.034233320504427,-0.998217284679413,0.0488903038203716,0.034233320504427,-0.998217284679413,0.0540920943021774,0.0252235550433397,-0.998217284679413,-0.0154472291469574,0.0576503202319145,-0.998217284679413,-0.0154472291469574,0.0576503202319145,-0.998217284679413,-0.00520176393911242,0.0594569183886051,-0.998217284679413, +0.0422029495239258,0.0422029681503773,-0.998217284679413,0.0488903038203716,0.034233320504427,-0.998217284679413,0.0488903038203716,0.034233320504427,-0.998217284679413,-0.0154472291469574,0.0576503202319145,-0.998217284679413,-0.00520176393911242,0.0594569183886051,-0.998217284679413,-0.00520176393911242,0.0594569183886051,-0.998217284679413,0.0422029495239258,0.0422029681503773,-0.998217284679413,0.0422029495239258,0.0422029681503773,-0.998217284679413,0.0488903038203716,0.034233320504427,-0.998217284679413,-0.00520176393911242,0.0594569183886051,-0.998217284679413,-0.00520176393911242,0.0594569183886051,-0.998217284679413,0.00520176254212856,0.0594569072127342,-0.998217284679413,0.0342332348227501,0.0488902702927589,-0.998217284679413,0.0422029495239258,0.0422029681503773,-0.998217284679413,0.0422029495239258,0.0422029681503773,-0.998217284679413,-0.00520176393911242,0.0594569183886051,-0.998217284679413,0.00520176254212856,0.0594569072127342,-0.998217284679413,0.00520176254212856,0.0594569072127342,-0.998217284679413,0.0342332348227501,0.0488902702927589,-0.998217284679413,0.0342332348227501,0.0488902702927589,-0.998217284679413,0.0422029495239258,0.0422029681503773,-0.998217284679413,0.00520176254212856,0.0594569072127342,-0.998217284679413,0.00520176254212856,0.0594569072127342,-0.998217284679413,0.0154473772272468,0.0576503276824951,-0.998217284679413,0.0252236425876617,0.0540920980274677,-0.998217284679413,0.0342332348227501,0.0488902702927589,-0.998217284679413,0.0342332348227501,0.0488902702927589,-0.998217284679413,0.00520176254212856,0.0594569072127342,-0.998217284679413,0.0154473772272468,0.0576503276824951,-0.998217284679413,0.0154473772272468,0.0576503276824951,-0.998217284679413,0.0252236425876617,0.0540920980274677,-0.998217284679413,0.0252236425876617,0.0540920980274677,-0.998217284679413,0.0342332348227501,0.0488902702927589,-0.998217284679413,0.0154473772272468,0.0576503276824951,-0.998217284679413,0.0252236425876617,0.0540920980274677,-0.998217284679413,0.0252236425876617,0.0540920980274677,-0.998217284679413, +0.0154473772272468,0.0576503276824951,-0.998217284679413,0.0154473772272468,0.0576503276824951,-0.998217284679413,0.0252236425876617,0.0540920980274677,-0.998217284679413 + } + NormalsW: *864 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "Binormals" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *2592 { + a: 0,-0,0.965925812721252,0,-0,0.965925812721252,0,-0,0.965925812721252,0,-0,0.965925812721252,0,-0,0.965925812721252,0,-0,0.965925812721252,0,-0,0.422618061304092,0,-0,0.422618061304092,0,-0,0.422618061304092,0,-0,0.422618061304092,0,-0,0.422618061304092,0,-0,0.422618061304092,0,-0,0.258818417787552,0,-0,0.258818417787552,0,-0,0.258818417787552,0,-0,0.258818417787552,0,-0,0.258818417787552,0,-0,0.258818417787552,0,-0,0.906307756900787,0,-0,0.906307756900787,0,-0,0.906307756900787,0,-0,0.906307756900787,0,-0,0.906307756900787,0,-0,0.906307756900787,0,-0,0.57357656955719,0,-0,0.57357656955719,0,-0,0.57357656955719,0,-0,0.57357656955719,0,-0,0.57357656955719,0,-0,0.57357656955719,0,-0,0.422617763280869,0,-0,0.422617763280869,0,-0,0.422617763280869,0,-0,0.422617763280869,0,-0,0.422617763280869,0,-0,0.422617763280869,0,-0,0.819152057170868,0,-0,0.819152057170868,0,-0,0.819152057170868,0,-0,0.819152057170868,0,-0,0.819152057170868,0,-0,0.819152057170868,0,-0,0.707106590270996,0,-0,0.707106590270996,0,-0,0.707106590270996,0,-0,0.707106590270996,0,-0,0.707106590270996,0,-0,0.707106590270996,0,-0,0.573575913906097,0,-0,0.573575913906097,0,-0,0.573575913906097,0,-0,0.573575913906097,0,-0,0.573575913906097,0,-0,0.573575913906097,0,-0,0.707106709480286,0,-0,0.707106709480286,0,-0,0.707106709480286,0,-0,0.707106709480286,0,-0,0.707106709480286,0,-0,0.707106709480286,0,-0,0.819151997566223,0,-0,0.819151997566223,0,-0,0.819151997566223,0,-0,0.819151997566223,0,-0,0.819151997566223,0,-0,0.819151997566223,0,-0,0.707106292247772,0,-0,0.707106292247772,0,-0,0.707106292247772,0,-0,0.707106292247772,0,-0,0.707106292247772,0,-0,0.707106292247772,0,-0,0.573576271533966,0,-0,0.573576271533966,0,-0,0.573576271533966,0,-0,0.573576271533966,0,-0,0.573576271533966,0,-0,0.573576271533966,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.81915158033371,0,-0,0.81915158033371,0,-0,0.81915158033371,0,-0,0.81915158033371,0,-0,0.81915158033371, +0,-0,0.81915158033371,0,-0,0.422618180513382,0,-0,0.422618180513382,0,-0,0.422618180513382,0,-0,0.422618180513382,0,-0,0.422618180513382,0,-0,0.422618180513382,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.906307578086853,0,-0,0.258819282054901,0,-0,0.258819282054901,0,-0,0.258819282054901,0,-0,0.258819282054901,0,-0,0.258819282054901,0,-0,0.258819282054901,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.965925633907318,0,-0,0.0871557071805,0,-0,0.0871557071805,0,-0,0.0871557071805,0,-0,0.0871557071805,0,-0,0.0871557071805,0,-0,0.0871557071805,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,-0,-0,-0.0871557071805,-0,-0,-0.0871557071805,-0,-0,-0.0871557071805,-0,-0,-0.0871557071805,-0,-0,-0.0871557071805,-0,-0,-0.0871557071805,0,-0,0.965926051139832,0,-0,0.965926051139832,0,-0,0.965926051139832,0,-0,0.965926051139832,0,-0,0.965926051139832,0,-0,0.965926051139832,-0,-0,-0.258818805217743,-0,-0,-0.258818805217743,-0,-0,-0.258818805217743,-0,-0,-0.258818805217743,-0,-0,-0.258818805217743,-0,-0,-0.258818805217743,0,-0,0.906307995319366,0,-0,0.906307995319366,0,-0,0.906307995319366,0,-0,0.906307995319366,0,-0,0.906307995319366,0,-0,0.906307995319366,-0,-0,-0.422618120908737,-0,-0,-0.422618120908737,-0,-0,-0.422618120908737,-0,-0,-0.422618120908737,-0,-0,-0.422618120908737,-0,-0,-0.422618120908737,0,-0,0.819152235984802,0,-0,0.819152235984802,0,-0,0.819152235984802,0,-0,0.819152235984802,0,-0,0.819152235984802, +0,-0,0.819152235984802,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,0,-0,0.707107365131378,0,-0,0.707107365131378,0,-0,0.707107365131378,0,-0,0.707107365131378,0,-0,0.707107365131378,0,-0,0.707107365131378,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,0,-0,0.573576152324677,0,-0,0.573576152324677,0,-0,0.573576152324677,0,-0,0.573576152324677,0,-0,0.573576152324677,0,-0,0.573576152324677,-0,-0,-0.819151937961578,-0,-0,-0.819151937961578,-0,-0,-0.819151937961578,-0,-0,-0.819151937961578,-0,-0,-0.819151937961578,-0,-0,-0.819151937961578,0,-0,0.422618865966797,0,-0,0.422618865966797,0,-0,0.422618865966797,0,-0,0.422618865966797,0,-0,0.422618865966797,0,-0,0.422618865966797,-0,-0,-0.906307697296143,-0,-0,-0.906307697296143,-0,-0,-0.906307697296143,-0,-0,-0.906307697296143,-0,-0,-0.906307697296143,-0,-0,-0.906307697296143,0,-0,0.258819162845612,0,-0,0.258819162845612,0,-0,0.258819162845612,0,-0,0.258819162845612,0,-0,0.258819162845612,0,-0,0.258819162845612,-0,-0,-0.965925693511963,-0,-0,-0.965925693511963,-0,-0,-0.965925693511963,-0,-0,-0.965925693511963,-0,-0,-0.965925693511963,-0,-0,-0.965925693511963,0,-0,0.0871564522385597,0,-0,0.0871564522385597,0,-0,0.0871564522385597,0,-0,0.0871564522385597,0,-0,0.0871564522385597,0,-0,0.0871564522385597,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.087155394256115,-0,-0,-0.087155394256115,-0,-0,-0.087155394256115,-0,-0,-0.087155394256115,-0,-0,-0.087155394256115,-0,-0,-0.087155394256115,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542, +-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.99619472026825,-0,-0,-0.258818775415421,-0,-0,-0.258818775415421,-0,-0,-0.258818775415421,-0,-0,-0.258818775415421,-0,-0,-0.258818775415421,-0,-0,-0.258818775415421,-0,-0,-0.906307756900787,-0,-0,-0.906307756900787,-0,-0,-0.906307756900787,-0,-0,-0.906307756900787,-0,-0,-0.906307756900787,-0,-0,-0.906307756900787,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.965925931930542,-0,-0,-0.422617465257645,-0,-0,-0.422617465257645,-0,-0,-0.422617465257645,-0,-0,-0.422617465257645,-0,-0,-0.422617465257645,-0,-0,-0.422617465257645,-0,-0,-0.819151997566223,-0,-0,-0.819151997566223,-0,-0,-0.819151997566223,-0,-0,-0.819151997566223,-0,-0,-0.819151997566223,-0,-0,-0.819151997566223,-0,-0,-0.906307995319366,-0,-0,-0.906307995319366,-0,-0,-0.906307995319366,-0,-0,-0.906307995319366,-0,-0,-0.906307995319366,-0,-0,-0.906307995319366,-0,-0,-0.573576092720032,-0,-0,-0.573576092720032,-0,-0,-0.573576092720032,-0,-0,-0.573576092720032,-0,-0,-0.573576092720032,-0,-0,-0.573576092720032,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.707106471061707,-0,-0,-0.819152474403381,-0,-0,-0.819152474403381,-0,-0,-0.819152474403381,-0,-0,-0.819152474403381,-0,-0,-0.819152474403381,-0,-0,-0.819152474403381,-0,-0,-0.707106113433838,-0,-0,-0.707106113433838,-0,-0,-0.707106113433838,-0,-0,-0.707106113433838,-0,-0,-0.707106113433838,-0,-0,-0.707106113433838,-0,-0,-0.573576748371124,-0,-0,-0.573576748371124,-0,-0,-0.573576748371124,-0,-0,-0.573576748371124,-0,-0,-0.573576748371124,-0,-0,-0.573576748371124,-0,-0,-0.70710700750351,-0,-0,-0.70710700750351,-0,-0,-0.70710700750351,-0,-0,-0.70710700750351,-0,-0,-0.70710700750351,-0,-0,-0.70710700750351,-0,-0,-0.819151759147644,-0,-0,-0.819151759147644,-0,-0,-0.819151759147644,-0,-0,-0.819151759147644,-0,-0,-0.819151759147644, +-0,-0,-0.819151759147644,-0,-0,-0.422617971897125,-0,-0,-0.422617971897125,-0,-0,-0.422617971897125,-0,-0,-0.422617971897125,-0,-0,-0.422617971897125,-0,-0,-0.422617971897125,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.573576509952545,-0,-0,-0.906307399272919,-0,-0,-0.906307399272919,-0,-0,-0.906307399272919,-0,-0,-0.906307399272919,-0,-0,-0.906307399272919,-0,-0,-0.906307399272919,-0,-0,-0.258818715810776,-0,-0,-0.258818715810776,-0,-0,-0.258818715810776,-0,-0,-0.258818715810776,-0,-0,-0.258818715810776,-0,-0,-0.258818715810776,-0,-0,-0.422619044780731,-0,-0,-0.422619044780731,-0,-0,-0.422619044780731,-0,-0,-0.422619044780731,-0,-0,-0.422619044780731,-0,-0,-0.422619044780731,-0,-0,-0.965925633907318,-0,-0,-0.965925633907318,-0,-0,-0.965925633907318,-0,-0,-0.965925633907318,-0,-0,-0.965925633907318,-0,-0,-0.965925633907318,-0,-0,-0.0871564447879791,-0,-0,-0.0871564447879791,-0,-0,-0.0871564447879791,-0,-0,-0.0871564447879791,-0,-0,-0.0871564447879791,-0,-0,-0.0871564447879791,-0,-0,-0.258819252252579,-0,-0,-0.258819252252579,-0,-0,-0.258819252252579,-0,-0,-0.258819252252579,-0,-0,-0.258819252252579,-0,-0,-0.258819252252579,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,-0,-0,-0.99619460105896,0,-0,0.0871557593345642,0,-0,0.0871557593345642,0,-0,0.0871557593345642,0,-0,0.0871557593345642,0,-0,0.0871557593345642,0,-0,0.0871557593345642,-0,-0,-0.0871561318635941,-0,-0,-0.0871561318635941,-0,-0,-0.0871561318635941,-0,-0,-0.0871561318635941,-0,-0,-0.0871561318635941,-0,-0,-0.0871561318635941,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.99619472026825,0,-0,0.258818805217743,0,-0,0.258818805217743,0,-0,0.258818805217743,0,-0,0.258818805217743,0,-0,0.258818805217743,0,-0,0.258818805217743,0,-0,0.087155282497406,0,-0,0.087155282497406,0,-0,0.087155282497406,0,-0,0.087155282497406,0,-0,0.087155282497406, +0,-0,0.087155282497406,-0,-0.998217284679413,-0.0576503090560436,-0,-0.998217284679413,-0.0540920607745647,-0,-0.998217284679413,-0.0576503090560436,-0,-0.998217284679413,-0.0576503090560436,-0,-0.998217284679413,-0.0540920607745647,-0,-0.998217284679413,-0.0540920607745647,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0576503090560436,-0,-0.998217284679413,-0.0576503090560436,-0,-0.998217284679413,-0.0540920607745647,-0,-0.998217284679413,-0.048890259116888,-0,-0.998217284679413,-0.0540920607745647,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0576503090560436,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0540920607745647,-0,-0.998217284679413,-0.048890259116888,-0,-0.998217284679413,-0.048890259116888,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.048890259116888,-0,-0.998217284679413,-0.0422029681503773,-0,-0.998217284679413,-0.048890259116888,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.048890259116888,-0,-0.998217284679413,-0.0422029681503773,-0,-0.998217284679413,-0.0422029681503773,-0,-0.998217284679413,-0.0576503351330757,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0422029681503773,-0,-0.998217284679413,-0.0342332795262337,-0,-0.998217284679413,-0.0422029681503773,-0,-0.998217284679413,-0.0576503351330757,-0,-0.998217284679413,-0.0594568960368633,-0,-0.998217284679413,-0.0576503351330757,-0,-0.998217284679413,-0.0422029681503773,-0,-0.998217284679413,-0.0342332795262337,-0,-0.998217284679413,-0.0342332795262337,-0,-0.998217284679413,-0.0540920868515968,-0,-0.998217284679413,-0.0576503351330757,-0,-0.998217284679413,-0.0576503351330757,-0,-0.998217284679413,-0.0342332795262337,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0342332795262337,-0,-0.998217284679413,-0.0540920868515968, +-0,-0.998217284679413,-0.0576503351330757,-0,-0.998217284679413,-0.0540920868515968,-0,-0.998217284679413,-0.0342332795262337,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0488902777433395,-0,-0.998217284679413,-0.0540920868515968,-0,-0.998217284679413,-0.0540920868515968,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0154473418369889,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0488902777433395,-0,-0.998217284679413,-0.0540920868515968,-0,-0.998217284679413,-0.0488902777433395,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0154473418369889,-0,-0.998217284679413,-0.0154473418369889,-0,-0.998217284679413,-0.0422029420733452,-0,-0.998217284679413,-0.0488902777433395,-0,-0.998217284679413,-0.0488902777433395,-0,-0.998217284679413,-0.0154473418369889,-0,-0.998217284679413,-0.00520180026069283,-0,-0.998217284679413,-0.0154473418369889,-0,-0.998217284679413,-0.0422029420733452,-0,-0.998217284679413,-0.0488902777433395,-0,-0.998217284679413,-0.0422029420733452,-0,-0.998217284679413,-0.0154473418369889,-0,-0.998217284679413,-0.00520180026069283,-0,-0.998217284679413,-0.00520180026069283,-0,-0.998217284679413,-0.0342333652079105,-0,-0.998217284679413,-0.0422029420733452,-0,-0.998217284679413,-0.0422029420733452,-0,-0.998217284679413,-0.00520180026069283,0,-0.998217284679413,0.0052018747664988,-0,-0.998217284679413,-0.00520180026069283,-0,-0.998217284679413,-0.0342333652079105,-0,-0.998217284679413,-0.0422029420733452,-0,-0.998217284679413,-0.0342333652079105,-0,-0.998217284679413,-0.00520180026069283,0,-0.998217284679413,0.0052018747664988,0,-0.998217284679413,0.0052018747664988,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0342333652079105,-0,-0.998217284679413,-0.0342333652079105,0,-0.998217284679413,0.0052018747664988,0,-0.998217284679413,0.0154473800212145,0,-0.998217284679413,0.0052018747664988,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0342333652079105, +-0,-0.998217284679413,-0.0252235233783722,0,-0.998217284679413,0.0052018747664988,0,-0.998217284679413,0.0154473800212145,0,-0.998217284679413,0.0154473800212145,-0,-0.998217284679413,-0.0154473781585693,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0252235233783722,0,-0.998217284679413,0.0154473800212145,0,-0.998217284679413,0.0252235736697912,0,-0.998217284679413,0.0154473800212145,-0,-0.998217284679413,-0.0154473781585693,-0,-0.998217284679413,-0.0252235233783722,-0,-0.998217284679413,-0.0154473781585693,0,-0.998217284679413,0.0154473800212145,0,-0.998217284679413,0.0252235736697912,0,-0.998217284679413,0.0252235736697912,-0,-0.998217284679413,-0.00520183611661196,-0,-0.998217284679413,-0.0154473781585693,-0,-0.998217284679413,-0.0154473781585693,0,-0.998217284679413,0.0252235736697912,0,-0.998217284679413,0.0342333428561687,0,-0.998217284679413,0.0252235736697912,-0,-0.998217284679413,-0.00520183611661196,-0,-0.998217284679413,-0.0154473781585693,-0,-0.998217284679413,-0.00520183611661196,0,-0.998217284679413,0.0252235736697912,0,-0.998217284679413,0.0342333428561687,0,-0.998217284679413,0.0342333428561687,0,-0.998217284679413,0.00520183751359582,-0,-0.998217284679413,-0.00520183611661196,-0,-0.998217284679413,-0.00520183611661196,0,-0.998217284679413,0.0342333428561687,0,-0.998217284679413,0.0422029942274094,0,-0.998217284679413,0.0342333428561687,0,-0.998217284679413,0.00520183751359582,-0,-0.998217284679413,-0.00520183611661196,0,-0.998217284679413,0.00520183751359582,0,-0.998217284679413,0.0342333428561687,0,-0.998217284679413,0.0422029942274094,0,-0.998217284679413,0.0422029942274094,0,-0.998217284679413,0.0154473409056664,0,-0.998217284679413,0.00520183751359582,0,-0.998217284679413,0.00520183751359582,0,-0.998217284679413,0.0422029942274094,0,-0.998217284679413,0.0488903038203716,0,-0.998217284679413,0.0422029942274094,0,-0.998217284679413,0.0154473409056664,0,-0.998217284679413,0.00520183751359582,0,-0.998217284679413,0.0154473409056664,0,-0.998217284679413,0.0422029942274094,0,-0.998217284679413,0.0488903038203716, +0,-0.998217284679413,0.0488903038203716,0,-0.998217284679413,0.0252235550433397,0,-0.998217284679413,0.0154473409056664,0,-0.998217284679413,0.0154473409056664,0,-0.998217284679413,0.0488903038203716,0,-0.998217284679413,0.0540921054780483,0,-0.998217284679413,0.0488903038203716,0,-0.998217284679413,0.0252235550433397,0,-0.998217284679413,0.0154473409056664,0,-0.998217284679413,0.0252235550433397,0,-0.998217284679413,0.0488903038203716,0,-0.998217284679413,0.0540921054780483,0,-0.998217284679413,0.0540921054780483,0,-0.998217284679413,0.0342333242297173,0,-0.998217284679413,0.0252235550433397,0,-0.998217284679413,0.0252235550433397,0,-0.998217284679413,0.0540921054780483,0,-0.998217284679413,0.0576503202319145,0,-0.998217284679413,0.0540921054780483,0,-0.998217284679413,0.0342333242297173,0,-0.998217284679413,0.0252235550433397,0,-0.998217284679413,0.0342333242297173,0,-0.998217284679413,0.0540921054780483,0,-0.998217284679413,0.0576503202319145,0,-0.998217284679413,0.0576503202319145,0,-0.998217284679413,0.042202964425087,0,-0.998217284679413,0.0342333242297173,0,-0.998217284679413,0.0342333242297173,0,-0.998217284679413,0.0576503202319145,0,-0.998217284679413,0.0594569146633148,0,-0.998217284679413,0.0576503202319145,0,-0.998217284679413,0.042202964425087,0,-0.998217284679413,0.0342333242297173,0,-0.998217284679413,0.042202964425087,0,-0.998217284679413,0.0576503202319145,0,-0.998217284679413,0.0594569146633148,0,-0.998217284679413,0.0594569146633148,0,-0.998217284679413,0.0488902702927589,0,-0.998217284679413,0.042202964425087,0,-0.998217284679413,0.042202964425087,0,-0.998217284679413,0.0594569146633148,0,-0.998217284679413,0.0594569072127342,0,-0.998217284679413,0.0594569146633148,0,-0.998217284679413,0.0488902702927589,0,-0.998217284679413,0.042202964425087,0,-0.998217284679413,0.0488902702927589,0,-0.998217284679413,0.0594569146633148,0,-0.998217284679413,0.0594569072127342,0,-0.998217284679413,0.0594569072127342,0,-0.998217284679413,0.0540921092033386,0,-0.998217284679413,0.0488902702927589,0,-0.998217284679413,0.0488902702927589, +0,-0.998217284679413,0.0594569072127342,0,-0.998217284679413,0.0576503165066242,0,-0.998217284679413,0.0594569072127342,0,-0.998217284679413,0.0540921092033386,0,-0.998217284679413,0.0488902702927589,0,-0.998217284679413,0.0540921092033386,0,-0.998217284679413,0.0594569072127342,0,-0.998217284679413,0.0576503165066242,0,-0.998217284679413,0.0576503165066242,0,-0.998217284679413,0.0576503165066242,0,-0.998217284679413,0.0540921092033386,0,-0.998217284679413,0.0540921092033386,0,-0.998217284679413,0.0576503165066242,0,-0.998217284679413,0.0540921092033386,0,-0.998217284679413,0.0576503165066242,0,0.998217284679413,-0.0576502978801727,0,0.998217284679413,-0.0540920607745647,0,0.998217284679413,-0.0540920607745647,0,0.998217284679413,-0.0576502978801727,0,0.998217284679413,-0.0576502978801727,0,0.998217284679413,-0.0540920607745647,0,0.998217284679413,-0.0540920607745647,0,0.998217284679413,-0.0540920607745647,0,0.998217284679413,-0.0488902516663074,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0576502978801727,0,0.998217284679413,-0.0576502978801727,0,0.998217284679413,-0.0540920607745647,0,0.998217284679413,-0.0488902516663074,0,0.998217284679413,-0.0488902516663074,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0576502978801727,0,0.998217284679413,-0.0488902516663074,0,0.998217284679413,-0.0488902516663074,0,0.998217284679413,-0.0422029681503773,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0488902516663074,0,0.998217284679413,-0.0422029681503773,0,0.998217284679413,-0.0422029681503773,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0422029681503773,0,0.998217284679413,-0.0422029681503773,0,0.998217284679413,-0.0342332795262337,0,0.998217284679413,-0.0576503314077854,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0422029681503773, +0,0.998217284679413,-0.0342332795262337,0,0.998217284679413,-0.0342332795262337,0,0.998217284679413,-0.0576503314077854,0,0.998217284679413,-0.0576503314077854,0,0.998217284679413,-0.0594568997621536,0,0.998217284679413,-0.0342332795262337,0,0.998217284679413,-0.0342332795262337,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0540920868515968,0,0.998217284679413,-0.0576503314077854,0,0.998217284679413,-0.0576503314077854,0,0.998217284679413,-0.0342332795262337,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0540920868515968,0,0.998217284679413,-0.0540920868515968,0,0.998217284679413,-0.0576503314077854,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0154473427683115,0,0.998217284679413,-0.0488902777433395,0,0.998217284679413,-0.0540920868515968,0,0.998217284679413,-0.0540920868515968,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0154473427683115,0,0.998217284679413,-0.0154473427683115,0,0.998217284679413,-0.0488902777433395,0,0.998217284679413,-0.0488902777433395,0,0.998217284679413,-0.0540920868515968,0,0.998217284679413,-0.0154473427683115,0,0.998217284679413,-0.0154473427683115,0,0.998217284679413,-0.00520180026069283,0,0.998217284679413,-0.0422029420733452,0,0.998217284679413,-0.0488902777433395,0,0.998217284679413,-0.0488902777433395,0,0.998217284679413,-0.0154473427683115,0,0.998217284679413,-0.00520180026069283,0,0.998217284679413,-0.00520180026069283,0,0.998217284679413,-0.0422029420733452,0,0.998217284679413,-0.0422029420733452,0,0.998217284679413,-0.0488902777433395,0,0.998217284679413,-0.00520180026069283,0,0.998217284679413,-0.00520180026069283,0,0.998217284679413,0.0052018747664988,0,0.998217284679413,-0.0342333652079105,0,0.998217284679413,-0.0422029420733452,0,0.998217284679413,-0.0422029420733452,0,0.998217284679413,-0.00520180026069283,0,0.998217284679413,0.0052018747664988,0,0.998217284679413,0.0052018747664988,0,0.998217284679413,-0.0342333652079105,0,0.998217284679413,-0.0342333652079105, +0,0.998217284679413,-0.0422029420733452,0,0.998217284679413,0.0052018747664988,0,0.998217284679413,0.0052018747664988,0,0.998217284679413,0.0154473800212145,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0342333652079105,0,0.998217284679413,-0.0342333652079105,0,0.998217284679413,0.0052018747664988,0,0.998217284679413,0.0154473800212145,0,0.998217284679413,0.0154473800212145,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0342333652079105,0,0.998217284679413,0.0154473800212145,0,0.998217284679413,0.0154473800212145,0,0.998217284679413,0.0252235736697912,0,0.998217284679413,-0.0154473781585693,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,0.0154473800212145,0,0.998217284679413,0.0252235736697912,0,0.998217284679413,0.0252235736697912,0,0.998217284679413,-0.0154473781585693,0,0.998217284679413,-0.0154473781585693,0,0.998217284679413,-0.0252235196530819,0,0.998217284679413,0.0252235736697912,0,0.998217284679413,0.0252235736697912,0,0.998217284679413,0.0342333428561687,0,0.998217284679413,-0.00520183611661196,0,0.998217284679413,-0.0154473781585693,0,0.998217284679413,-0.0154473781585693,0,0.998217284679413,0.0252235736697912,0,0.998217284679413,0.0342333428561687,0,0.998217284679413,0.0342333428561687,0,0.998217284679413,-0.00520183611661196,0,0.998217284679413,-0.00520183611661196,0,0.998217284679413,-0.0154473781585693,0,0.998217284679413,0.0342333428561687,0,0.998217284679413,0.0342333428561687,0,0.998217284679413,0.0422029942274094,0,0.998217284679413,0.00520183751359582,0,0.998217284679413,-0.00520183611661196,0,0.998217284679413,-0.00520183611661196,0,0.998217284679413,0.0342333428561687,0,0.998217284679413,0.0422029942274094,0,0.998217284679413,0.0422029942274094,0,0.998217284679413,0.00520183751359582,0,0.998217284679413,0.00520183751359582,0,0.998217284679413,-0.00520183611661196,0,0.998217284679413,0.0422029942274094,0,0.998217284679413,0.0422029942274094,0,0.998217284679413,0.0488903038203716, +0,0.998217284679413,0.0154473418369889,0,0.998217284679413,0.00520183751359582,0,0.998217284679413,0.00520183751359582,0,0.998217284679413,0.0422029942274094,0,0.998217284679413,0.0488903038203716,0,0.998217284679413,0.0488903038203716,0,0.998217284679413,0.0154473418369889,0,0.998217284679413,0.0154473418369889,0,0.998217284679413,0.00520183751359582,0,0.998217284679413,0.0488903038203716,0,0.998217284679413,0.0488903038203716,0,0.998217284679413,0.0540921054780483,0,0.998217284679413,0.0252235550433397,0,0.998217284679413,0.0154473418369889,0,0.998217284679413,0.0154473418369889,0,0.998217284679413,0.0488903038203716,0,0.998217284679413,0.0540921054780483,0,0.998217284679413,0.0540921054780483,0,0.998217284679413,0.0252235550433397,0,0.998217284679413,0.0252235550433397,0,0.998217284679413,0.0154473418369889,0,0.998217284679413,0.0540921054780483,0,0.998217284679413,0.0540921054780483,0,0.998217284679413,0.0576503202319145,0,0.998217284679413,0.034233320504427,0,0.998217284679413,0.0252235550433397,0,0.998217284679413,0.0252235550433397,0,0.998217284679413,0.0540921054780483,0,0.998217284679413,0.0576503202319145,0,0.998217284679413,0.0576503202319145,0,0.998217284679413,0.034233320504427,0,0.998217284679413,0.034233320504427,0,0.998217284679413,0.0252235550433397,0,0.998217284679413,0.0576503202319145,0,0.998217284679413,0.0576503202319145,0,0.998217284679413,0.0594569183886051,0,0.998217284679413,0.0422029681503773,0,0.998217284679413,0.034233320504427,0,0.998217284679413,0.034233320504427,0,0.998217284679413,0.0576503202319145,0,0.998217284679413,0.0594569183886051,0,0.998217284679413,0.0594569183886051,0,0.998217284679413,0.0422029681503773,0,0.998217284679413,0.0422029681503773,0,0.998217284679413,0.034233320504427,0,0.998217284679413,0.0594569183886051,0,0.998217284679413,0.0594569183886051,0,0.998217284679413,0.0594569072127342,0,0.998217284679413,0.0488902702927589,0,0.998217284679413,0.0422029681503773,0,0.998217284679413,0.0422029681503773,0,0.998217284679413,0.0594569183886051,0,0.998217284679413,0.0594569072127342, +0,0.998217284679413,0.0594569072127342,0,0.998217284679413,0.0488902702927589,0,0.998217284679413,0.0488902702927589,0,0.998217284679413,0.0422029681503773,0,0.998217284679413,0.0594569072127342,0,0.998217284679413,0.0594569072127342,0,0.998217284679413,0.0576503276824951,0,0.998217284679413,0.0540920980274677,0,0.998217284679413,0.0488902702927589,0,0.998217284679413,0.0488902702927589,0,0.998217284679413,0.0594569072127342,0,0.998217284679413,0.0576503276824951,0,0.998217284679413,0.0576503276824951,0,0.998217284679413,0.0540920980274677,0,0.998217284679413,0.0540920980274677,0,0.998217284679413,0.0488902702927589,0,0.998217284679413,0.0576503276824951,0,0.998217284679413,0.0540920980274677,0,0.998217284679413,0.0540920980274677,0,0.998217284679413,0.0576503276824951,0,0.998217284679413,0.0576503276824951,0,0.998217284679413,0.0540920980274677 + } + BinormalsW: *864 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "Tangents" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *2592 { + a: -1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0, +-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0, +-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0 + } + TangentsW: *864 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "Material" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + } + } + Model: 140634333081088, "Model::WalkerRagdoll", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634333070336, "Model::hips", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634332949504, "Model::hipsMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-1.29999220371246,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1.2840918302536,0.391103178262711,0.733132481575012 + } + Shading: W + Culling: "CullingOff" + } + Model: 140634332324864, "Model::thighL", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",39.999395608902,-79.9999952316284,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634332328448, "Model::thighLMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",-1.33925823320169e-06,-5.46415067219641e-05,-179.999954223633 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.577829837799072,0.68321418762207,0.577829301357269 + } + Shading: W + Culling: "CullingOff" + } + Model: 140634332332032, "Model::shinL", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-100,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634332335616, "Model::shinLMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",-0,0,-180 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.390917509794235,0.609645068645477,0.390917152166367 + } + Shading: W + Culling: "CullingOff" + } + Model: 140634332339200, "Model::footL", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-60.0000023841858,10.0000001490116 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634332342784, "Model::footLMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",5.63490611966699e-05,-90.0000610351562,-90.0000152587891 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.136210724711418,0.699999988079071,0.398505926132202 + } + Shading: W + Culling: "CullingOff" + } + Model: 140634333083136, "Model::thighR", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",-39.999395608902,-79.9999952316284,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634333086720, "Model::thighRMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",5.49092828805442e-06,-5.46415030839853e-05,-179.999954223633 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.577829718589783,0.68321418762207,0.577829360961914 + } + Shading: W + Culling: "CullingOff" + } + Model: 140634333090304, "Model::shinR", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-100,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140634333093888, "Model::shinRMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",5.49092828805442e-06,-5.46415030839853e-05,-179.999954223633 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.390915215015411,0.609647393226624,0.390914738178253 + } + Shading: W + Culling: "CullingOff" + } + Model: 140634333097472, "Model::footR", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-60.0000023841858,10.0000001490116 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140631679057408, "Model::footRMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",5.63490611966699e-05,-90.0000610351562,-90.0000152587891 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.136210724711418,0.699999988079071,0.398505926132202 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766143488, "Model::spine", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,68.2999968528748,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633764998656, "Model::spineMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1.08610332012177,0.281427979469299,0.430213272571564 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633765000704, "Model::chest", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,80.5000305175781,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633765772288, "Model::chestsMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1.50959515571594,0.496889173984528,0.768300175666809 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633765775872, "Model::Logo", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,0,51.1526226997375 + P: "Lcl Rotation", "Lcl Rotation", "", "A",90,0,-0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.0947449877858162,0.186159834265709,0.28784391283989 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769245696, "Model::upper_arm_L", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",125.000011920929,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633769249280, "Model::upper_arm_LMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",4.8296979002771e-06,-6.27857371000573e-05,90.0000610351562 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.535144031047821,0.635455131530762,0.403437286615372 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769252864, "Model::lower_arm_L", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",100,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633769256448, "Model::lower_arm_LMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",4.8296979002771e-06,-6.27857371000573e-05,90.0000610351562 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.462841808795929,0.555168688297272,0.34892949461937 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769260032, "Model::hand_L", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",69.9999988079071,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633769263616, "Model::hand_LMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",5.49093329027528e-06,-5.46415030839853e-05,4.78113252029289e-05 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.500000238418579,0.5,0.500000238418579 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769267200, "Model::upper_arm_R", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",-125.000011920929,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633766151680, "Model::upper_arm_RMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",2.41483712670743e-06,-2.41483576246537e-06,-89.9999771118164 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.535140097141266,0.635450661182404,0.403434425592422 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766155264, "Model::lower_arm_R", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",-100,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633766158848, "Model::lower_arm_RMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",7.24453684597393e-06,-0.000103837955975905,-89.9999771118164 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.462837904691696,0.55516529083252,0.348926842212677 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766162432, "Model::hand_R", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",-69.9999988079071,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633766166016, "Model::hand_RMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",5.49092328583356e-06,-5.46415030839853e-05,4.78113252029289e-05 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.500000238418579,0.5,0.500000238418579 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766169600, "Model::head", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,136.199951171875,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633766173184, "Model::headMesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1.30146300792694,1.30146312713623,1.3014634847641 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766176768, "Model::pupil", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",-35.0159466266632,-4.50736582279205,36.928927898407 + P: "Lcl Rotation", "Lcl Rotation", "", "A",-49.07080078125,162.948760986328,-8.2713680267334 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.132323533296585,0.132787838578224,0.131615504622459 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766180352, "Model::pupil_1", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",28.3799290657043,-4.64930348098278,43.7928646802902 + P: "Lcl Rotation", "Lcl Rotation", "", "A",-49.0707702636719,-93.6308441162109,-8.27132701873779 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.130756244063377,0.135294988751411,0.135298311710358 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633766183936, "Model::headband", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,19.593434035778,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",8.63612892136601e-13,8.63612837926492e-13,6.50857008386384e-27 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1.00047421455383,0.117607071995735,1.00047445297241 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769320448, "Model::DirectionIndicator", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-256.399989128113,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",2.03208112716675,0.0339012071490288,2.03208112716675 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769324032, "Model::Arrow", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-16.8138906359673,92.9000020027161 + P: "Lcl Rotation", "Lcl Rotation", "", "A",-0,90,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1.31840407848358,79.0266723632812,1.31840407848358 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633769327616, "Model::symbol_tri", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",-23.8999992609024,0.100000004749745,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",90,0,89.9961090087891 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.274116277694702,0.278816878795624,0.0730526521801949 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769331200, "Model::Symbol_Triangle", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",10.8999997377396,0.100000004749745,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",90,0,89.9961090087891 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.213957220315933,0.346346318721771,0.0250497534871101 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769334784, "Model::symbol_circle", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",2.02829997242304e-07,0.004571400131681,7.23439974592566e-08 + P: "Lcl Rotation", "Lcl Rotation", "", "A",90,0,-90 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.653537154197693,0.664743840694427,4.81679916381836 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769338368, "Model::OrientationCube", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633769341952, "Model::Cube", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769345536, "Model::Arrow_1", "Null" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,11.9000002741814,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",-0,89.9999694824219,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.77644282579422,0.77644282579422,0.77644282579422 + } + Shading: Y + Culling: "CullingOff" + } + Model: 140633769350656, "Model::symbol_tri_1", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",-22.5982666015625,50,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",90,0,89.9961090087891 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.39859864115715,0.405433893203735,0.25 + } + Shading: W + Culling: "CullingOff" + } + Model: 140633769354240, "Model::Symbol_Triangle_1", "Mesh" { + Version: 232 + Properties70: { + P: "RotationOrder", "enum", "", "",4 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",20.30029296875,50,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",90,0,89.9961090087891 + P: "Lcl Scaling", "Lcl Scaling", "", "A",0.311120003461838,0.405433893203735,0.0857250019907951 + } + Shading: W + Culling: "CullingOff" + } + Material: 140631868244576, "Material::AgentBlue", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0.129411771893501,0.588235318660736,0.952941179275513 + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0.129411771893501,0.588235318660736,0.952941179275513 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631868303264, "Material::White", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0.925490200519562,0.937254905700684,0.941176474094391 + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0.925490200519562,0.937254905700684,0.941176474094391 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631868308000, "Material::Black", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0.0480000004172325,0.0480000004172325,0.0480000004172325 + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0.0480000004172325,0.0480000004172325,0.0480000004172325 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631868321024, "Material::LogoSymbol", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0,0,0 + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0,0,0 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631868354304, "Material::Headband", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "EmissiveColor", "Color", "", "A",0.980392158031464,0.650980412960052,0.160784319043159 + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0.980392158031464,0.650980412960052,0.160784319043159 + P: "Emissive", "Vector3D", "Vector", "",0.980392158031464,0.650980412960052,0.160784319043159 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0.980392158031464,0.650980412960052,0.160784319043159 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631875984624, "Material::spawnVolumeMaterial", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0,0.83448314666748,1 + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0,0.83448314666748,1 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631874146400, "Material::Green", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0.403921574354172,0.737254917621613,0.419607847929001 + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0.403921574354172,0.737254917621613,0.419607847929001 + P: "Opacity", "double", "Number", "",1 + } + } + Material: 140631874157856, "Material::Orange", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "EmissiveColor", "Color", "", "A",0.980392158031464,0.650980412960052,0.160784319043159 + P: "AmbientColor", "Color", "", "A",0,0,0 + P: "DiffuseColor", "Color", "", "A",0.980392158031464,0.650980412960052,0.160784319043159 + P: "Emissive", "Vector3D", "Vector", "",0.980392158031464,0.650980412960052,0.160784319043159 + P: "Ambient", "Vector3D", "Vector", "",0,0,0 + P: "Diffuse", "Vector3D", "Vector", "",0.980392158031464,0.650980412960052,0.160784319043159 + P: "Opacity", "double", "Number", "",1 + } + } + Video: 140631874187376, "Video::DiffuseColor_Texture", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "/Users/brandonh/unity_projects/ml-agents-master/ml-agents/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png" + P: "RelPath", "KString", "XRefUrl", "", "ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png" + } + UseMipMap: 0 + Filename: "/Users/brandonh/unity_projects/ml-agents-master/ml-agents/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png" + RelativeFilename: "ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png" + } + Texture: 140631868325984, "Texture::DiffuseColor_Texture", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::DiffuseColor_Texture" + Media: "Video::DiffuseColor_Texture" + FileName: "/Users/brandonh/unity_projects/ml-agents-master/ml-agents/Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png" + RelativeFilename: "ML-Agents/Examples/SharedAssets/Materials/Textures/LogoCube.png" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } +} + +; Object connections +;------------------------------------------------------------------ + +Connections: { + + ;Model::WalkerRagdoll, Model::RootNode + C: "OO",140634333081088,0 + + ;Model::hips, Model::WalkerRagdoll + C: "OO",140634333070336,140634333081088 + + ;Model::DirectionIndicator, Model::WalkerRagdoll + C: "OO",140633769320448,140634333081088 + + ;Model::OrientationCube, Model::WalkerRagdoll + C: "OO",140633769338368,140634333081088 + + ;Model::hipsMesh, Model::hips + C: "OO",140634332949504,140634333070336 + + ;Model::thighL, Model::hips + C: "OO",140634332324864,140634333070336 + + ;Model::thighR, Model::hips + C: "OO",140634333083136,140634333070336 + + ;Model::spine, Model::hips + C: "OO",140633766143488,140634333070336 + + ;Material::AgentBlue, Model::hipsMesh + C: "OO",140631868244576,140634332949504 + + ;Geometry::Scene, Model::hipsMesh + C: "OO",140631875977168,140634332949504 + + ;Model::thighLMesh, Model::thighL + C: "OO",140634332328448,140634332324864 + + ;Model::shinL, Model::thighL + C: "OO",140634332332032,140634332324864 + + ;Material::AgentBlue, Model::thighLMesh + C: "OO",140631868244576,140634332328448 + + ;Geometry::Scene, Model::thighLMesh + C: "OO",140631875977168,140634332328448 + + ;Model::shinLMesh, Model::shinL + C: "OO",140634332335616,140634332332032 + + ;Model::footL, Model::shinL + C: "OO",140634332339200,140634332332032 + + ;Material::White, Model::shinLMesh + C: "OO",140631868303264,140634332335616 + + ;Geometry::Scene, Model::shinLMesh + C: "OO",140631875977168,140634332335616 + + ;Model::footLMesh, Model::footL + C: "OO",140634332342784,140634332339200 + + ;Material::Black, Model::footLMesh + C: "OO",140631868308000,140634332342784 + + ;Geometry::Scene, Model::footLMesh + C: "OO",140631868305376,140634332342784 + + ;Model::thighRMesh, Model::thighR + C: "OO",140634333086720,140634333083136 + + ;Model::shinR, Model::thighR + C: "OO",140634333090304,140634333083136 + + ;Material::AgentBlue, Model::thighRMesh + C: "OO",140631868244576,140634333086720 + + ;Geometry::Scene, Model::thighRMesh + C: "OO",140631875977168,140634333086720 + + ;Model::shinRMesh, Model::shinR + C: "OO",140634333093888,140634333090304 + + ;Model::footR, Model::shinR + C: "OO",140634333097472,140634333090304 + + ;Material::White, Model::shinRMesh + C: "OO",140631868303264,140634333093888 + + ;Geometry::Scene, Model::shinRMesh + C: "OO",140631875977168,140634333093888 + + ;Model::footRMesh, Model::footR + C: "OO",140631679057408,140634333097472 + + ;Material::Black, Model::footRMesh + C: "OO",140631868308000,140631679057408 + + ;Geometry::Scene, Model::footRMesh + C: "OO",140631868305376,140631679057408 + + ;Model::spineMesh, Model::spine + C: "OO",140633764998656,140633766143488 + + ;Model::chest, Model::spine + C: "OO",140633765000704,140633766143488 + + ;Material::White, Model::spineMesh + C: "OO",140631868303264,140633764998656 + + ;Geometry::Scene, Model::spineMesh + C: "OO",140631875977168,140633764998656 + + ;Model::chestsMesh, Model::chest + C: "OO",140633765772288,140633765000704 + + ;Model::upper_arm_L, Model::chest + C: "OO",140633769245696,140633765000704 + + ;Model::upper_arm_R, Model::chest + C: "OO",140633769267200,140633765000704 + + ;Model::head, Model::chest + C: "OO",140633766169600,140633765000704 + + ;Model::Logo, Model::chestsMesh + C: "OO",140633765775872,140633765772288 + + ;Material::White, Model::chestsMesh + C: "OO",140631868303264,140633765772288 + + ;Geometry::Scene, Model::chestsMesh + C: "OO",140631875977168,140633765772288 + + ;Material::LogoSymbol, Model::Logo + C: "OO",140631868321024,140633765775872 + + ;Geometry::Scene, Model::Logo + C: "OO",140631868319408,140633765775872 + + ;Model::upper_arm_LMesh, Model::upper_arm_L + C: "OO",140633769249280,140633769245696 + + ;Model::lower_arm_L, Model::upper_arm_L + C: "OO",140633769252864,140633769245696 + + ;Material::White, Model::upper_arm_LMesh + C: "OO",140631868303264,140633769249280 + + ;Geometry::Scene, Model::upper_arm_LMesh + C: "OO",140631875977168,140633769249280 + + ;Model::lower_arm_LMesh, Model::lower_arm_L + C: "OO",140633769256448,140633769252864 + + ;Model::hand_L, Model::lower_arm_L + C: "OO",140633769260032,140633769252864 + + ;Material::White, Model::lower_arm_LMesh + C: "OO",140631868303264,140633769256448 + + ;Geometry::Scene, Model::lower_arm_LMesh + C: "OO",140631875977168,140633769256448 + + ;Model::hand_LMesh, Model::hand_L + C: "OO",140633769263616,140633769260032 + + ;Material::Black, Model::hand_LMesh + C: "OO",140631868308000,140633769263616 + + ;Geometry::Scene, Model::hand_LMesh + C: "OO",140631868341152,140633769263616 + + ;Model::upper_arm_RMesh, Model::upper_arm_R + C: "OO",140633766151680,140633769267200 + + ;Model::lower_arm_R, Model::upper_arm_R + C: "OO",140633766155264,140633769267200 + + ;Material::White, Model::upper_arm_RMesh + C: "OO",140631868303264,140633766151680 + + ;Geometry::Scene, Model::upper_arm_RMesh + C: "OO",140631875977168,140633766151680 + + ;Model::lower_arm_RMesh, Model::lower_arm_R + C: "OO",140633766158848,140633766155264 + + ;Model::hand_R, Model::lower_arm_R + C: "OO",140633766162432,140633766155264 + + ;Material::White, Model::lower_arm_RMesh + C: "OO",140631868303264,140633766158848 + + ;Geometry::Scene, Model::lower_arm_RMesh + C: "OO",140631875977168,140633766158848 + + ;Model::hand_RMesh, Model::hand_R + C: "OO",140633766166016,140633766162432 + + ;Material::Black, Model::hand_RMesh + C: "OO",140631868308000,140633766166016 + + ;Geometry::Scene, Model::hand_RMesh + C: "OO",140631868341152,140633766166016 + + ;Model::headMesh, Model::head + C: "OO",140633766173184,140633766169600 + + ;Model::pupil, Model::headMesh + C: "OO",140633766176768,140633766173184 + + ;Model::pupil_1, Model::headMesh + C: "OO",140633766180352,140633766173184 + + ;Model::headband, Model::headMesh + C: "OO",140633766183936,140633766173184 + + ;Material::White, Model::headMesh + C: "OO",140631868303264,140633766173184 + + ;Geometry::Scene, Model::headMesh + C: "OO",140631868341152,140633766173184 + + ;Material::Black, Model::pupil + C: "OO",140631868308000,140633766176768 + + ;Geometry::Scene, Model::pupil + C: "OO",140631868341152,140633766176768 + + ;Material::Black, Model::pupil_1 + C: "OO",140631868308000,140633766180352 + + ;Geometry::Scene, Model::pupil_1 + C: "OO",140631868341152,140633766180352 + + ;Material::Headband, Model::headband + C: "OO",140631868354304,140633766183936 + + ;Geometry::Scene, Model::headband + C: "OO",140631868352768,140633766183936 + + ;Model::Arrow, Model::DirectionIndicator + C: "OO",140633769324032,140633769320448 + + ;Model::symbol_circle, Model::DirectionIndicator + C: "OO",140633769334784,140633769320448 + + ;Material::spawnVolumeMaterial, Model::DirectionIndicator + C: "OO",140631875984624,140633769320448 + + ;Geometry::Scene, Model::DirectionIndicator + C: "OO",140631868352768,140633769320448 + + ;Model::symbol_tri, Model::Arrow + C: "OO",140633769327616,140633769324032 + + ;Model::Symbol_Triangle, Model::Arrow + C: "OO",140633769331200,140633769324032 + + ;Material::Green, Model::symbol_tri + C: "OO",140631874146400,140633769327616 + + ;Geometry::Scene, Model::symbol_tri + C: "OO",140631874080352,140633769327616 + + ;Material::Green, Model::Symbol_Triangle + C: "OO",140631874146400,140633769331200 + + ;Geometry::Scene, Model::Symbol_Triangle + C: "OO",140631868305376,140633769331200 + + ;Material::AgentBlue, Model::symbol_circle + C: "OO",140631868244576,140633769334784 + + ;Geometry::Scene, Model::symbol_circle + C: "OO",140631874151072,140633769334784 + + ;Model::Cube, Model::OrientationCube + C: "OO",140633769341952,140633769338368 + + ;Model::Arrow_1, Model::Cube + C: "OO",140633769345536,140633769341952 + + ;Material::Orange, Model::Cube + C: "OO",140631874157856,140633769341952 + + ;Geometry::Scene, Model::Cube + C: "OO",140631868305376,140633769341952 + + ;Model::symbol_tri_1, Model::Arrow_1 + C: "OO",140633769350656,140633769345536 + + ;Model::Symbol_Triangle_1, Model::Arrow_1 + C: "OO",140633769354240,140633769345536 + + ;Material::Black, Model::symbol_tri_1 + C: "OO",140631868308000,140633769350656 + + ;Geometry::Scene, Model::symbol_tri_1 + C: "OO",140631874080352,140633769350656 + + ;Material::Black, Model::Symbol_Triangle_1 + C: "OO",140631868308000,140633769354240 + + ;Geometry::Scene, Model::Symbol_Triangle_1 + C: "OO",140631868305376,140633769354240 + + ;Texture::DiffuseColor_Texture, Material::LogoSymbol + C: "OO",140631868325984,140631868321024 + + ;Texture::DiffuseColor_Texture, Material::LogoSymbol + C: "OP",140631868325984,140631868321024, "DiffuseColor" + + ;Video::DiffuseColor_Texture, Texture::DiffuseColor_Texture + C: "OO",140631874187376,140631868325984 +} +;Takes section +;---------------------------------------------------- + +Takes: { + Current: "" +} diff --git a/Project/Assets/ML-Agents/Examples/Walker/WalkerRagdoll.fbx.meta b/Project/Assets/ML-Agents/Examples/Walker/WalkerRagdoll.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..a4a11a2e586dc47c2e93e1b4312ab97e343d0b8a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Walker/WalkerRagdoll.fbx.meta @@ -0,0 +1,493 @@ +fileFormatVersion: 2 +guid: b5458355adf1a4155a0d7f0ce08a7ee9 +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 0.33 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: thighL + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: thighR + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: shinL + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: shinR + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: footL + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: footR + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: headMesh + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: upper_arm_L + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: upper_arm_R + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: lower_arm_L + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: lower_arm_R + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: hand_L + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: hand_R + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: headband + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: pupil + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: pupil_1 + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: WalkerRagdoll(Clone) + parentName: + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: hips + parentName: WalkerRagdoll(Clone) + position: {x: 0, y: 0.008606399, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: hipsMesh + parentName: hips + position: {x: -0, y: -0.00004289972, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1.2840918, y: 0.39110318, z: 0.7331325} + - name: thighL + parentName: hips + position: {x: -0.0013199797, y: -0.0026399984, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: thighLMesh + parentName: thighL + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.0000004768371, y: 0.0000000116874235, z: 1, w: 0.00000039947415} + scale: {x: 0.57782984, y: 0.6832142, z: 0.5778293} + - name: shinL + parentName: thighL + position: {x: -0, y: -0.0032999986, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: shinLMesh + parentName: shinL + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 1, w: 6.123234e-17} + scale: {x: 0.3909175, y: 0.60964507, z: 0.39091715} + - name: footL + parentName: shinL + position: {x: -0, y: -0.0019799995, z: 0.0003299998} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: footLMesh + parentName: footL + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.5000006, y: 0.49999994, z: 0.49999955, w: 0.4999999} + scale: {x: 0.13621072, y: 0.7, z: 0.39850593} + - name: thighR + parentName: hips + position: {x: 0.0013199797, y: -0.0026399984, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: thighRMesh + parentName: thighR + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.0000004768371, y: -0.000000047917197, z: 1, w: 0.00000039947417} + scale: {x: 0.5778297, y: 0.6832142, z: 0.57782936} + - name: shinR + parentName: thighR + position: {x: -0, y: -0.0032999986, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: shinRMesh + parentName: shinR + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.0000004768371, y: -0.000000047917197, z: 1, w: 0.00000039947417} + scale: {x: 0.39091522, y: 0.6096474, z: 0.39091474} + - name: footR + parentName: shinR + position: {x: -0, y: -0.0019799995, z: 0.0003299998} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: footRMesh + parentName: footR + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.5000006, y: 0.49999994, z: 0.49999955, w: 0.4999999} + scale: {x: 0.13621072, y: 0.7, z: 0.39850593} + - name: spine + parentName: hips + position: {x: -0, y: 0.0022538994, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: spineMesh + parentName: spine + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1.0861033, y: 0.28142798, z: 0.43021327} + - name: chest + parentName: spine + position: {x: -0, y: 0.0026565, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: chestsMesh + parentName: chest + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1.5095952, y: 0.49688917, z: 0.7683002} + - name: Logo + parentName: chestsMesh + position: {x: -0, y: 0, z: 0.0016880366} + rotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071068} + scale: {x: 0.09474499, y: 0.18615983, z: 0.2878439} + - name: upper_arm_L + parentName: chest + position: {x: -0.004125001, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: upper_arm_LMesh + parentName: upper_arm_L + position: {x: -0, y: 0, z: 0} + rotation: {x: -0.00000035762787, y: 0.0000004172324, z: -0.7071072, w: 0.7071064} + scale: {x: 0.53514403, y: 0.63545513, z: 0.4034373} + - name: lower_arm_L + parentName: upper_arm_L + position: {x: -0.0032999986, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: lower_arm_LMesh + parentName: lower_arm_L + position: {x: -0, y: 0, z: 0} + rotation: {x: -0.00000035762787, y: 0.0000004172324, z: -0.7071072, w: 0.7071064} + scale: {x: 0.4628418, y: 0.5551687, z: 0.3489295} + - name: hand_L + parentName: lower_arm_L + position: {x: -0.0023099987, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: hand_LMesh + parentName: hand_L + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.000000047917233, y: 0.0000004768371, z: -0.00000041723254, w: 1} + scale: {x: 0.50000024, y: 0.5, z: 0.50000024} + - name: upper_arm_R + parentName: chest + position: {x: 0.004125001, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: upper_arm_RMesh + parentName: upper_arm_R + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.00000002980232, y: -2.46566e-15, z: 0.70710665, w: 0.70710695} + scale: {x: 0.5351401, y: 0.63545066, z: 0.40343443} + - name: lower_arm_R + parentName: upper_arm_R + position: {x: 0.0032999986, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: lower_arm_RMesh + parentName: lower_arm_R + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.00000068545336, y: 0.00000059604633, z: 0.70710665, w: 0.70710695} + scale: {x: 0.4628379, y: 0.5551653, z: 0.34892684} + - name: hand_R + parentName: lower_arm_R + position: {x: 0.0023099987, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: hand_RMesh + parentName: hand_R + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.000000047917148, y: 0.0000004768371, z: -0.00000041723254, w: 1} + scale: {x: 0.50000024, y: 0.5, z: 0.50000024} + - name: head + parentName: chest + position: {x: -0, y: 0.0044945977, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: headMesh + parentName: head + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1.301463, y: 1.3014631, z: 1.3014635} + - name: pupil + parentName: headMesh + position: {x: 0.0011555257, y: -0.00014874298, z: 0.001218654} + rotation: {x: 0.12628369, y: 0.8928699, z: 0.39987102, w: -0.16413078} + scale: {x: 0.13232353, y: 0.13278784, z: 0.1316155} + - name: pupil_1 + parentName: headMesh + position: {x: -0.00093653734, y: -0.00015342694, z: 0.0014451642} + rotation: {x: -0.23560317, y: 0.68208134, z: 0.34689382, w: 0.5991} + scale: {x: 0.13075624, y: 0.13529499, z: 0.13529831} + - name: headband + parentName: headMesh + position: {x: -0, y: 0.00064658315, z: 0} + rotation: {x: 7.536444e-15, y: -7.5364435e-15, z: -9.361668e-37, w: 1} + scale: {x: 1.0004742, y: 0.11760707, z: 1.0004745} + - name: DirectionIndicator + parentName: WalkerRagdoll(Clone) + position: {x: -0, y: -0.008461196, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 2.0320811, y: 0.033901207, z: 2.0320811} + - name: Arrow + parentName: DirectionIndicator + position: {x: -0, y: -0.0005548584, z: 0.003065699} + rotation: {x: -0, y: -0.7071068, z: 0, w: 0.7071068} + scale: {x: 1.3184041, y: 79.02667, z: 1.3184041} + - name: symbol_tri + parentName: Arrow + position: {x: 0.00078869984, y: 0.0000032999992, z: 0} + rotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + scale: {x: 0.27411628, y: 0.27881688, z: 0.07305265} + - name: Symbol_Triangle + parentName: Arrow + position: {x: -0.0003596998, y: 0.0000032999992, z: 0} + rotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + scale: {x: 0.21395722, y: 0.34634632, z: 0.025049753} + - name: symbol_circle + parentName: DirectionIndicator + position: {x: -6.6933898e-12, y: 0.00000015085615, z: 2.387351e-12} + rotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + scale: {x: 0.65353715, y: 0.66474384, z: 4.816799} + - name: OrientationCube + parentName: WalkerRagdoll(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Cube + parentName: OrientationCube + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Arrow_1 + parentName: Cube + position: {x: -0, y: 0.0003927, z: 0} + rotation: {x: -0, y: -0.7071066, z: 0, w: 0.70710695} + scale: {x: 0.7764428, y: 0.7764428, z: 0.7764428} + - name: symbol_tri_1 + parentName: Arrow_1 + position: {x: 0.0007457426, y: 0.0016499993, z: 0} + rotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + scale: {x: 0.39859864, y: 0.4054339, z: 0.25} + - name: Symbol_Triangle_1 + parentName: Arrow_1 + position: {x: -0.00066990935, y: 0.0016499993, z: 0} + rotation: {x: 0.500017, y: 0.499983, z: -0.499983, w: 0.500017} + scale: {x: 0.31112, y: 0.4054339, z: 0.085725} + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 0.0033 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump.meta b/Project/Assets/ML-Agents/Examples/WallJump.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef031fe5b7825502c8462d517dc7db8d7ab0bb66 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e61aed11f93544227801dfd529bf41c6 +folderAsset: yes +timeCreated: 1520964896 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..e767045b4770edd5d820b8c285f81327bedc5f4b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3002d747534d24598b059f75c43b8d45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/TransparentWall.mat b/Project/Assets/ML-Agents/Examples/WallJump/Materials/TransparentWall.mat new file mode 100644 index 0000000000000000000000000000000000000000..918c267e3afc5da5e5ec042dda09ee289d166868 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/TransparentWall.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TransparentWall + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHABLEND_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 2 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 5 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 0.56228375, g: 0.76044035, b: 0.9558824, a: 0.603} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/TransparentWall.mat.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials/TransparentWall.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..e92fd6f497f28026f2edbd0ff39d583ca21a1dc2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/TransparentWall.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a0c2c8b2ac71342e1bd714d7178198e3 +timeCreated: 1506376733 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourt.mat b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourt.mat new file mode 100644 index 0000000000000000000000000000000000000000..19bd190cc7257d232fe2fe7c1c689053ef95f041 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourt.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: WallJumpCourt + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: df56124da2726af4d8dcb3bd5896d323, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.75 + - _GlossyReflections: 1 + - _Metallic: 0.2 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourt.mat.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourt.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..7e18e27624573e89bf98755834196a95ee369c33 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourt.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8cefb3e237c2354e9beb696bbb8bdb8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtFail.mat b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtFail.mat new file mode 100644 index 0000000000000000000000000000000000000000..879c186ac94fcbad65acf33c2488d8820355c535 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtFail.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: WallJumpCourtFail + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: c862c84b87cc1314fac7392d5df40a0a, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.75 + - _GlossyReflections: 1 + - _Metallic: 0.2 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtFail.mat.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtFail.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..957069b4771747a9d236794b56ebdacba4b913d2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtFail.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 197e2e54c4e29fd4ca29bf8c4024f138 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtSuccess.mat b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtSuccess.mat new file mode 100644 index 0000000000000000000000000000000000000000..33f0c8584e1a91ec74df201f6211b73a253fd9a5 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtSuccess.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: WallJumpCourtSuccess + m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6555bb88673eebc4a87d2111c3157de4, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.75 + - _GlossyReflections: 1 + - _Metallic: 0.2 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtSuccess.mat.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtSuccess.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..a82c12e4d5c7e025b8a2c6f079aa1ea797411ea3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpCourtSuccess.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54ab68247b13ffe42927e8859e0e57cc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpSky.mat b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpSky.mat new file mode 100644 index 0000000000000000000000000000000000000000..1833efcec0a283c8ba01ef600092d10aa6950af9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpSky.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: WallJumpSky + m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _SUNDISK_HIGH_QUALITY + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AtmosphereThickness: 1 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Exposure: 1.3 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SunDisk: 2 + - _SunSize: 0.04 + - _SunSizeConvergence: 5 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _GroundColor: {r: 0.369, g: 0.349, b: 0.341, a: 1} + - _SkyTint: {r: 0.5, g: 0.5, b: 0.5, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpSky.mat.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpSky.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..0f9d338def71ae08e05e92e9a00a8ba51bda4e8c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/WallJumpSky.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1aa47bdee73e8a54d8ec176f3a9bc097 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/spawnVolumeMaterial.mat b/Project/Assets/ML-Agents/Examples/WallJump/Materials/spawnVolumeMaterial.mat new file mode 100644 index 0000000000000000000000000000000000000000..bfeb84561b8f58eab8872c45ea59d38eab94e51b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/spawnVolumeMaterial.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: spawnVolumeMaterial + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHABLEND_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 2 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 5 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 0, g: 0.83448315, b: 1, a: 0.303} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Materials/spawnVolumeMaterial.mat.meta b/Project/Assets/ML-Agents/Examples/WallJump/Materials/spawnVolumeMaterial.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..1d1e1cf6ce09e681f98c2b50661291f3d5e57b75 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Materials/spawnVolumeMaterial.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ecd59def9213741058b969f699d10e8e +timeCreated: 1506376733 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Meshes.meta b/Project/Assets/ML-Agents/Examples/WallJump/Meshes.meta new file mode 100644 index 0000000000000000000000000000000000000000..7fa9d2aadac61179f7de797d030353622e0c7ef8 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc37d1e1fdf98d24ab92b329f1b8b9e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Meshes/GoalArea.fbx b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/GoalArea.fbx new file mode 100644 index 0000000000000000000000000000000000000000..eed0d0a0fb331b9d84451862b8482225cbc32513 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/GoalArea.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Meshes/GoalArea.fbx.meta b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/GoalArea.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..816361b0ae8346ebe2b82aedba4eb3acf901f478 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/GoalArea.fbx.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: fa25bdde2b186d041b1ea55ddfc1c314 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: rep_Checkers + 2300000: //RootNode + 3300000: //RootNode + 4300000: GoalArea + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_Checkers + second: {fileID: 2100000, guid: 36c7baa347d68f347a9aa9698aa1bcdd, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Meshes/ShortBlock.fbx b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/ShortBlock.fbx new file mode 100644 index 0000000000000000000000000000000000000000..375a72ffe2bde09427525309ef438547a82fbdbc Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/ShortBlock.fbx differ diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Meshes/ShortBlock.fbx.meta b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/ShortBlock.fbx.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7196c7529d1066ec8ded266ef6e3f7a53b295d2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Meshes/ShortBlock.fbx.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: edfff343befb06d44b270d8eb6836df7 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: rep_GraySG + 2300000: //RootNode + 3300000: //RootNode + 4300000: ShortBlock + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: rep_GraySG + second: {fileID: 2100000, guid: 5eba48b0898adc441946e5c501f88fdd, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Prefabs.meta b/Project/Assets/ML-Agents/Examples/WallJump/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1f74c3ea9ffc5e0eb18e546c8401a23f564a3366 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 22e282f4b1d48436b91d6ad8a8903e1c +folderAsset: yes +timeCreated: 1517535133 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpArea.prefab b/Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpArea.prefab new file mode 100644 index 0000000000000000000000000000000000000000..aaef2530a01eae03bddc4b9563c38531171cd313 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpArea.prefab @@ -0,0 +1,1279 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1191598557174792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4171412309080586} + - component: {fileID: 20236434339313884} + m_Layer: 0 + m_Name: AgentCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4171412309080586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191598557174792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4238879128256220} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20236434339313884 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191598557174792} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294950911 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1195095783991828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4651390251185036} + - component: {fileID: 65193133000831296} + - component: {fileID: 54678503543725326} + - component: {fileID: 114898893333200490} + - component: {fileID: 114925928594762506} + - component: {fileID: 114458838850320084} + - component: {fileID: 114227939525648256} + - component: {fileID: 4778045978646539396} + - component: {fileID: 7445449404652947848} + m_Layer: 0 + m_Name: Agent + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4651390251185036 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: -1.99, y: 1.04, z: -12.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4238879128256220} + m_Father: {fileID: 4768003208014390} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!65 &65193133000831296 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &54678503543725326 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + serializedVersion: 2 + m_Mass: 25 + m_Drag: 2 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 80 + m_CollisionDetection: 0 +--- !u!114 &114898893333200490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 4 + NumStackedVectorObservations: 6 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 03000000030000000300000002000000 + VectorActionSize: 03000000030000000300000002000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 0468bf44b1efd4992b6bf22cadb50d89, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: SmallWallJump + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114925928594762506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 676fca959b8ee45539773905ca71afa1, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 2000 + noWallBrain: {fileID: 11400000, guid: fb2ce36eb40b6480e94ea0b5d7573e47, type: 3} + smallWallBrain: {fileID: 11400000, guid: fb2ce36eb40b6480e94ea0b5d7573e47, type: 3} + bigWallBrain: {fileID: 11400000, guid: 0468bf44b1efd4992b6bf22cadb50d89, type: 3} + ground: {fileID: 1324926338613664} + spawnArea: {fileID: 1886170194660384} + goal: {fileID: 1982078136115924} + shortBlock: {fileID: 1395477826315484} + wall: {fileID: 1528738716925344} + jumpingTime: 0 + jumpTime: 0.2 + fallingForce: 111 + hitGroundColliders: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} +--- !u!114 &114458838850320084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: + - wall + - goal + - block + m_RaysPerDirection: 3 + m_MaxRayDegrees: 90 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 6 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0 + m_EndVerticalOffset: 0 +--- !u!114 &114227939525648256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: OffsetRayPerceptionSensor + m_DetectableTags: + - wall + - goal + - block + m_RaysPerDirection: 3 + m_MaxRayDegrees: 90 + m_SphereCastRadius: 0.5 + m_RayLength: 20 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 6 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 2.5 + m_EndVerticalOffset: 5 +--- !u!114 &4778045978646539396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 1 +--- !u!114 &7445449404652947848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195095783991828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &1264699583886832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4852478895769832} + - component: {fileID: 33137302293864430} + - component: {fileID: 23928778190977406} + m_Layer: 0 + m_Name: Headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4852478895769832 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264699583886832} + m_LocalRotation: {x: -0, y: -0, z: 0.016506119, w: 0.9998638} + m_LocalPosition: {x: 0, y: 0.341, z: 0} + m_LocalScale: {x: 1.0441425, y: 0.19278127, z: 1.0441422} + m_Children: [] + m_Father: {fileID: 4238879128256220} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -179.99998, z: 1.8920001} +--- !u!33 &33137302293864430 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264699583886832} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23928778190977406 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264699583886832} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 04be259c590de46f69db4cbd1da877d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1280098394364104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4768003208014390} + m_Layer: 0 + m_Name: WallJumpArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4768003208014390 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1280098394364104} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4868361895932270} + - {fileID: 4651390251185036} + - {fileID: 4011541840118462} + - {fileID: 4294902888415044} + - {fileID: 4764219638476960} + - {fileID: 4886712515982252} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1324926338613664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4886712515982252} + - component: {fileID: 33154540559471312} + - component: {fileID: 65222653177649434} + - component: {fileID: 23622490785648000} + m_Layer: 0 + m_Name: Ground + m_TagString: walkableSurface + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4886712515982252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324926338613664} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -4} + m_LocalScale: {x: 20, y: 1, z: 20} + m_Children: + - {fileID: 4149981577781684} + m_Father: {fileID: 4768003208014390} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33154540559471312 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324926338613664} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65222653177649434 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324926338613664} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23622490785648000 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324926338613664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: acba6bf2a290a496bb8989b42bf8698d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1395477826315484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4294902888415044} + - component: {fileID: 33528566080995282} + - component: {fileID: 23354960268522594} + - component: {fileID: 54247662820912646} + - component: {fileID: 65274572473947754} + m_Layer: 0 + m_Name: shortBlock + m_TagString: block + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4294902888415044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1395477826315484} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.35, y: 1.55, z: -6.02} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4768003208014390} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33528566080995282 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1395477826315484} + m_Mesh: {fileID: 4300000, guid: edfff343befb06d44b270d8eb6836df7, type: 3} +--- !u!23 &23354960268522594 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1395477826315484} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &54247662820912646 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1395477826315484} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 1 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 116 + m_CollisionDetection: 0 +--- !u!65 &65274572473947754 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1395477826315484} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 300, y: 200, z: 300} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1438278873213570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4149981577781684} + - component: {fileID: 33146660732111500} + - component: {fileID: 65611839918206582} + - component: {fileID: 23557798664619476} + m_Layer: 0 + m_Name: Border + m_TagString: walkableSurface + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4149981577781684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438278873213570} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.05, z: 0} + m_LocalScale: {x: 1.0500001, y: 1, z: 1.0500001} + m_Children: [] + m_Father: {fileID: 4886712515982252} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33146660732111500 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438278873213570} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65611839918206582 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438278873213570} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23557798664619476 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438278873213570} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1522580096460278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4910264054805944} + - component: {fileID: 33914611813991778} + - component: {fileID: 23203150414451356} + m_Layer: 0 + m_Name: mouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4910264054805944 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522580096460278} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: -0.18299997, z: 0.50040054} + m_LocalScale: {x: 0.27602, y: 0.042489994, z: 0.13891} + m_Children: [] + m_Father: {fileID: 4238879128256220} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33914611813991778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522580096460278} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23203150414451356 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522580096460278} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1528738716925344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4868361895932270} + - component: {fileID: 33638988508065470} + - component: {fileID: 65172803744987730} + - component: {fileID: 23154667836274938} + m_Layer: 0 + m_Name: Wall + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4868361895932270 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528738716925344} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.98} + m_LocalScale: {x: 20, y: 0, z: 1.5} + m_Children: [] + m_Father: {fileID: 4768003208014390} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33638988508065470 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528738716925344} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65172803744987730 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528738716925344} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23154667836274938 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528738716925344} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a0c2c8b2ac71342e1bd714d7178198e3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1530648436660572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4907656655904910} + - component: {fileID: 33107871364963240} + - component: {fileID: 23256221174078360} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4907656655904910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530648436660572} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: -0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4238879128256220} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33107871364963240 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530648436660572} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23256221174078360 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530648436660572} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1823012949159486 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4238879128256220} + - component: {fileID: 33966533147322750} + - component: {fileID: 23326871646204832} + m_Layer: 0 + m_Name: AgentCube_Blue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4238879128256220 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823012949159486} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4171412309080586} + - {fileID: 4915689319755866} + - {fileID: 4907656655904910} + - {fileID: 4910264054805944} + - {fileID: 4852478895769832} + m_Father: {fileID: 4651390251185036} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33966533147322750 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823012949159486} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23326871646204832 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1823012949159486} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1877263999586638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4915689319755866} + - component: {fileID: 33874593518009454} + - component: {fileID: 23724199705901440} + m_Layer: 0 + m_Name: eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4915689319755866 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877263999586638} + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} + m_LocalPosition: {x: 0.29999995, y: 0.07399994, z: 0.50040054} + m_LocalScale: {x: 0.29457998, y: 0.29457998, z: 0.29457998} + m_Children: [] + m_Father: {fileID: 4238879128256220} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!33 &33874593518009454 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877263999586638} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &23724199705901440 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877263999586638} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f731be6866ce749fd8349e67ae81f76a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1886170194660384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4764219638476960} + - component: {fileID: 33735173681975238} + - component: {fileID: 65882330142487122} + - component: {fileID: 23776852865446674} + m_Layer: 0 + m_Name: SpawnVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4764219638476960 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886170194660384} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.05, z: -6.27} + m_LocalScale: {x: 16.2, y: 1, z: 7} + m_Children: [] + m_Father: {fileID: 4768003208014390} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33735173681975238 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886170194660384} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65882330142487122 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886170194660384} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23776852865446674 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886170194660384} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ecd59def9213741058b969f699d10e8e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1982078136115924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4011541840118462} + - component: {fileID: 33618033993823702} + - component: {fileID: 23621829541977726} + - component: {fileID: 65431820516000586} + m_Layer: 0 + m_Name: Goal + m_TagString: goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4011541840118462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982078136115924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.37, y: 0.49, z: 2.93} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 4768003208014390} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33618033993823702 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982078136115924} + m_Mesh: {fileID: 4300000, guid: fa25bdde2b186d041b1ea55ddfc1c314, type: 3} +--- !u!23 &23621829541977726 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982078136115924} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c67450f290f3e4897bc40276a619e78d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &65431820516000586 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982078136115924} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 400, y: 500, z: 400} + m_Center: {x: 0, y: 250, z: 0} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpArea.prefab.meta b/Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpArea.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..c70f4436b4d21e24c20dc6033f895dc05f969255 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpArea.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 54e3af627216447f790531de496099f0 +timeCreated: 1520541093 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scenes.meta b/Project/Assets/ML-Agents/Examples/WallJump/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..65f291ef16921567d4c160e8b47eac207610c043 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1d53e87fe54dd4178b88cc1a23b11731 +folderAsset: yes +timeCreated: 1517446674 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity b/Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity new file mode 100644 index 0000000000000000000000000000000000000000..123378e59b2bfc2da143b6ab5d93325d103bb707 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity @@ -0,0 +1,1870 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 1aa47bdee73e8a54d8ec176f3a9bc097, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44971484, g: 0.49977958, b: 0.5756385, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &117944611 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (15) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 20 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &201057664 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537121661968964, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -45 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Color.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Color.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Color.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 108227806558212132, guid: 5889392e3f05b448a8a06c5def6c2dec, + type: 3} + propertyPath: m_Intensity + value: 0.8 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &236193370 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (21) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 720 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 26 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &318490716 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318490717} + m_Layer: 0 + m_Name: UnityEngine-Recorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318490717 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318490716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 365376271} + - {fileID: 1265651286} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &319363566 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (20) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -690 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 720 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 25 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &365376270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365376271} + m_Layer: 0 + m_Name: Settings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &365376271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365376270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257687049} + m_Father: {fileID: 318490717} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &414246748 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (16) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 21 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &432069908 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (19) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 720 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 24 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &508841052 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_Name + value: Canvas - Watermark + objectReference: {fileID: 0} + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &684891805 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (1) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &1009000883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1009000884} + - component: {fileID: 1009000887} + m_Layer: 0 + m_Name: OverviewCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1009000884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: -9.01, y: 167.27, z: 57.32} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!20 &1009000887 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1009000883} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.39609292, g: 0.49962592, b: 0.6509434, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 54.1 + orthographic: 0 + orthographic size: 10 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &1121924008 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (2) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1127039166 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (17) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 22 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1192162776 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (14) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -690 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1218184160 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (8) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1233629912 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (22) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 720 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 27 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &1257687048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257687049} + m_Layer: 0 + m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257687049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257687048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 365376271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1261362180 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (11) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &1265651285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265651286} + m_Layer: 0 + m_Name: RecordingSessions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1265651286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265651285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 318490717} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1363326492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1363326495} + - component: {fileID: 1363326494} + - component: {fileID: 1363326493} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1363326493 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1363326492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1363326494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1363326492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1363326495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1363326492} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 29 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1374385438 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (23) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1886170194660384, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 720 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 28 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1465466273 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (4) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1543174177 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (3) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &1574236047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574236049} + - component: {fileID: 1574236051} + - component: {fileID: 1574236048} + m_Layer: 0 + m_Name: WallJumpSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574236048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 2.75 + monitorVerticalOffset: 0 + fixedDeltaTime: 0.02 + maximumDeltaTime: 0.33333334 + solverIterations: 6 + solverVelocityIterations: 1 +--- !u!4 &1574236049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1574236051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574236047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9867286b28acd47f39162a42c27e224d, type: 3} + m_Name: + m_EditorClassIdentifier: + agentRunSpeed: 3 + agentJumpHeight: 2.75 + goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2} + failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2} + agentJumpVelocity: 777 + agentJumpVelocityMaxChange: 10 +--- !u!1001 &1813512988 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1839574406 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (18) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 720 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 23 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1846502711 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (13) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1854780433 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (9) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &1897588141 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (12) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1 &1955352159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955352161} + - component: {fileID: 1955352160} + m_Layer: 0 + m_Name: PlayerCam + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1955352160 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955352159} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 50 + orthographic: 0 + orthographic size: 10 + m_Depth: 2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1955352161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955352159} + m_LocalRotation: {x: 0.3716433, y: -0.00001621482, z: 0.000040505092, w: 0.92837566} + m_LocalPosition: {x: 0, y: 16.98, z: -24.3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 43.634003, y: 0, z: 0.0050000004} +--- !u!1001 &1970223115 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (7) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -690 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &2076065932 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (10) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: 460 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &2086448138 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (6) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -230 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} +--- !u!1001 &2138219180 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_Name + value: WallJumpArea (5) + objectReference: {fileID: 0} + - target: {fileID: 1280098394364104, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.x + value: -690 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4768003208014390, guid: 54e3af627216447f790531de496099f0, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 54e3af627216447f790531de496099f0, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity.meta b/Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..e22a8b9759da0526fc8fe9ff360c51bf4b149a13 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJump.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 56024e8d040d344709949bc88128944d +timeCreated: 1506808980 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scripts.meta b/Project/Assets/ML-Agents/Examples/WallJump/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..c56a9cca2868fa8b0696c16fdb17ab40419dfcf0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 344123e9bd87b48fdbebb4202a771d96 +folderAsset: yes +timeCreated: 1517445791 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..d9379c6629ab41b43dacf2e74220ea60c61b3e90 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs @@ -0,0 +1,365 @@ +//Put this script on your blue cube. + +using System.Collections; +using UnityEngine; +using Unity.MLAgents; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Unity.MLAgentsExamples; + +public class WallJumpAgent : Agent +{ + // Depending on this value, the wall will have different height + int m_Configuration; + // Brain to use when no wall is present + public NNModel noWallBrain; + // Brain to use when a jumpable wall is present + public NNModel smallWallBrain; + // Brain to use when a wall requiring a block to jump over is present + public NNModel bigWallBrain; + + public GameObject ground; + public GameObject spawnArea; + Bounds m_SpawnAreaBounds; + + + public GameObject goal; + public GameObject shortBlock; + public GameObject wall; + Rigidbody m_ShortBlockRb; + Rigidbody m_AgentRb; + Material m_GroundMaterial; + Renderer m_GroundRenderer; + WallJumpSettings m_WallJumpSettings; + + public float jumpingTime; + public float jumpTime; + // This is a downward force applied when falling to make jumps look + // less floaty + public float fallingForce; + // Use to check the coliding objects + public Collider[] hitGroundColliders = new Collider[3]; + Vector3 m_JumpTargetPos; + Vector3 m_JumpStartingPos; + + string m_NoWallBehaviorName = "SmallWallJump"; + string m_SmallWallBehaviorName = "SmallWallJump"; + string m_BigWallBehaviorName = "BigWallJump"; + + EnvironmentParameters m_ResetParams; + + public override void Initialize() + { + m_WallJumpSettings = FindObjectOfType(); + m_Configuration = Random.Range(0, 5); + + m_AgentRb = GetComponent(); + m_ShortBlockRb = shortBlock.GetComponent(); + m_SpawnAreaBounds = spawnArea.GetComponent().bounds; + m_GroundRenderer = ground.GetComponent(); + m_GroundMaterial = m_GroundRenderer.material; + + spawnArea.SetActive(false); + + m_ResetParams = Academy.Instance.EnvironmentParameters; + + // Update model references if we're overriding + var modelOverrider = GetComponent(); + if (modelOverrider.HasOverrides) + { + noWallBrain = modelOverrider.GetModelForBehaviorName(m_NoWallBehaviorName); + m_NoWallBehaviorName = ModelOverrider.GetOverrideBehaviorName(m_NoWallBehaviorName); + + smallWallBrain = modelOverrider.GetModelForBehaviorName(m_SmallWallBehaviorName); + m_SmallWallBehaviorName = ModelOverrider.GetOverrideBehaviorName(m_SmallWallBehaviorName); + + bigWallBrain = modelOverrider.GetModelForBehaviorName(m_BigWallBehaviorName); + m_BigWallBehaviorName = ModelOverrider.GetOverrideBehaviorName(m_BigWallBehaviorName); + } + } + + // Begin the jump sequence + public void Jump() + { + jumpingTime = 0.2f; + m_JumpStartingPos = m_AgentRb.position; + } + + /// + /// Does the ground check. + /// + /// true, if the agent is on the ground, + /// false otherwise. + /// + public bool DoGroundCheck(bool smallCheck) + { + if (!smallCheck) + { + hitGroundColliders = new Collider[3]; + var o = gameObject; + Physics.OverlapBoxNonAlloc( + o.transform.position + new Vector3(0, -0.05f, 0), + new Vector3(0.95f / 2f, 0.5f, 0.95f / 2f), + hitGroundColliders, + o.transform.rotation); + var grounded = false; + foreach (var col in hitGroundColliders) + { + if (col != null && col.transform != transform && + (col.CompareTag("walkableSurface") || + col.CompareTag("block") || + col.CompareTag("wall"))) + { + grounded = true; //then we're grounded + break; + } + } + return grounded; + } + else + { + RaycastHit hit; + Physics.Raycast(transform.position + new Vector3(0, -0.05f, 0), -Vector3.up, out hit, + 1f); + + if (hit.collider != null && + (hit.collider.CompareTag("walkableSurface") || + hit.collider.CompareTag("block") || + hit.collider.CompareTag("wall")) + && hit.normal.y > 0.95f) + { + return true; + } + + return false; + } + } + + /// + /// Moves a rigidbody towards a position smoothly. + /// + /// Target position. + /// The rigidbody to be moved. + /// The velocity to target during the + /// motion. + /// The maximum velocity posible. + void MoveTowards( + Vector3 targetPos, Rigidbody rb, float targetVel, float maxVel) + { + var moveToPos = targetPos - rb.worldCenterOfMass; + var velocityTarget = Time.fixedDeltaTime * targetVel * moveToPos; + if (float.IsNaN(velocityTarget.x) == false) + { + rb.velocity = Vector3.MoveTowards( + rb.velocity, velocityTarget, maxVel); + } + } + + public override void CollectObservations(VectorSensor sensor) + { + var agentPos = m_AgentRb.position - ground.transform.position; + + sensor.AddObservation(agentPos / 20f); + sensor.AddObservation(DoGroundCheck(true) ? 1 : 0); + } + + /// + /// Gets a random spawn position in the spawningArea. + /// + /// The random spawn position. + public Vector3 GetRandomSpawnPos() + { + var randomPosX = Random.Range(-m_SpawnAreaBounds.extents.x, + m_SpawnAreaBounds.extents.x); + var randomPosZ = Random.Range(-m_SpawnAreaBounds.extents.z, + m_SpawnAreaBounds.extents.z); + + var randomSpawnPos = spawnArea.transform.position + + new Vector3(randomPosX, 0.45f, randomPosZ); + return randomSpawnPos; + } + + /// + /// Changes the color of the ground for a moment. + /// + /// The Enumerator to be used in a Coroutine. + /// The material to be swapped. + /// The time the material will remain. + IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time) + { + m_GroundRenderer.material = mat; + yield return new WaitForSeconds(time); //wait for 2 sec + m_GroundRenderer.material = m_GroundMaterial; + } + + public void MoveAgent(ActionSegment act) + { + AddReward(-0.0005f); + var smallGrounded = DoGroundCheck(true); + var largeGrounded = DoGroundCheck(false); + + var dirToGo = Vector3.zero; + var rotateDir = Vector3.zero; + var dirToGoForwardAction = act[0]; + var rotateDirAction = act[1]; + var dirToGoSideAction = act[2]; + var jumpAction = act[3]; + + if (dirToGoForwardAction == 1) + dirToGo = (largeGrounded ? 1f : 0.5f) * 1f * transform.forward; + else if (dirToGoForwardAction == 2) + dirToGo = (largeGrounded ? 1f : 0.5f) * -1f * transform.forward; + if (rotateDirAction == 1) + rotateDir = transform.up * -1f; + else if (rotateDirAction == 2) + rotateDir = transform.up * 1f; + if (dirToGoSideAction == 1) + dirToGo = (largeGrounded ? 1f : 0.5f) * -0.6f * transform.right; + else if (dirToGoSideAction == 2) + dirToGo = (largeGrounded ? 1f : 0.5f) * 0.6f * transform.right; + if (jumpAction == 1) + if ((jumpingTime <= 0f) && smallGrounded) + { + Jump(); + } + + transform.Rotate(rotateDir, Time.fixedDeltaTime * 300f); + m_AgentRb.AddForce(dirToGo * m_WallJumpSettings.agentRunSpeed, + ForceMode.VelocityChange); + + if (jumpingTime > 0f) + { + m_JumpTargetPos = + new Vector3(m_AgentRb.position.x, + m_JumpStartingPos.y + m_WallJumpSettings.agentJumpHeight, + m_AgentRb.position.z) + dirToGo; + MoveTowards(m_JumpTargetPos, m_AgentRb, m_WallJumpSettings.agentJumpVelocity, + m_WallJumpSettings.agentJumpVelocityMaxChange); + } + + if (!(jumpingTime > 0f) && !largeGrounded) + { + m_AgentRb.AddForce( + Vector3.down * fallingForce, ForceMode.Acceleration); + } + jumpingTime -= Time.fixedDeltaTime; + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + + { + MoveAgent(actionBuffers.DiscreteActions); + if ((!Physics.Raycast(m_AgentRb.position, Vector3.down, 20)) + || (!Physics.Raycast(m_ShortBlockRb.position, Vector3.down, 20))) + { + SetReward(-1f); + EndEpisode(); + ResetBlock(m_ShortBlockRb); + StartCoroutine( + GoalScoredSwapGroundMaterial(m_WallJumpSettings.failMaterial, .5f)); + } + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var discreteActionsOut = actionsOut.DiscreteActions; + if (Input.GetKey(KeyCode.D)) + { + discreteActionsOut[1] = 2; + } + if (Input.GetKey(KeyCode.W)) + { + discreteActionsOut[0] = 1; + } + if (Input.GetKey(KeyCode.A)) + { + discreteActionsOut[1] = 1; + } + if (Input.GetKey(KeyCode.S)) + { + discreteActionsOut[0] = 2; + } + discreteActionsOut[3] = Input.GetKey(KeyCode.Space) ? 1 : 0; + } + + // Detect when the agent hits the goal + void OnTriggerStay(Collider col) + { + if (col.gameObject.CompareTag("goal") && DoGroundCheck(true)) + { + SetReward(1f); + EndEpisode(); + StartCoroutine( + GoalScoredSwapGroundMaterial(m_WallJumpSettings.goalScoredMaterial, 2)); + } + } + + //Reset the orange block position + void ResetBlock(Rigidbody blockRb) + { + blockRb.transform.position = GetRandomSpawnPos(); + blockRb.velocity = Vector3.zero; + blockRb.angularVelocity = Vector3.zero; + } + + public override void OnEpisodeBegin() + { + ResetBlock(m_ShortBlockRb); + transform.localPosition = new Vector3( + 18 * (Random.value - 0.5f), 1, -12); + m_Configuration = Random.Range(0, 5); + m_AgentRb.velocity = default(Vector3); + } + + void FixedUpdate() + { + if (m_Configuration != -1) + { + ConfigureAgent(m_Configuration); + m_Configuration = -1; + } + } + + /// + /// Configures the agent. Given an integer config, the wall will have + /// different height and a different brain will be assigned to the agent. + /// + /// Config. + /// If 0 : No wall and noWallBrain. + /// If 1: Small wall and smallWallBrain. + /// Other : Tall wall and BigWallBrain. + /// + void ConfigureAgent(int config) + { + var localScale = wall.transform.localScale; + if (config == 0) + { + localScale = new Vector3( + localScale.x, + m_ResetParams.GetWithDefault("no_wall_height", 0), + localScale.z); + wall.transform.localScale = localScale; + SetModel(m_NoWallBehaviorName, noWallBrain); + } + else if (config == 1) + { + localScale = new Vector3( + localScale.x, + m_ResetParams.GetWithDefault("small_wall_height", 4), + localScale.z); + wall.transform.localScale = localScale; + SetModel(m_SmallWallBehaviorName, smallWallBrain); + } + else + { + var height = m_ResetParams.GetWithDefault("big_wall_height", 8); + localScale = new Vector3( + localScale.x, + height, + localScale.z); + wall.transform.localScale = localScale; + SetModel(m_BigWallBehaviorName, bigWallBrain); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs.meta b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0be641c8333c4a05ad418752f11b00676f021941 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 676fca959b8ee45539773905ca71afa1 +timeCreated: 1517445814 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpSettings.cs b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..1c36ea996531e71c7530408a7b6691b6525557ff --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpSettings.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +public class WallJumpSettings : MonoBehaviour +{ + [Header("Specific to WallJump")] + public float agentRunSpeed; + public float agentJumpHeight; + //when a goal is scored the ground will use this material for a few seconds. + public Material goalScoredMaterial; + //when fail, the ground will use this material for a few seconds. + public Material failMaterial; + + [HideInInspector] + public float agentJumpVelocity = 777; + [HideInInspector] + public float agentJumpVelocityMaxChange = 10; + +} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpSettings.cs.meta b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b7673f3cd3cd825f79112c789fb25a297bc36618 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9867286b28acd47f39162a42c27e224d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/TFModels.meta b/Project/Assets/ML-Agents/Examples/WallJump/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..c44202c2fcb285f794420a1b1233d2296a6de442 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/TFModels.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: da68dfde501d241c788cadc9805b214a +folderAsset: yes +timeCreated: 1517539094 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/WallJump/TFModels/BigWallJump.nn b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/BigWallJump.nn new file mode 100644 index 0000000000000000000000000000000000000000..5b3e1427a5ff07c6c6c1672ea9429bde52b6ae17 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/BigWallJump.nn differ diff --git a/Project/Assets/ML-Agents/Examples/WallJump/TFModels/BigWallJump.nn.meta b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/BigWallJump.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..ede918fca6f1e51c45312ff15cf3d8edc1b74891 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/BigWallJump.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0468bf44b1efd4992b6bf22cadb50d89 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/WallJump/TFModels/SmallWallJump.nn b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/SmallWallJump.nn new file mode 100644 index 0000000000000000000000000000000000000000..22c334fc07afd4d1a2ba634f537dc20102a97a2e Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/SmallWallJump.nn differ diff --git a/Project/Assets/ML-Agents/Examples/WallJump/TFModels/SmallWallJump.nn.meta b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/SmallWallJump.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..b2f0f7f459d9c1e530d8c318c7f7033c3b247ad3 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/WallJump/TFModels/SmallWallJump.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb2ce36eb40b6480e94ea0b5d7573e47 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/Worm.meta b/Project/Assets/ML-Agents/Examples/Worm.meta new file mode 100644 index 0000000000000000000000000000000000000000..943669d6553f148f7490f787caed3e15ef00d9ed --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa2e0f8693a174e6fbecd7778e6cb364 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Prefabs.meta b/Project/Assets/ML-Agents/Examples/Worm/Prefabs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7498dd34d905e6b987b877ec2885bc7de13b907 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 07206274aded54b3991a277fedbaa2b2 +folderAsset: yes +timeCreated: 1508478093 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Prefabs/PlatformWorm.prefab b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/PlatformWorm.prefab new file mode 100644 index 0000000000000000000000000000000000000000..1c220a3df71876013c0b97d31b9a8ff163206d8b --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/PlatformWorm.prefab @@ -0,0 +1,193 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!54 &196764348373653716 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7516032765332866700} + serializedVersion: 2 + m_Mass: 1000 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1001 &6598637992493152055 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 7519741477752072726} + m_Modifications: + - target: {fileID: 7430253518223459950, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_Name + value: WormBasePrefab + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.65 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ff2999c8614d848f8a7e55e3a6fb9282, type: 3} +--- !u!1001 &7202236613889278392 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 815238519217806050, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_Size.y + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 815445646158418370, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_Size.y + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 815643536240931858, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_Size.y + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 819454741375499406, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_Size.y + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 845566399918322646, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_Name + value: PlatformWorm + objectReference: {fileID: 0} + - target: {fileID: 845742365997159796, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d6fc96a99a9754f07b48abf1e0d55a5c, type: 3} +--- !u!4 &7519741477752072726 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 839922442615925678, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + m_PrefabInstance: {fileID: 7202236613889278392} + m_PrefabAsset: {fileID: 0} +--- !u!1 &7516032765332866700 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 845889415043745588, guid: d6fc96a99a9754f07b48abf1e0d55a5c, + type: 3} + m_PrefabInstance: {fileID: 7202236613889278392} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Worm/Prefabs/PlatformWorm.prefab.meta b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/PlatformWorm.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..5201ddad98fca2e8b7dc2dd51ecdfd64a2bc569f --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/PlatformWorm.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 75720cc09f5b24833af829458ac467fa +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Prefabs/Worm.prefab b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/Worm.prefab new file mode 100644 index 0000000000000000000000000000000000000000..23e3d24d4f0d048ab3ba8b85d6a3425f282afbf0 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/Worm.prefab @@ -0,0 +1,2173 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3425944858556105217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4000013202901713542} + - component: {fileID: 3824013808842067416} + - component: {fileID: 3612783679526746640} + m_Layer: 0 + m_Name: MeshBodySeg3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000013202901713542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3425944858556105217} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.49789357, y: 0.75, z: 0.49789354} + m_Children: + - {fileID: 7430253518057581880} + m_Father: {fileID: 7430253517665647541} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!33 &3824013808842067416 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3425944858556105217} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3612783679526746640 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3425944858556105217} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &4341398410231292401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3706743983009984222} + - component: {fileID: 5451460609091845275} + - component: {fileID: 3076491853972576545} + - component: {fileID: 1758637205552806262} + - component: {fileID: 5075903151365038534} + - component: {fileID: 1896215321265182657} + m_Layer: 0 + m_Name: mouth + m_TagString: agent + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3706743983009984222 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4341398410231292401} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.16541958, z: 0.9368001} + m_LocalScale: {x: 0.15541708, y: 0.03930019, z: 0.026193839} + m_Children: [] + m_Father: {fileID: 7430253517585478437} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5451460609091845275 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4341398410231292401} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3076491853972576545 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4341398410231292401} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &1758637205552806262 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4341398410231292401} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 2 + m_Center: {x: -0.13, y: 1.25, z: -5} +--- !u!54 &5075903151365038534 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4341398410231292401} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!138 &1896215321265182657 +FixedJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4341398410231292401} + m_ConnectedBody: {fileID: 7430253517585478438} + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 0.1 + m_ConnectedMassScale: 1 +--- !u!1 &5066808357271954180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7123748794063981559} + - component: {fileID: 6091561061807415017} + - component: {fileID: 138307165290057190} + m_Layer: 0 + m_Name: MeshBodySeg2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7123748794063981559 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5066808357271954180} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5606166, y: 0.75, z: 0.5606165} + m_Children: + - {fileID: 7430253518207655505} + m_Father: {fileID: 7430253518623948737} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!33 &6091561061807415017 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5066808357271954180} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &138307165290057190 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5066808357271954180} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7080128691884336933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8679239658813963324} + - component: {fileID: 4173695739753575171} + - component: {fileID: 599689188601990516} + m_Layer: 0 + m_Name: MeshBodySeg1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8679239658813963324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7080128691884336933} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.6562462, y: 0.75, z: 0.6562462} + m_Children: + - {fileID: 7430253518678196321} + m_Father: {fileID: 7430253518698367209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!33 &4173695739753575171 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7080128691884336933} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &599689188601990516 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7080128691884336933} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253517558768489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253517558768490} + - component: {fileID: 7430253517558768484} + - component: {fileID: 7430253517558768491} + m_Layer: 0 + m_Name: pupil + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253517558768490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517558768489} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.46, y: 0, z: 0} + m_LocalScale: {x: 0.116126545, y: 0.35806346, z: 0.35806346} + m_Children: [] + m_Father: {fileID: 7430253518344216410} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7430253517558768484 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517558768489} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253517558768491 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517558768489} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253517585478436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253517585478437} + - component: {fileID: 7430253517585478438} + - component: {fileID: 7430253517585478432} + - component: {fileID: 7430253517585478439} + m_Layer: 0 + m_Name: BodySeg0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253517585478437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517585478436} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7430253518935506121} + - {fileID: 7430253518344216410} + - {fileID: 3706743983009984222} + - {fileID: 3480290756406204138} + - {fileID: 7430253518698367209} + m_Father: {fileID: 7430253518223459951} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7430253517585478438 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517585478436} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!136 &7430253517585478432 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517585478436} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.37 + m_Height: 2 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!153 &7430253517585478439 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517585478436} + m_ConnectedBody: {fileID: 7430253518698367210} + m_Anchor: {x: 0, y: 0, z: -0.8} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.5162998, z: 0.00029248} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 1 + positionDamper: 1 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!1 &7430253517594625975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253517594625968} + - component: {fileID: 7430253517594625970} + - component: {fileID: 7430253517594625969} + m_Layer: 0 + m_Name: pupil + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253517594625968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517594625975} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.46, y: 0, z: 0} + m_LocalScale: {x: 0.116126545, y: 0.35806346, z: 0.35806346} + m_Children: [] + m_Father: {fileID: 7430253518935506121} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7430253517594625970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517594625975} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253517594625969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517594625975} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253517665647540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253517665647541} + - component: {fileID: 7430253517665647543} + - component: {fileID: 7430253517665647542} + m_Layer: 0 + m_Name: BodySeg3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253517665647541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517665647540} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1.1159996, z: -0.0004159212} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013202901713542} + m_Father: {fileID: 7430253518623948737} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!136 &7430253517665647543 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517665647540} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.26 + m_Height: 1.46 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &7430253517665647542 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253517665647540} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!1 &7430253518057581887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518057581880} + - component: {fileID: 7430253518057581882} + - component: {fileID: 7430253518057581881} + m_Layer: 0 + m_Name: stripe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518057581880 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518057581887} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.000012721227, z: -0.048762847} + m_LocalScale: {x: 1.0226575, y: 0.14130552, z: 0.9652029} + m_Children: [] + m_Father: {fileID: 4000013202901713542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!33 &7430253518057581882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518057581887} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253518057581881 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518057581887} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253518207655504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518207655505} + - component: {fileID: 7430253518207655507} + - component: {fileID: 7430253518207655506} + m_Layer: 0 + m_Name: stripe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518207655505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518207655504} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.000012721227, z: -0.048762847} + m_LocalScale: {x: 1.0226575, y: 0.14130552, z: 0.9652029} + m_Children: [] + m_Father: {fileID: 7123748794063981559} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!33 &7430253518207655507 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518207655504} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253518207655506 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518207655504} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253518223459950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518223459951} + - component: {fileID: 7430253518223459941} + - component: {fileID: 7430253518223459940} + - component: {fileID: 7430253518223459947} + - component: {fileID: 7430253518223459946} + - component: {fileID: 7430253518223459945} + m_Layer: 0 + m_Name: Worm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518223459951 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518223459950} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.65, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7430253517585478437} + - {fileID: 2730837554089586253} + - {fileID: 5623293504353442273} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7430253518223459941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518223459950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 64 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 9 + BranchSizes: + VectorActionSize: 09000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 117512193457f4b35994eedc14532276, type: 3} + m_InferenceDevice: 2 + m_BehaviorType: 0 + m_BehaviorName: Worm + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &7430253518223459940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518223459950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 292fce25fb4b541f4b007a7b92c5923c, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 5000 + TargetPrefab: {fileID: 3839136118347789758, guid: 46734abd0de454192b407379c6a4ab8d, + type: 3} + bodySegment0: {fileID: 7430253517585478437} + bodySegment1: {fileID: 7430253518698367209} + bodySegment2: {fileID: 7430253518623948737} + bodySegment3: {fileID: 7430253517665647541} +--- !u!114 &7430253518223459947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518223459950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b29724baddfa457da6eeab446fa49ca, type: 3} + m_Name: + m_EditorClassIdentifier: + maxJointSpring: 3000 + jointDampen: 30 + maxJointForceLimit: 10000 + bodyPartsList: [] +--- !u!114 &7430253518223459946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518223459950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 5 + TakeActionsBetweenDecisions: 0 +--- !u!114 &7430253518223459945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518223459950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} + m_Name: + m_EditorClassIdentifier: + debugCommandLineOverride: +--- !u!1 &7430253518344216409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518344216410} + - component: {fileID: 7430253518344216407} + - component: {fileID: 7430253518344216406} + - component: {fileID: 7430253518344216405} + - component: {fileID: 7430253518344216404} + - component: {fileID: 7430253518344216411} + m_Layer: 0 + m_Name: eyeL + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518344216410 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518344216409} + m_LocalRotation: {x: 0.119500756, y: 0.6809617, z: 0.7218742, w: -0.030138876} + m_LocalPosition: {x: -0.26999986, y: 0.10099998, z: 0.598} + m_LocalScale: {x: 0.41889992, y: 0.41889998, z: 0.41889998} + m_Children: + - {fileID: 7430253517558768490} + m_Father: {fileID: 7430253517585478437} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -82.03001, y: 71.489006, z: 120.688} +--- !u!33 &7430253518344216407 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518344216409} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253518344216406 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518344216409} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &7430253518344216405 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518344216409} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!153 &7430253518344216404 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518344216409} + m_ConnectedBody: {fileID: 7430253517585478438} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -0.26999986, y: 0.10099995, z: 0.598} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 2 + m_AngularYMotion: 2 + m_AngularZMotion: 2 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 15 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!135 &7430253518344216411 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518344216409} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.3 + m_Center: {x: 0, y: 0.00000023841858, z: -0.0000038146973} +--- !u!1 &7430253518623948736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518623948737} + - component: {fileID: 7430253518623948764} + - component: {fileID: 7430253518623948739} + - component: {fileID: 7430253518623948738} + m_Layer: 0 + m_Name: BodySeg2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518623948737 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518623948736} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1.1247, z: -0.00031888485} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7123748794063981559} + - {fileID: 7430253517665647541} + m_Father: {fileID: 7430253518698367209} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!136 &7430253518623948764 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518623948736} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.28 + m_Height: 1.48 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &7430253518623948739 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518623948736} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7430253518623948738 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518623948736} + m_ConnectedBody: {fileID: 7430253517665647542} + m_Anchor: {x: 0, y: -0.55, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.5659995, z: 0.0004159212} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 1 + positionDamper: 1 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!1 &7430253518678196320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518678196321} + - component: {fileID: 7430253518678196323} + - component: {fileID: 7430253518678196322} + m_Layer: 0 + m_Name: stripe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518678196321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518678196320} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.000012721227, z: -0.048762847} + m_LocalScale: {x: 1.0226575, y: 0.14130552, z: 0.9652029} + m_Children: [] + m_Father: {fileID: 8679239658813963324} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!33 &7430253518678196323 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518678196320} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253518678196322 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518678196320} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253518692004125 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518692004126} + - component: {fileID: 7430253518692004120} + - component: {fileID: 7430253518692004127} + m_Layer: 0 + m_Name: headband + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518692004126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518692004125} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.154, z: -0.002} + m_LocalScale: {x: 1.066923, y: 0.17350084, z: 1.0669229} + m_Children: [] + m_Father: {fileID: 3480290756406204138} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7430253518692004120 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518692004125} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253518692004127 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518692004125} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7430253518698367208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518698367209} + - component: {fileID: 7430253518698367204} + - component: {fileID: 7430253518698367210} + - component: {fileID: 7430253518698367211} + m_Layer: 0 + m_Name: BodySeg1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518698367209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518698367208} + m_LocalRotation: {x: 0.70697504, y: -0, z: -0, w: 0.7072385} + m_LocalPosition: {x: 0, y: 0.0001001358, z: -1.3162999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8679239658813963324} + - {fileID: 7430253518623948737} + m_Father: {fileID: 7430253517585478437} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 89.98, y: 0, z: 0} +--- !u!136 &7430253518698367204 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518698367208} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.33 + m_Height: 1.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &7430253518698367210 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518698367208} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 3 +--- !u!153 &7430253518698367211 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518698367208} + m_ConnectedBody: {fileID: 7430253518623948739} + m_Anchor: {x: 0, y: -0.55, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0.5747, z: 0.00031888485} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 0, z: -1} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 1 + m_AngularYMotion: 1 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: -60 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 60 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 1 + positionDamper: 1 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!1 &7430253518935506120 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430253518935506121} + - component: {fileID: 7430253518935506118} + - component: {fileID: 7430253518935506117} + - component: {fileID: 7430253518935506116} + - component: {fileID: 7430253518935506123} + - component: {fileID: 7430253518935506122} + m_Layer: 0 + m_Name: eyeR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7430253518935506121 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518935506120} + m_LocalRotation: {x: -0.23005107, y: -0.214901, z: 0.06767845, w: 0.9467385} + m_LocalPosition: {x: 0.289, y: 0.040000036, z: 0.648} + m_LocalScale: {x: 0.41890004, y: 0.41889998, z: 0.41889995} + m_Children: + - {fileID: 7430253517594625968} + m_Father: {fileID: 7430253517585478437} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -23.986002, y: -28.650002, z: 14.3880005} +--- !u!33 &7430253518935506118 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518935506120} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7430253518935506117 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518935506120} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eaad04b0e0dec42229c9cb00a981d7ac, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!54 &7430253518935506116 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518935506120} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!153 &7430253518935506123 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518935506120} + m_ConnectedBody: {fileID: 7430253517585478438} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 1, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0.289, y: 0.04000008, z: 0.648} + serializedVersion: 2 + m_SecondaryAxis: {x: 0, y: 1, z: 0} + m_XMotion: 0 + m_YMotion: 0 + m_ZMotion: 0 + m_AngularXMotion: 2 + m_AngularYMotion: 2 + m_AngularZMotion: 2 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 1 + m_AngularXDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 15 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 1 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!135 &7430253518935506122 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7430253518935506120} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.3 + m_Center: {x: 0, y: 0.00000023841858, z: -0.0000038146973} +--- !u!1 &7548890140503101028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3480290756406204138} + - component: {fileID: 8992089658186223816} + - component: {fileID: 6730372162678760495} + m_Layer: 0 + m_Name: MeshBodySeg0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3480290756406204138 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7548890140503101028} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.7351969, y: 1, z: 0.7351975} + m_Children: + - {fileID: 7430253518692004126} + m_Father: {fileID: 7430253517585478437} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &8992089658186223816 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7548890140503101028} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6730372162678760495 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7548890140503101028} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1001 &7922346880768243569 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 7430253518223459951} + m_Modifications: + - target: {fileID: 2591864625898824423, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2591864627249999519, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + propertyPath: m_Name + value: OrientationCube + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 72f745913c5a34df5aaadd5c1f0024cb, type: 3} +--- !u!4 &5623293504353442273 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2591864627249999504, guid: 72f745913c5a34df5aaadd5c1f0024cb, + type: 3} + m_PrefabInstance: {fileID: 7922346880768243569} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8181510401464370429 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 7430253518223459951} + m_Modifications: + - target: {fileID: 2514443435243387629, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_Name + value: DirectionIndicator + objectReference: {fileID: 0} + - target: {fileID: 6026464216722085689, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: transformToFollow + value: + objectReference: {fileID: 7430253517585478437} + - target: {fileID: 6026464216722085689, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: targetToLookAt + value: + objectReference: {fileID: 0} + - target: {fileID: 6026464216722085689, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: updatedByAgent + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalPosition.y + value: -1.16 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalScale.x + value: 1.2098714 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalScale.y + value: 0.020184275 + objectReference: {fileID: 0} + - target: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + propertyPath: m_LocalScale.z + value: 1.2098714 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e568400ebedb3474fac505995f12ed4a, type: 3} +--- !u!4 &2730837554089586253 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6084207059270429360, guid: e568400ebedb3474fac505995f12ed4a, + type: 3} + m_PrefabInstance: {fileID: 8181510401464370429} + m_PrefabAsset: {fileID: 0} diff --git a/Project/Assets/ML-Agents/Examples/Worm/Prefabs/Worm.prefab.meta b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/Worm.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..a54aa8d20d09270b2da08a79c420f431385a8b9c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Prefabs/Worm.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ff2999c8614d848f8a7e55e3a6fb9282 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Scenes.meta b/Project/Assets/ML-Agents/Examples/Worm/Scenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..39a168e3a0a0cf45c6c19802b23e1f210b27ac74 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c7ad09496d164258881069caff0bd88 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Scenes/Worm.unity b/Project/Assets/ML-Agents/Examples/Worm/Scenes/Worm.unity new file mode 100644 index 0000000000000000000000000000000000000000..c659c182c1749309db4a64b4df140032953b7677 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Scenes/Worm.unity @@ -0,0 +1,1743 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4497121, g: 0.49977785, b: 0.57563704, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: 79aaf90aa86a141da808b7768b9f1403, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &23363647 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (4) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &80780181 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 146995243, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.26999664 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 1252570318, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 1327055847, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 649550835736970101, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55470216 + objectReference: {fileID: 0} + - target: {fileID: 3937818279965377055, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.81629944 + objectReference: {fileID: 0} + - target: {fileID: 4363568566733374480, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.26999664 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 4363568567769087964, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 4363568567843440885, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (6) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.26999664 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 8899833490212639786, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55600166 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!4 &146995241 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4363568566733374482, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + m_PrefabInstance: {fileID: 956508937} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &193531851 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8681629 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.31598538 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3596048 + objectReference: {fileID: 0} + - target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13088542 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3} +--- !u!1001 &236056483 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 146995243, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 1252570318, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 1327055847, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 649550835736970101, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55470216 + objectReference: {fileID: 0} + - target: {fileID: 3937818279965377055, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.81629944 + objectReference: {fileID: 0} + - target: {fileID: 4363568566733374480, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 4363568567769087964, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 4363568567843440885, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (5) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 8899833490212639786, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55600166 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &276977351 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (3) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &475542374 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.26999664 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.26999664 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (1) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.26999664 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &696745664 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 146995243, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 1252570318, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 1327055847, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 649550835736970101, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55470216 + objectReference: {fileID: 0} + - target: {fileID: 3937818279965377055, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.81629944 + objectReference: {fileID: 0} + - target: {fileID: 4363568566733374480, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 4363568567769087964, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 4363568567843440885, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (9) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 8899833490212639786, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55600166 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &956508937 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &1193517599 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 146995243, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.27000427 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 1252570318, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 1327055847, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 649550835736970101, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55470216 + objectReference: {fileID: 0} + - target: {fileID: 3937818279965377055, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.81629944 + objectReference: {fileID: 0} + - target: {fileID: 4363568566733374480, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.27000427 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 4363568567769087964, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 4363568567843440885, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (7) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.27000427 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 8899833490212639786, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55600166 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1 &1392866527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392866532} + - component: {fileID: 1392866531} + - component: {fileID: 1392866529} + - component: {fileID: 1392866533} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &1392866529 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 +--- !u!20 &1392866531 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 45.8 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1392866532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_LocalRotation: {x: 0.12771694, y: -0.6954771, z: 0.12771694, w: 0.6954771} + m_LocalPosition: {x: 12.23, y: 5.81, z: -0.14} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 20.812, y: -90.00001, z: 0} +--- !u!114 &1392866533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392866527} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec40c70d5160b47cd8deaab79e24892c, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 146995241} + smoothingTime: 0.5 +--- !u!1001 &1481808307 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3} +--- !u!1001 &1757795157 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 146995243, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 1252570318, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 1327055847, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 649550835736970101, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55470216 + objectReference: {fileID: 0} + - target: {fileID: 3937818279965377055, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: -0.81629944 + objectReference: {fileID: 0} + - target: {fileID: 4363568566733374480, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.51629674 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 4363568567769087964, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.5746974 + objectReference: {fileID: 0} + - target: {fileID: 4363568567843440885, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: 0.56600213 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.6480026 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (8) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.269989 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.z + value: 0.5979996 + objectReference: {fileID: 0} + - target: {fileID: 8899833490212639786, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.y + value: -0.55600166 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1001 &1897122097 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 973427800, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.27000427 + objectReference: {fileID: 0} + - target: {fileID: 1497020359, guid: 75720cc09f5b24833af829458ac467fa, type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 4363568567584794723, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.27000427 + objectReference: {fileID: 0} + - target: {fileID: 4363568568068754428, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 6828423456818458359, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: 0.28900146 + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_Name + value: PlatformWormDynamicTarget (2) + objectReference: {fileID: 0} + - target: {fileID: 7516351800607109742, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.x + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7519741477752072726, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8370001685442861961, guid: 75720cc09f5b24833af829458ac467fa, + type: 3} + propertyPath: m_ConnectedAnchor.x + value: -0.27000427 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 75720cc09f5b24833af829458ac467fa, type: 3} +--- !u!1 &2095421678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2095421679} + - component: {fileID: 2095421681} + - component: {fileID: 2095421680} + m_Layer: 0 + m_Name: WormSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2095421679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2095421680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3} + m_Name: + m_EditorClassIdentifier: + gravityMultiplier: 1.5 + fixedDeltaTime: 0.01333 + maximumDeltaTime: 0.15 + solverIterations: 12 + solverVelocityIterations: 12 + reuseCollisionCallbacks: 1 +--- !u!114 &2095421681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095421678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3d6f3eab3776b4fb79724ac4216dfd7b, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Scenes/Worm.unity.meta b/Project/Assets/ML-Agents/Examples/Worm/Scenes/Worm.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..bd56bccc95cb5b47fdae8245383e21cbb6f474ee --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Scenes/Worm.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d569bb9615d8480f82ec9eab5fb4cf2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Scripts.meta b/Project/Assets/ML-Agents/Examples/Worm/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..4c979003a035ccb8a2e2a15a1397636f7db2d8c2 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d40fba955e8e4bf58ad001ef520f96c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/Scripts/WormAgent.cs b/Project/Assets/ML-Agents/Examples/Worm/Scripts/WormAgent.cs new file mode 100644 index 0000000000000000000000000000000000000000..6a5c2044bca5215d3379b3e7f8d4772e8fcc38e9 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Scripts/WormAgent.cs @@ -0,0 +1,211 @@ +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgentsExamples; +using Unity.MLAgents.Sensors; + +[RequireComponent(typeof(JointDriveController))] // Required to set joint forces +public class WormAgent : Agent +{ + const float m_MaxWalkingSpeed = 10; //The max walking speed + + [Header("Target Prefabs")] public Transform TargetPrefab; //Target prefab to use in Dynamic envs + private Transform m_Target; //Target the agent will walk towards during training. + + [Header("Body Parts")] public Transform bodySegment0; + public Transform bodySegment1; + public Transform bodySegment2; + public Transform bodySegment3; + + //This will be used as a stabilized model space reference point for observations + //Because ragdolls can move erratically during training, using a stabilized reference transform improves learning + OrientationCubeController m_OrientationCube; + + //The indicator graphic gameobject that points towards the target + DirectionIndicator m_DirectionIndicator; + JointDriveController m_JdController; + + private Vector3 m_StartingPos; //starting position of the agent + + public override void Initialize() + { + SpawnTarget(TargetPrefab, transform.position); //spawn target + + m_StartingPos = bodySegment0.position; + m_OrientationCube = GetComponentInChildren(); + m_DirectionIndicator = GetComponentInChildren(); + m_JdController = GetComponent(); + + UpdateOrientationObjects(); + + //Setup each body part + m_JdController.SetupBodyPart(bodySegment0); + m_JdController.SetupBodyPart(bodySegment1); + m_JdController.SetupBodyPart(bodySegment2); + m_JdController.SetupBodyPart(bodySegment3); + } + + + /// + /// Spawns a target prefab at pos + /// + /// + /// + void SpawnTarget(Transform prefab, Vector3 pos) + { + m_Target = Instantiate(prefab, pos, Quaternion.identity, transform.parent); + } + + /// + /// Loop over body parts and reset them to initial conditions. + /// + public override void OnEpisodeBegin() + { + foreach (var bodyPart in m_JdController.bodyPartsList) + { + bodyPart.Reset(bodyPart); + } + + //Random start rotation to help generalize + bodySegment0.rotation = Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0); + + UpdateOrientationObjects(); + } + + /// + /// Add relevant information on each body part to observations. + /// + public void CollectObservationBodyPart(BodyPart bp, VectorSensor sensor) + { + //GROUND CHECK + sensor.AddObservation(bp.groundContact.touchingGround ? 1 : 0); // Whether the bp touching the ground + + //Get velocities in the context of our orientation cube's space + //Note: You can get these velocities in world space as well but it may not train as well. + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(bp.rb.velocity)); + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(bp.rb.angularVelocity)); + + + if (bp.rb.transform != bodySegment0) + { + //Get position relative to hips in the context of our orientation cube's space + sensor.AddObservation( + m_OrientationCube.transform.InverseTransformDirection(bp.rb.position - bodySegment0.position)); + sensor.AddObservation(bp.rb.transform.localRotation); + } + + if (bp.joint) + sensor.AddObservation(bp.currentStrength / m_JdController.maxJointForceLimit); + } + + public override void CollectObservations(VectorSensor sensor) + { + RaycastHit hit; + float maxDist = 10; + if (Physics.Raycast(bodySegment0.position, Vector3.down, out hit, maxDist)) + { + sensor.AddObservation(hit.distance / maxDist); + } + else + sensor.AddObservation(1); + + var cubeForward = m_OrientationCube.transform.forward; + var velGoal = cubeForward * m_MaxWalkingSpeed; + sensor.AddObservation(m_OrientationCube.transform.InverseTransformDirection(velGoal)); + sensor.AddObservation(Quaternion.Angle(m_OrientationCube.transform.rotation, + m_JdController.bodyPartsDict[bodySegment0].rb.rotation) / 180); + sensor.AddObservation(Quaternion.FromToRotation(bodySegment0.forward, cubeForward)); + + //Add pos of target relative to orientation cube + sensor.AddObservation(m_OrientationCube.transform.InverseTransformPoint(m_Target.transform.position)); + + foreach (var bodyPart in m_JdController.bodyPartsList) + { + CollectObservationBodyPart(bodyPart, sensor); + } + } + + /// + /// Agent touched the target + /// + public void TouchedTarget() + { + AddReward(1f); + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + { + // The dictionary with all the body parts in it are in the jdController + var bpDict = m_JdController.bodyPartsDict; + + var i = -1; + var continuousActions = actionBuffers.ContinuousActions; + // Pick a new target joint rotation + bpDict[bodySegment0].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[bodySegment1].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + bpDict[bodySegment2].SetJointTargetRotation(continuousActions[++i], continuousActions[++i], 0); + + // Update joint strength + bpDict[bodySegment0].SetJointStrength(continuousActions[++i]); + bpDict[bodySegment1].SetJointStrength(continuousActions[++i]); + bpDict[bodySegment2].SetJointStrength(continuousActions[++i]); + + //Reset if Worm fell through floor; + if (bodySegment0.position.y < m_StartingPos.y - 2) + { + EndEpisode(); + } + } + + void FixedUpdate() + { + UpdateOrientationObjects(); + + var velReward = + GetMatchingVelocityReward(m_OrientationCube.transform.forward * m_MaxWalkingSpeed, + m_JdController.bodyPartsDict[bodySegment0].rb.velocity); + + //Angle of the rotation delta between cube and body. + //This will range from (0, 180) + var rotAngle = Quaternion.Angle(m_OrientationCube.transform.rotation, + m_JdController.bodyPartsDict[bodySegment0].rb.rotation); + + //The reward for facing the target + var facingRew = 0f; + //If we are within 30 degrees of facing the target + if (rotAngle < 30) + { + //Set normalized facingReward + //Facing the target perfectly yields a reward of 1 + facingRew = 1 - (rotAngle / 180); + } + + //Add the product of these two rewards + AddReward(velReward * facingRew); + } + + /// + /// Normalized value of the difference in actual speed vs goal walking speed. + /// + public float GetMatchingVelocityReward(Vector3 velocityGoal, Vector3 actualVelocity) + { + //distance between our actual velocity and goal velocity + var velDeltaMagnitude = Mathf.Clamp(Vector3.Distance(actualVelocity, velocityGoal), 0, m_MaxWalkingSpeed); + + //return the value on a declining sigmoid shaped curve that decays from 1 to 0 + //This reward will approach 1 if it matches perfectly and approach zero as it deviates + return Mathf.Pow(1 - Mathf.Pow(velDeltaMagnitude / m_MaxWalkingSpeed, 2), 2); + } + + /// + /// Update OrientationCube and DirectionIndicator + /// + void UpdateOrientationObjects() + { + m_OrientationCube.UpdateOrientation(bodySegment0, m_Target); + if (m_DirectionIndicator) + { + m_DirectionIndicator.MatchOrientation(m_OrientationCube.transform); + } + } +} diff --git a/Project/Assets/ML-Agents/Examples/Worm/Scripts/WormAgent.cs.meta b/Project/Assets/ML-Agents/Examples/Worm/Scripts/WormAgent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a013f4687746be64d5240a8a9f09f574a867ae34 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/Scripts/WormAgent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 292fce25fb4b541f4b007a7b92c5923c +timeCreated: 1525902546 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/TFModels.meta b/Project/Assets/ML-Agents/Examples/Worm/TFModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..18b443d6fbc49625bf235e08ebdefd3ea069471c --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/TFModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 932195cd1c2b34430b8f17d187b97a38 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn b/Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn new file mode 100644 index 0000000000000000000000000000000000000000..100c80202a559adf9d95dfbca70eda9a7d611844 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40ad4ac48dd0dd2e9204e6b8a2446ba56fb4195315aa05c95152b19be518f950 +size 2260209 diff --git a/Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn.meta b/Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..9acdd531c2e94bf52560d9c4d86cc20d2f5abc1a --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/Worm/TFModels/Worm.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 117512193457f4b35994eedc14532276 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/TestScenes.meta b/Project/Assets/ML-Agents/TestScenes.meta new file mode 100644 index 0000000000000000000000000000000000000000..de615fc8ff064372758ad709e66e2b20f5def464 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73f290de2bb5d4009a3831255f1f5d0f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid.meta new file mode 100644 index 0000000000000000000000000000000000000000..8bc76ec209ea96010c4f1f346d95af49395ecbcc --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b97601ee748f74c10ae084cdea824aa9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity b/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity new file mode 100644 index 0000000000000000000000000000000000000000..0c0ab480f9240362ec15d88911e976b9d84cc1ad --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity @@ -0,0 +1,737 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &512612610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 512612611} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &512612611 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512612610} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1242785455} + - {fileID: 577791992} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &577791991 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 577791992} + - component: {fileID: 577791995} + - component: {fileID: 577791994} + - component: {fileID: 577791993} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: wall + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &577791992 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577791991} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.67, y: 0, z: 0.79} + m_LocalScale: {x: 1, y: 1, z: 11.002} + m_Children: [] + m_Father: {fileID: 512612611} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &577791993 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577791991} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &577791994 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577791991} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &577791995 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577791991} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1242785454 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242785455} + - component: {fileID: 1242785458} + - component: {fileID: 1242785457} + - component: {fileID: 1242785456} + m_Layer: 0 + m_Name: Cube + m_TagString: goal + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1242785455 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242785454} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 3.31} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 512612611} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1242785456 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242785454} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1242785457 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242785454} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1242785458 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242785454} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1362333146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1362333151} + - component: {fileID: 1362333150} + - component: {fileID: 1362333149} + - component: {fileID: 1362333148} + - component: {fileID: 1362333147} + m_Layer: 0 + m_Name: GridAgentUnCompressed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1362333147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362333146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 1 + TakeActionsBetweenDecisions: 1 +--- !u!114 &1362333148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362333146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 801669c0cdece6b40b2e741ad0b119ac, type: 3} + m_Name: + m_EditorClassIdentifier: + Name: GridSensor + CellScaleX: 1 + CellScaleZ: 1 + GridNumSideX: 16 + GridNumSideZ: 16 + CellScaleY: 0.01 + RotateToAgent: 0 + ChannelDepth: 04000000 + DetectableObjects: + - goal + - wall + - Player + ObserveMask: + serializedVersion: 2 + m_Bits: 307 + gridDepthType: 1 + rootReference: {fileID: 1362333146} + ObservationPerCell: 4 + NumberOfObservations: 1024 + ChannelOffsets: 00000000 + DebugColors: + - {r: 1, g: 0.0141509175, b: 0.0141509175, a: 0} + - {r: 0, g: 0.050011635, b: 1, a: 0} + - {r: 0.12027997, g: 1, b: 0.08962262, a: 0} + GizmoYOffset: 0 + ShowGizmos: 1 + CompressionType: 0 +--- !u!114 &1362333149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362333146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88b6042bc9a5d4aa58d931eae49442e5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 +--- !u!114 &1362333150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362333146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + VectorActionSize: 01000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + m_Model: {fileID: 0} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: TestGrid + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!4 &1362333151 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362333146} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1377910015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1377910019} + - component: {fileID: 1377910018} + - component: {fileID: 1377910017} + - component: {fileID: 1377910016} + - component: {fileID: 1377910020} + m_Layer: 0 + m_Name: GridAgentCompressed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1377910016 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377910015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 801669c0cdece6b40b2e741ad0b119ac, type: 3} + m_Name: + m_EditorClassIdentifier: + Name: GridSensor + CellScaleX: 1 + CellScaleZ: 1 + GridNumSideX: 16 + GridNumSideZ: 16 + CellScaleY: 0.01 + RotateToAgent: 0 + ChannelDepth: 04000000 + DetectableObjects: + - goal + - wall + - Player + ObserveMask: + serializedVersion: 2 + m_Bits: 307 + gridDepthType: 1 + rootReference: {fileID: 1377910015} + ObservationPerCell: 4 + NumberOfObservations: 1024 + ChannelOffsets: 00000000 + DebugColors: + - {r: 1, g: 0.0141509175, b: 0.0141509175, a: 0} + - {r: 0, g: 0.050011635, b: 1, a: 0} + - {r: 0.12027997, g: 1, b: 0.08962262, a: 0} + GizmoYOffset: 0 + ShowGizmos: 1 + CompressionType: 1 +--- !u!114 &1377910017 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377910015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88b6042bc9a5d4aa58d931eae49442e5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 +--- !u!114 &1377910018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377910015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + VectorActionSize: 01000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + m_Model: {fileID: 0} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: TestGrid + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!4 &1377910019 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377910015} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1377910020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377910015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 1 + TakeActionsBetweenDecisions: 1 +--- !u!1 &1617557642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1617557644} + - component: {fileID: 1617557643} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1617557643 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617557642} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1617557644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617557642} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1634604112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1634604115} + - component: {fileID: 1634604114} + - component: {fileID: 1634604113} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1634604113 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634604112} + m_Enabled: 1 +--- !u!20 &1634604114 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634604112} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1634604115 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634604112} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..98ea5bd055f89e6c445cc158a5d66e9e2b812e10 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedGrid/TestGridCompressed.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6482e6ab5ed04a7abd50c44565f6250 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture.meta new file mode 100644 index 0000000000000000000000000000000000000000..9515ac9e4ba770b83f3451b29d3c57c3ca0a706b --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8c0d087917754bd297dfd8fd613b1a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity new file mode 100644 index 0000000000000000000000000000000000000000..b5f4393dd0e9ab4f4b212c5e3cbb02852450c79d --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity @@ -0,0 +1,324 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.3731193, g: 0.38073996, b: 0.3587269, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &293272827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 293272831} + - component: {fileID: 293272830} + - component: {fileID: 293272829} + - component: {fileID: 293272832} + - component: {fileID: 293272828} + m_Layer: 0 + m_Name: UncompressedObsAgent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &293272828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293272827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8eda65155b8ff4d14a3b048dae0fb21c, type: 3} + m_Name: + m_EditorClassIdentifier: + TestTexture: {fileID: 2800000, guid: eeba1f6a35c72450894cf4f4cb516004, type: 3} + ObservationStacks: 4 + CompressionType: 0 +--- !u!114 &293272829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293272827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88b6042bc9a5d4aa58d931eae49442e5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 +--- !u!114 &293272830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293272827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + VectorActionSize: 01000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + m_Model: {fileID: 0} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: TestCompressedObs + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!4 &293272831 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293272827} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &293272832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293272827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 1 + TakeActionsBetweenDecisions: 1 +--- !u!1 &2059361216 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059361220} + - component: {fileID: 2059361219} + - component: {fileID: 2059361218} + - component: {fileID: 2059361221} + - component: {fileID: 2059361217} + m_Layer: 0 + m_Name: CompressedObsAgent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2059361217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059361216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8eda65155b8ff4d14a3b048dae0fb21c, type: 3} + m_Name: + m_EditorClassIdentifier: + TestTexture: {fileID: 2800000, guid: eeba1f6a35c72450894cf4f4cb516004, type: 3} + ObservationStacks: 4 + CompressionType: 1 +--- !u!114 &2059361218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059361216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88b6042bc9a5d4aa58d931eae49442e5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 +--- !u!114 &2059361219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059361216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 0 + NumStackedVectorObservations: 1 + VectorActionSize: 01000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + m_Model: {fileID: 0} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: TestCompressedObs + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!4 &2059361220 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059361216} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2059361221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059361216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 1 + TakeActionsBetweenDecisions: 1 diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..950b984dc6c7940139ae45f0eca2ac4e2b1698d5 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureCompressed.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bf09dea4d49cd471bb220b4dd4e0711a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensor.cs b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..b4702b15d16e96c349e16e1162026c3baa5da2b2 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensor.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using Unity.MLAgents.Sensors; + +public class TestTextureSensor : ISensor +{ + Texture2D m_Texture; + string m_Name; + private ObservationSpec m_ObservationSpec; + SensorCompressionType m_CompressionType; + + /// + /// The compression type used by the sensor. + /// + public SensorCompressionType CompressionType + { + get { return m_CompressionType; } + set { m_CompressionType = value; } + } + + + public TestTextureSensor( + Texture2D texture, string name, SensorCompressionType compressionType) + { + m_Texture = texture; + var width = texture.width; + var height = texture.height; + m_Name = name; + m_ObservationSpec = ObservationSpec.Visual(height, width, 3); + m_CompressionType = compressionType; + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public byte[] GetCompressedObservation() + { + var compressed = m_Texture.EncodeToPNG(); + return compressed; + } + + /// + public int Write(ObservationWriter writer) + { + var numWritten = writer.WriteTexture(m_Texture, false); + return numWritten; + } + + /// + public void Update() { } + + /// + public void Reset() { } + + /// + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } +} + diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensor.cs.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4791f24e210e598254a9d83974e2fbbe05a4b242 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f521fc880d878456081dfe81a741be8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensorComponent.cs b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..4a126575050e2668c39ed25ac48398aad22bf934 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensorComponent.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using Unity.MLAgents.Sensors; + + +public class TestTextureSensorComponent : SensorComponent +{ + TestTextureSensor m_Sensor; + + public Texture2D TestTexture; + + string m_SensorName = "TextureSensor"; + + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + + + public int ObservationStacks = 4; + + public SensorCompressionType CompressionType = SensorCompressionType.PNG; + + + /// + public override ISensor[] CreateSensors() + { + m_Sensor = new TestTextureSensor(TestTexture, SensorName, CompressionType); + if (ObservationStacks != 1) + { + return new ISensor[] { new StackingSensor(m_Sensor, ObservationStacks) }; + } + return new ISensor[] { m_Sensor }; + } +} + diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensorComponent.cs.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..417d8dad5838cfb0437f3bb4f835ff10c02ecce2 --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/TestTextureSensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8eda65155b8ff4d14a3b048dae0fb21c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/Texture.png b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/Texture.png new file mode 100644 index 0000000000000000000000000000000000000000..6805a8db08cafee8fab846b04eb8155363d2d010 Binary files /dev/null and b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/Texture.png differ diff --git a/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/Texture.png.meta b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/Texture.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1998b0aa95500c5a06009b71368b31756092dadf --- /dev/null +++ b/Project/Assets/ML-Agents/TestScenes/TestCompressedTexture/Texture.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: eeba1f6a35c72450894cf4f4cb516004 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Assets/csc.rsp b/Project/Assets/csc.rsp new file mode 100644 index 0000000000000000000000000000000000000000..ddc521a6358b6a0a557220b377180d0768776280 --- /dev/null +++ b/Project/Assets/csc.rsp @@ -0,0 +1,2 @@ +-warnaserror+ +-warnaserror-:618 diff --git a/Project/Assets/csc.rsp.meta b/Project/Assets/csc.rsp.meta new file mode 100644 index 0000000000000000000000000000000000000000..48393cd818b5e4c7e11f93ff18342867372b2640 --- /dev/null +++ b/Project/Assets/csc.rsp.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c919ab2efb86f4001a0176ec5a1a3329 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project/Packages/manifest.json b/Project/Packages/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..c2bdc9be6bb5c211802f228c45033c78d3907095 --- /dev/null +++ b/Project/Packages/manifest.json @@ -0,0 +1,27 @@ +{ + "dependencies": { + "com.unity.ai.navigation": "1.1.4", + "com.unity.formats.fbx": "4.2.1", + "com.unity.ide.rider": "3.0.24", + "com.unity.inputsystem": "1.6.1", + "com.unity.ml-agents": "file:../../com.unity.ml-agents", + "com.unity.ml-agents.extensions": "file:../../com.unity.ml-agents.extensions", + "com.unity.nuget.newtonsoft-json": "3.2.1", + "com.unity.recorder": "4.0.1", + "com.unity.test-framework": "1.1.33", + "com.unity.textmeshpro": "3.0.6", + "com.unity.toolchain.macos-x86_64-linux-x86_64": "2.0.4", + "com.unity.ugui": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0" + }, + "testables": [ + "com.unity.ml-agents", + "com.unity.ml-agents.extensions", + "com.unity.inputsystem" + ] +} diff --git a/Project/Packages/packages-lock.json b/Project/Packages/packages-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..ebeac26fb5bb0545493bfe749273a493ec67fd7c --- /dev/null +++ b/Project/Packages/packages-lock.json @@ -0,0 +1,278 @@ +{ + "dependencies": { + "com.autodesk.fbx": { + "version": "4.2.1", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ai.navigation": { + "version": "1.1.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.ai": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.barracuda": { + "version": "3.0.0", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.6.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.burst": { + "version": "1.8.7", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.formats.fbx": { + "version": "4.2.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.timeline": "1.7.1", + "com.autodesk.fbx": "4.2.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.rider": { + "version": "3.0.24", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.inputsystem": { + "version": "1.6.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.mathematics": { + "version": "1.2.6", + "depth": 3, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ml-agents": { + "version": "file:../../com.unity.ml-agents", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.barracuda": "3.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.ml-agents.extensions": { + "version": "file:../../com.unity.ml-agents.extensions", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.ml-agents": "2.3.0-exp.4", + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.recorder": { + "version": "4.0.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.timeline": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.sysroot": { + "version": "2.0.5", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.sysroot.linux-x86_64": { + "version": "2.0.4", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.sysroot": "2.0.5" + }, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.textmeshpro": { + "version": "3.0.6", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.7.4", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.toolchain.macos-x86_64-linux-x86_64": { + "version": "2.0.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.sysroot": "2.0.5", + "com.unity.sysroot.linux-x86_64": "2.0.4" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 2, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 2, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 2, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 2, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + } + } +} diff --git a/Project/Project.sln.DotSettings b/Project/Project.sln.DotSettings new file mode 100644 index 0000000000000000000000000000000000000000..43dea280cb174a2a201c67d957eaf4eeae30faa5 --- /dev/null +++ b/Project/Project.sln.DotSettings @@ -0,0 +1,3 @@ + + ML + True diff --git a/Project/ProjectSettings/AudioManager.asset b/Project/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..27287fec5f4e4b712cbdd5b3a6383cbfd900b940 --- /dev/null +++ b/Project/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 0 diff --git a/Project/ProjectSettings/ClusterInputManager.asset b/Project/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..e7886b266a005f4d9d80f2fef8d1649dcfd3ed2b --- /dev/null +++ b/Project/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/Project/ProjectSettings/DynamicsManager.asset b/Project/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..e5424434e212f2196bebb52ca79ff5e7eccdf1cf --- /dev/null +++ b/Project/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 12 + m_DefaultSolverVelocityIterations: 12 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebffffffddffffffeffffffff5fffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 1 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 1 + m_EnableUnifiedHeightmaps: 1 diff --git a/Project/ProjectSettings/EditorBuildSettings.asset b/Project/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..16fe92e58328e0a7c155d9a8e12b9f60c13513b9 --- /dev/null +++ b/Project/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/ML-Agents/Examples/Walker/Scenes/Walker.unity + guid: 2b839ee93e7a4467f9f8b4803c4a239b + m_configObjects: {} diff --git a/Project/ProjectSettings/EditorSettings.asset b/Project/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..ba10c44a3b7edfaac7025603482a846219b96a04 --- /dev/null +++ b/Project/ProjectSettings/EditorSettings.asset @@ -0,0 +1,44 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 1 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_Bc7TextureCompressor: 0 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_CachingShaderPreprocessor: 1 + m_PrefabModeAllowAutoSave: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_GameObjectNamingDigits: 1 + m_GameObjectNamingScheme: 0 + m_AssetNamingUsesSpace: 1 + m_UseLegacyProbeSampleCount: 1 + m_SerializeInlineMappingsOnOneLine: 0 + m_DisableCookiesInLightmapper: 1 + m_AssetPipelineMode: 1 + m_RefreshImportMode: 0 + m_CacheServerMode: 0 + m_CacheServerEndpoint: + m_CacheServerNamespacePrefix: default + m_CacheServerEnableDownload: 1 + m_CacheServerEnableUpload: 1 + m_CacheServerEnableAuth: 0 + m_CacheServerEnableTls: 0 + m_CacheServerValidationMode: 2 + m_CacheServerDownloadBatchSize: 128 diff --git a/Project/ProjectSettings/GraphicsSettings.asset b/Project/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..42b48b6d21a9b814d9984b68038c2b508a4d7ea0 --- /dev/null +++ b/Project/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16002, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 1 diff --git a/Project/ProjectSettings/InputManager.asset b/Project/ProjectSettings/InputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..17c8f538e2152c0a0310b4870979eeecece2153c --- /dev/null +++ b/Project/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/Project/ProjectSettings/NavMeshAreas.asset b/Project/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000000000000000000000000000000000000..3b0b7c3d183abdd300112f56965916ef11667f54 --- /dev/null +++ b/Project/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/Project/ProjectSettings/Physics2DSettings.asset b/Project/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..6c5cf8a004ac48f27cb36f7cdea139eb4d3e812f --- /dev/null +++ b/Project/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 0 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/Project/ProjectSettings/PresetManager.asset b/Project/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..636a595b32ba897972008f0cfacbdf52bf06225e --- /dev/null +++ b/Project/ProjectSettings/PresetManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + m_DefaultList: [] diff --git a/Project/ProjectSettings/ProjectSettings.asset b/Project/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..0685899de93a8b2d145c64b7d8c07a77a305a2f7 --- /dev/null +++ b/Project/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,694 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 23 + productGUID: cd7e9a0e0d1d14312ad9e89757262f3b + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: Unity Technologies + productName: UnityEnvironment + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 0 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 80 + defaultScreenHeight: 80 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 0 + androidUseSwappy: 0 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 1 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 1 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 0 + allowFullscreenSwitch: 1 + fullscreenMode: 3 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 1048576 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 0 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 1.0 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 0 + xboxOneEnable7thCore: 0 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + useHDRDisplay: 0 + D3DHDRBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: + Android: com.Company.ProductName + Standalone: com.Unity-Technologies.UnityEnvironment + buildNumber: + Standalone: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: nimt-trampolines=1024 + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: 214 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 11.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 11.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 1 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: 00000000000000000000000000000000 + templatePackageId: + templateDefaultScene: + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 5 + AndroidTargetDevices: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyWithR8: 0 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: [] + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 0 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 0 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 0 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 0 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: CloudRendering + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: MacStandaloneSupport + m_APIs: 10000000 + m_Automatic: 0 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AndroidPlayer + m_APIs: 0b00000008000000 + m_Automatic: 0 + m_BuildTargetVRSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Standalone + m_EncodingQuality: 1 + - m_BuildTarget: XboxOne + m_EncodingQuality: 1 + - m_BuildTarget: PS4 + m_EncodingQuality: 1 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetNormalMapEncoding: [] + m_BuildTargetDefaultTextureCompressionFormat: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchUseGOLDLinker: 0 + switchLTOSetting: 0 + switchApplicationID: 0x0005000C10000001 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: 0x0005000C10000001 + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: 4 + switchCardSpecClock: 25 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: 0x0005000C10000001 + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 3 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + switchUseNewStyleFilepaths: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 1 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 120 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: uGXbEWRK5RhRXdCdG5nG5azdNMK66MuC + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 0 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + scriptingDefineSymbols: + : UNITY_POST_PROCESSING_STACK_V2 + Android: UNITY_POST_PROCESSING_STACK_V2 + Nintendo Switch: UNITY_POST_PROCESSING_STACK_V2 + PS4: UNITY_POST_PROCESSING_STACK_V2 + Standalone: + WebGL: UNITY_POST_PROCESSING_STACK_V2 + Windows Store Apps: UNITY_POST_PROCESSING_STACK_V2 + XboxOne: UNITY_POST_PROCESSING_STACK_V2 + tvOS: UNITY_POST_PROCESSING_STACK_V2 + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + enableRoslynAnalyzers: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 0 + assemblyVersionValidation: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: + Standalone: 3 + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: UnityEnvironment + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: UnityEnvironment + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 0 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + apiCompatibilityLevel: 3 + activeInputHandler: 2 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 1 + playerDataPath: + forceSRGBBlit: 1 + virtualTexturingSupportEnabled: 0 diff --git a/Project/ProjectSettings/ProjectVersion.txt b/Project/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000000000000000000000000000000000000..e7e2f19822a9ff58f914c5bef1f3c55c004b1c41 --- /dev/null +++ b/Project/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2022.3.4f1 +m_EditorVersionWithRevision: 2022.3.4f1 (35713cd46cd7) diff --git a/Project/ProjectSettings/QualitySettings.asset b/Project/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..92c2a3ceba5579b90014f3c5e2911ffa57ef102f --- /dev/null +++ b/Project/ProjectSettings/QualitySettings.asset @@ -0,0 +1,229 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + Nintendo Switch: 5 + PS4: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/Project/ProjectSettings/TagManager.asset b/Project/ProjectSettings/TagManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..8f00405a429cefb5b1989abf0efc1617851565da --- /dev/null +++ b/Project/ProjectSettings/TagManager.asset @@ -0,0 +1,69 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: + - agent + - iWall + - wall + - pit + - frozenAgent + - ball + - blueGoal + - blueAgent + - goal + - ground + - block + - switchOff + - pyramid + - switchOn + - stone + - target + - badFood + - food + - walkableSurface + - symbol_X + - symbol_O + - symbol_X_Goal + - symbol_O_Goal + - purpleAgent + - purpleGoal + - tile + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - invisible + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/Project/ProjectSettings/TimeManager.asset b/Project/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..558a017e1f50b2db73414a1abad3c033922774f8 --- /dev/null +++ b/Project/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/Project/ProjectSettings/UnityConnectSettings.asset b/Project/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..6125b308af4d7e7649a33ce7facf541ff7e3ec47 --- /dev/null +++ b/Project/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/Project/ProjectSettings/VFXManager.asset b/Project/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..6e0eaca40d51a23fde75fc0183b34888ea942945 --- /dev/null +++ b/Project/ProjectSettings/VFXManager.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/Project/Recordings/movie.mp4 b/Project/Recordings/movie.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..c27107037ca4e90d0deea9217e4c245478584657 --- /dev/null +++ b/Project/Recordings/movie.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05459fb5a137dd7869315d609708f7f4e0944a088ab3698206533e7c076573d3 +size 8469465 diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b86381970511a14993cd80982a46bdd099e37597 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +--- +library_name: ml-agents +tags: +- Pyramids +- deep-reinforcement-learning +- reinforcement-learning +- ML-Agents-Pyramids +--- + + # **ppo** Agent playing **Pyramids** + This is a trained model of a **ppo** agent playing **Pyramids** + using the [Unity ML-Agents Library](https://github.com/Unity-Technologies/ml-agents). + + ## Usage (with ML-Agents) + The Documentation: https://unity-technologies.github.io/ml-agents/ML-Agents-Toolkit-Documentation/ + + We wrote a complete tutorial to learn to train your first agent using ML-Agents and publish it to the Hub: + - A *short tutorial* where you teach Huggy the Dog 🶠to fetch the stick and then play with him directly in your + browser: https://huggingface.co/learn/deep-rl-course/unitbonus1/introduction + - A *longer tutorial* to understand how works ML-Agents: + https://huggingface.co/learn/deep-rl-course/unit5/introduction + + ### Resume the training + ```bash + mlagents-learn --run-id= --resume + ``` + + ### Watch your Agent play + You can watch your agent **playing directly in your browser** + + 1. If the environment is part of ML-Agents official environments, go to https://huggingface.co/unity + 2. Step 1: Find your model_id: AnnaMats/ppo-Pyramids-Training + 3. Step 2: Select your *.nn /*.onnx file + 4. Click on Watch the agent play 👀 + \ No newline at end of file diff --git a/SURVEY.md b/SURVEY.md new file mode 100644 index 0000000000000000000000000000000000000000..1eb6bb1b7b2994fdfd5b0696632655c61cf5e0ab --- /dev/null +++ b/SURVEY.md @@ -0,0 +1,7 @@ +# Unity ML-Agents Toolkit Survey + +Your opinion matters a great deal to us. Only by hearing your thoughts on the +Unity ML-Agents Toolkit can we continue to improve and grow. Please take a few +minutes to let us know about it. Please email us at [ml-agents@unity3d.com](mailto:ml-agents@unity3d.com). + + diff --git a/colab/Colab_UnityEnvironment_1_Run.ipynb b/colab/Colab_UnityEnvironment_1_Run.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a1104c3587389a00f00b3b6cce57bdd634a9a40a --- /dev/null +++ b/colab/Colab_UnityEnvironment_1_Run.ipynb @@ -0,0 +1,503 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Colab-UnityEnvironment-1-Run.ipynb", + "private_outputs": true, + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "source": [], + "metadata": { + "collapsed": false + } + } + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "pbVXrmEsLXDt" + }, + "source": [ + "# ML-Agents Open a UnityEnvironment\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WNKTwHU3d2-l" + }, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "htb-p1hSNX7D" + }, + "source": [ + "#@title Install Rendering Dependencies { display-mode: \"form\" }\n", + "#@markdown (You only need to run this code when using Colab's hosted runtime)\n", + "\n", + "import os\n", + "from IPython.display import HTML, display\n", + "\n", + "def progress(value, max=100):\n", + " return HTML(\"\"\"\n", + " \n", + " {value}\n", + " \n", + " \"\"\".format(value=value, max=max))\n", + "\n", + "pro_bar = display(progress(0, 100), display_id=True)\n", + "\n", + "try:\n", + " import google.colab\n", + " INSTALL_XVFB = True\n", + "except ImportError:\n", + " INSTALL_XVFB = 'COLAB_ALWAYS_INSTALL_XVFB' in os.environ\n", + "\n", + "if INSTALL_XVFB:\n", + " with open('frame-buffer', 'w') as writefile:\n", + " writefile.write(\"\"\"#taken from https://gist.github.com/jterrace/2911875\n", + "XVFB=/usr/bin/Xvfb\n", + "XVFBARGS=\":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset\"\n", + "PIDFILE=./frame-buffer.pid\n", + "case \"$1\" in\n", + " start)\n", + " echo -n \"Starting virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS\n", + " echo \".\"\n", + " ;;\n", + " stop)\n", + " echo -n \"Stopping virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE\n", + " rm $PIDFILE\n", + " echo \".\"\n", + " ;;\n", + " restart)\n", + " $0 stop\n", + " $0 start\n", + " ;;\n", + " *)\n", + " echo \"Usage: /etc/init.d/xvfb {start|stop|restart}\"\n", + " exit 1\n", + "esac\n", + "exit 0\n", + " \"\"\")\n", + " !sudo apt-get update\n", + " pro_bar.update(progress(10, 100))\n", + " !sudo DEBIAN_FRONTEND=noninteractive apt install -y daemon wget gdebi-core build-essential libfontenc1 libfreetype6 xorg-dev xorg\n", + " pro_bar.update(progress(20, 100))\n", + " !wget http://security.ubuntu.com/ubuntu/pool/main/libx/libxfont/libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(30, 100))\n", + " !wget --output-document xvfb.deb http://security.ubuntu.com/ubuntu/pool/universe/x/xorg-server/xvfb_1.18.4-0ubuntu0.12_amd64.deb 2>&1\n", + " pro_bar.update(progress(40, 100))\n", + " !sudo dpkg -i libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(50, 100))\n", + " !sudo dpkg -i xvfb.deb 2>&1\n", + " pro_bar.update(progress(70, 100))\n", + " !rm libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb\n", + " pro_bar.update(progress(80, 100))\n", + " !rm xvfb.deb\n", + " pro_bar.update(progress(90, 100))\n", + " !bash frame-buffer start\n", + " os.environ[\"DISPLAY\"] = \":1\"\n", + "pro_bar.update(progress(100, 100))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pzj7wgapAcDs" + }, + "source": [ + "### Installing ml-agents" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "N8yfQqkbebQ5" + }, + "source": [ + "try:\n", + " import mlagents\n", + " print(\"ml-agents already installed\")\n", + "except ImportError:\n", + " !python -m pip install -q mlagents==0.30.0\n", + " print(\"Installed ml-agents\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_u74YhSmW6gD" + }, + "source": [ + "## Run the Environment" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "DpZPbRvRuLZv" + }, + "source": [ + "#@title Select Environment { display-mode: \"form\" }\n", + "env_id = \"GridWorld\" #@param ['Basic', '3DBall', '3DBallHard', 'GridWorld', 'Hallway', 'VisualHallway', 'CrawlerDynamicTarget', 'CrawlerStaticTarget', 'Bouncer', 'SoccerTwos', 'PushBlock', 'VisualPushBlock', 'WallJump', 'Tennis', 'Reacher', 'Pyramids', 'VisualPyramids', 'Walker', 'FoodCollector', 'VisualFoodCollector', 'StrikersVsGoalie', 'WormStaticTarget', 'WormDynamicTarget']\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P-r_cB2rqp5x" + }, + "source": [ + "### Start Environment from the registry" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YSf-WhxbqtLw" + }, + "source": [ + "# -----------------\n", + "# This code is used to close an env that might not have been closed before\n", + "try:\n", + " env.close()\n", + "except:\n", + " pass\n", + "# -----------------\n", + "\n", + "from mlagents_envs.registry import default_registry\n", + "\n", + "env = default_registry[env_id].make()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h1lIx3_l24OP" + }, + "source": [ + "### Reset the environment\n", + "To reset the environment, simply call `env.reset()`. This method takes no argument and returns nothing but will send a signal to the simulation to reset." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dhtl0mpeqxYi" + }, + "source": [ + "env.reset()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k1rwnVq2qyoO" + }, + "source": [ + "### Behavior Specs\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TrD0rSv92T8A" + }, + "source": [ + "#### Get the Behavior Specs from the Environment" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "a7KatdThq7OV" + }, + "source": [ + "# We will only consider the first Behavior\n", + "behavior_name = list(env.behavior_specs)[0]\n", + "print(f\"Name of the behavior : {behavior_name}\")\n", + "spec = env.behavior_specs[behavior_name]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m1L8DHADrAbe" + }, + "source": [ + "#### Get the Observation Space from the Behavior Specs" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "PqDTV5mSrJF5" + }, + "source": [ + "# Examine the number of observations per Agent\n", + "print(\"Number of observations : \", len(spec.observation_specs))\n", + "\n", + "# Is there a visual observation ?\n", + "# Visual observation have 3 dimensions: Height, Width and number of channels\n", + "vis_obs = any(len(spec.shape) == 3 for spec in spec.observation_specs)\n", + "print(\"Is there a visual observation ?\", vis_obs)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yVLN_wbG1G5-" + }, + "source": [ + "#### Get the Action Space from the Behavior Specs" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "M9zk1-az1L-G" + }, + "source": [ + "# Is the Action continuous or multi-discrete ?\n", + "if spec.action_spec.continuous_size > 0:\n", + " print(f\"There are {spec.action_spec.continuous_size} continuous actions\")\n", + "if spec.action_spec.is_discrete():\n", + " print(f\"There are {spec.action_spec.discrete_size} discrete actions\")\n", + "\n", + "\n", + "# How many actions are possible ?\n", + "#print(f\"There are {spec.action_size} action(s)\")\n", + "\n", + "# For discrete actions only : How many different options does each action has ?\n", + "if spec.action_spec.discrete_size > 0:\n", + " for action, branch_size in enumerate(spec.action_spec.discrete_branches):\n", + " print(f\"Action number {action} has {branch_size} different options\")\n", + "\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3cX07SGw22Lm" + }, + "source": [ + "### Stepping the environment" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xO5p0s0prfsQ" + }, + "source": [ + "#### Get the steps from the Environment\n", + "You can do this with the `env.get_steps(behavior_name)` method. If there are multiple behaviors in the Environment, you can call this method with each of the behavior's names.\n", + "_Note_ This will not move the simulation forward." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ePZtcHXUrjyf" + }, + "source": [ + "decision_steps, terminal_steps = env.get_steps(behavior_name)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f-Oj3ix530mx" + }, + "source": [ + "#### Set actions for each behavior\n", + "You can set the actions for the Agents of a Behavior by calling `env.set_actions()` you will need to specify the behavior name and pass a tensor of dimension 2. The first dimension of the action must be equal to the number of Agents that requested a decision during the step." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "KB-nxfbw337g" + }, + "source": [ + "env.set_actions(behavior_name, spec.action_spec.empty_action(len(decision_steps)))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MQCybRs84cmq" + }, + "source": [ + "#### Move the simulation forward\n", + "Call `env.step()` to move the simulation forward. The simulation will progress until an Agent requestes a decision or terminates." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nl3K40ZR4bh2" + }, + "source": [ + "env.step()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i9gdextn2vJy" + }, + "source": [ + "### Observations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iAMqnnddr8Xo" + }, + "source": [ + "#### Show the observations for one of the Agents\n", + "`DecisionSteps.obs` is a tuple containing all of the observations for all of the Agents with the provided Behavior name.\n", + "Each value in the tuple is an observation tensor containing the observation data for all of the agents." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OJpta61TsBiO" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "for index, obs_spec in enumerate(spec.observation_specs):\n", + " if len(obs_spec.shape) == 3:\n", + " print(\"Here is the first visual observation\")\n", + " plt.imshow(decision_steps.obs[index][0,:,:,:])\n", + " plt.show()\n", + "\n", + "for index, obs_spec in enumerate(spec.observation_specs):\n", + " if len(obs_spec.shape) == 1:\n", + " print(\"First vector observations : \", decision_steps.obs[index][0,:])" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y60u21sys8kA" + }, + "source": [ + "### Run the Environment for a few episodes" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "a2uQUsoMtIUK" + }, + "source": [ + "for episode in range(3):\n", + " env.reset()\n", + " decision_steps, terminal_steps = env.get_steps(behavior_name)\n", + " tracked_agent = -1 # -1 indicates not yet tracking\n", + " done = False # For the tracked_agent\n", + " episode_rewards = 0 # For the tracked_agent\n", + " while not done:\n", + " # Track the first agent we see if not tracking\n", + " # Note : len(decision_steps) = [number of agents that requested a decision]\n", + " if tracked_agent == -1 and len(decision_steps) >= 1:\n", + " tracked_agent = decision_steps.agent_id[0]\n", + "\n", + " # Generate an action for all agents\n", + " action = spec.action_spec.random_action(len(decision_steps))\n", + "\n", + " # Set the actions\n", + " env.set_actions(behavior_name, action)\n", + "\n", + " # Move the simulation forward\n", + " env.step()\n", + "\n", + " # Get the new simulation results\n", + " decision_steps, terminal_steps = env.get_steps(behavior_name)\n", + " if tracked_agent in decision_steps: # The agent requested a decision\n", + " episode_rewards += decision_steps[tracked_agent].reward\n", + " if tracked_agent in terminal_steps: # The agent terminated its episode\n", + " episode_rewards += terminal_steps[tracked_agent].reward\n", + " done = True\n", + " print(f\"Total rewards for episode {episode} is {episode_rewards}\")\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R-3grXNEtJPa" + }, + "source": [ + "### Close the Environment to free the port it is using" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vdWG6_SqtNtv" + }, + "source": [ + "env.close()\n", + "print(\"Closed environment\")" + ], + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/colab/Colab_UnityEnvironment_2_Train.ipynb b/colab/Colab_UnityEnvironment_2_Train.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5ad5b2b7445189a18dc1cf84158b0dc83bf7f8ff --- /dev/null +++ b/colab/Colab_UnityEnvironment_2_Train.ipynb @@ -0,0 +1,689 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Colab-UnityEnvironment-2-Train.ipynb", + "private_outputs": true, + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "pbVXrmEsLXDt" + }, + "source": [ + "# ML-Agents Q-Learning with GridWorld\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WNKTwHU3d2-l" + }, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "htb-p1hSNX7D" + }, + "source": [ + "#@title Install Rendering Dependencies { display-mode: \"form\" }\n", + "#@markdown (You only need to run this code when using Colab's hosted runtime)\n", + "\n", + "import os\n", + "from IPython.display import HTML, display\n", + "\n", + "def progress(value, max=100):\n", + " return HTML(\"\"\"\n", + " \n", + " {value}\n", + " \n", + " \"\"\".format(value=value, max=max))\n", + "\n", + "pro_bar = display(progress(0, 100), display_id=True)\n", + "\n", + "try:\n", + " import google.colab\n", + " INSTALL_XVFB = True\n", + "except ImportError:\n", + " INSTALL_XVFB = 'COLAB_ALWAYS_INSTALL_XVFB' in os.environ\n", + "\n", + "if INSTALL_XVFB:\n", + " with open('frame-buffer', 'w') as writefile:\n", + " writefile.write(\"\"\"#taken from https://gist.github.com/jterrace/2911875\n", + "XVFB=/usr/bin/Xvfb\n", + "XVFBARGS=\":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset\"\n", + "PIDFILE=./frame-buffer.pid\n", + "case \"$1\" in\n", + " start)\n", + " echo -n \"Starting virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS\n", + " echo \".\"\n", + " ;;\n", + " stop)\n", + " echo -n \"Stopping virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE\n", + " rm $PIDFILE\n", + " echo \".\"\n", + " ;;\n", + " restart)\n", + " $0 stop\n", + " $0 start\n", + " ;;\n", + " *)\n", + " echo \"Usage: /etc/init.d/xvfb {start|stop|restart}\"\n", + " exit 1\n", + "esac\n", + "exit 0\n", + " \"\"\")\n", + " !sudo apt-get update\n", + " pro_bar.update(progress(10, 100))\n", + " !sudo DEBIAN_FRONTEND=noninteractive apt install -y daemon wget gdebi-core build-essential libfontenc1 libfreetype6 xorg-dev xorg\n", + " pro_bar.update(progress(20, 100))\n", + " !wget http://security.ubuntu.com/ubuntu/pool/main/libx/libxfont/libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(30, 100))\n", + " !wget --output-document xvfb.deb http://security.ubuntu.com/ubuntu/pool/universe/x/xorg-server/xvfb_1.18.4-0ubuntu0.12_amd64.deb 2>&1\n", + " pro_bar.update(progress(40, 100))\n", + " !sudo dpkg -i libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(50, 100))\n", + " !sudo dpkg -i xvfb.deb 2>&1\n", + " pro_bar.update(progress(70, 100))\n", + " !rm libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb\n", + " pro_bar.update(progress(80, 100))\n", + " !rm xvfb.deb\n", + " pro_bar.update(progress(90, 100))\n", + " !bash frame-buffer start\n", + " os.environ[\"DISPLAY\"] = \":1\"\n", + "pro_bar.update(progress(100, 100))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pzj7wgapAcDs" + }, + "source": [ + "### Installing ml-agents" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "N8yfQqkbebQ5" + }, + "source": [ + "try:\n", + " import mlagents\n", + " print(\"ml-agents already installed\")\n", + "except ImportError:\n", + " !python -m pip install -q mlagents==0.30.0\n", + " print(\"Installed ml-agents\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jz81TWAkbuFY" + }, + "source": [ + "## Train the GridWorld Environment with Q-Learning" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "29n3dt1Zx5ty" + }, + "source": [ + "### What is the GridWorld Environment" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pZhVRfdoyPmv" + }, + "source": [ + "The [GridWorld](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Examples.md#gridworld) Environment is a simple Unity visual environment. The Agent is a blue square in a 3x3 grid that is trying to reach a green __`+`__ while avoiding a red __`x`__.\n", + "\n", + "The observation is an image obtained by a camera on top of the grid.\n", + "\n", + "The Action can be one of 5 :\n", + " - Do not move\n", + " - Move up\n", + " - Move down\n", + " - Move right\n", + " - Move left\n", + "\n", + "The Agent receives a reward of _1.0_ if it reaches the green __`+`__, a penalty of _-1.0_ if it touches the red __`x`__ and a penalty of `-0.01` at every step (to force the Agent to solve the task as fast as possible)\n", + "\n", + "__Note__ There are 9 Agents, each in their own grid, at once in the environment. This alows for faster data collection.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4Gt-ZydJyJWD" + }, + "source": [ + "### The Q-Learning Algorithm\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KA1qOgfq0Xdv" + }, + "source": [ + "In this Notebook, we will implement a very simple Q-Learning algorithm. We will use [pytorch](https://pytorch.org/) to do so.\n", + "\n", + "Below is the code to create the neural network we will use in the Notebook." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "q79rUp_Sx6A_" + }, + "source": [ + "import torch\n", + "from typing import Tuple\n", + "from math import floor\n", + "from torch.nn import Parameter\n", + "\n", + "\n", + "class VisualQNetwork(torch.nn.Module):\n", + " def __init__(\n", + " self,\n", + " input_shape: Tuple[int, int, int],\n", + " encoding_size: int,\n", + " output_size: int\n", + " ):\n", + " \"\"\"\n", + " Creates a neural network that takes as input a batch of images (3\n", + " dimensional tensors) and outputs a batch of outputs (1 dimensional\n", + " tensors)\n", + " \"\"\"\n", + " super(VisualQNetwork, self).__init__()\n", + " height = input_shape[1]\n", + " width = input_shape[2]\n", + " initial_channels = input_shape[0]\n", + " conv_1_hw = self.conv_output_shape((height, width), 8, 4)\n", + " conv_2_hw = self.conv_output_shape(conv_1_hw, 4, 2)\n", + " self.final_flat = conv_2_hw[0] * conv_2_hw[1] * 32\n", + " self.conv1 = torch.nn.Conv2d(initial_channels, 16, [8, 8], [4, 4])\n", + " self.conv2 = torch.nn.Conv2d(16, 32, [4, 4], [2, 2])\n", + " self.dense1 = torch.nn.Linear(self.final_flat, encoding_size)\n", + " self.dense2 = torch.nn.Linear(encoding_size, output_size)\n", + "\n", + " def forward(self, visual_obs: torch.tensor):\n", + " conv_1 = torch.relu(self.conv1(visual_obs))\n", + " conv_2 = torch.relu(self.conv2(conv_1))\n", + " hidden = self.dense1(conv_2.reshape([-1, self.final_flat]))\n", + " hidden = torch.relu(hidden)\n", + " hidden = self.dense2(hidden)\n", + " return hidden\n", + "\n", + " @staticmethod\n", + " def conv_output_shape(\n", + " h_w: Tuple[int, int],\n", + " kernel_size: int = 1,\n", + " stride: int = 1,\n", + " pad: int = 0,\n", + " dilation: int = 1,\n", + " ):\n", + " \"\"\"\n", + " Computes the height and width of the output of a convolution layer.\n", + " \"\"\"\n", + " h = floor(\n", + " ((h_w[0] + (2 * pad) - (dilation * (kernel_size - 1)) - 1) / stride) + 1\n", + " )\n", + " w = floor(\n", + " ((h_w[1] + (2 * pad) - (dilation * (kernel_size - 1)) - 1) / stride) + 1\n", + " )\n", + " return h, w\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EZoaEBAo2L0F" + }, + "source": [ + "We will now create a few classes to help us store the data we will use to train the Q-Learning algorithm." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "L772fe2q39DO" + }, + "source": [ + "import numpy as np\n", + "from typing import NamedTuple, List\n", + "\n", + "\n", + "class Experience(NamedTuple):\n", + " \"\"\"\n", + " An experience contains the data of one Agent transition.\n", + " - Observation\n", + " - Action\n", + " - Reward\n", + " - Done flag\n", + " - Next Observation\n", + " \"\"\"\n", + "\n", + " obs: np.ndarray\n", + " action: np.ndarray\n", + " reward: float\n", + " done: bool\n", + " next_obs: np.ndarray\n", + "\n", + "# A Trajectory is an ordered sequence of Experiences\n", + "Trajectory = List[Experience]\n", + "\n", + "# A Buffer is an unordered list of Experiences from multiple Trajectories\n", + "Buffer = List[Experience]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6HsM1d5I3_Tj" + }, + "source": [ + "Now, we can create our trainer class. The role of this trainer is to collect data from the Environment according to a Policy, and then train the Q-Network with that data." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "KkzBoRJCb18t" + }, + "source": [ + "from mlagents_envs.environment import ActionTuple, BaseEnv\n", + "from typing import Dict\n", + "import random\n", + "\n", + "\n", + "class Trainer:\n", + " @staticmethod\n", + " def generate_trajectories(\n", + " env: BaseEnv, q_net: VisualQNetwork, buffer_size: int, epsilon: float\n", + " ):\n", + " \"\"\"\n", + " Given a Unity Environment and a Q-Network, this method will generate a\n", + " buffer of Experiences obtained by running the Environment with the Policy\n", + " derived from the Q-Network.\n", + " :param BaseEnv: The UnityEnvironment used.\n", + " :param q_net: The Q-Network used to collect the data.\n", + " :param buffer_size: The minimum size of the buffer this method will return.\n", + " :param epsilon: Will add a random normal variable with standard deviation.\n", + " epsilon to the value heads of the Q-Network to encourage exploration.\n", + " :returns: a Tuple containing the created buffer and the average cumulative\n", + " the Agents obtained.\n", + " \"\"\"\n", + " # Create an empty Buffer\n", + " buffer: Buffer = []\n", + "\n", + " # Reset the environment\n", + " env.reset()\n", + " # Read and store the Behavior Name of the Environment\n", + " behavior_name = list(env.behavior_specs)[0]\n", + " # Read and store the Behavior Specs of the Environment\n", + " spec = env.behavior_specs[behavior_name]\n", + "\n", + " # Create a Mapping from AgentId to Trajectories. This will help us create\n", + " # trajectories for each Agents\n", + " dict_trajectories_from_agent: Dict[int, Trajectory] = {}\n", + " # Create a Mapping from AgentId to the last observation of the Agent\n", + " dict_last_obs_from_agent: Dict[int, np.ndarray] = {}\n", + " # Create a Mapping from AgentId to the last observation of the Agent\n", + " dict_last_action_from_agent: Dict[int, np.ndarray] = {}\n", + " # Create a Mapping from AgentId to cumulative reward (Only for reporting)\n", + " dict_cumulative_reward_from_agent: Dict[int, float] = {}\n", + " # Create a list to store the cumulative rewards obtained so far\n", + " cumulative_rewards: List[float] = []\n", + "\n", + " while len(buffer) < buffer_size: # While not enough data in the buffer\n", + " # Get the Decision Steps and Terminal Steps of the Agents\n", + " decision_steps, terminal_steps = env.get_steps(behavior_name)\n", + "\n", + " # permute the tensor to go from NHWC to NCHW\n", + " order = (0, 3, 1, 2)\n", + " decision_steps.obs = [np.transpose(obs, order) for obs in decision_steps.obs]\n", + " terminal_steps.obs = [np.transpose(obs, order) for obs in terminal_steps.obs]\n", + "\n", + " # For all Agents with a Terminal Step:\n", + " for agent_id_terminated in terminal_steps:\n", + " # Create its last experience (is last because the Agent terminated)\n", + " last_experience = Experience(\n", + " obs=dict_last_obs_from_agent[agent_id_terminated].copy(),\n", + " reward=terminal_steps[agent_id_terminated].reward,\n", + " done=not terminal_steps[agent_id_terminated].interrupted,\n", + " action=dict_last_action_from_agent[agent_id_terminated].copy(),\n", + " next_obs=terminal_steps[agent_id_terminated].obs[0],\n", + " )\n", + " # Clear its last observation and action (Since the trajectory is over)\n", + " dict_last_obs_from_agent.pop(agent_id_terminated)\n", + " dict_last_action_from_agent.pop(agent_id_terminated)\n", + " # Report the cumulative reward\n", + " cumulative_reward = (\n", + " dict_cumulative_reward_from_agent.pop(agent_id_terminated)\n", + " + terminal_steps[agent_id_terminated].reward\n", + " )\n", + " cumulative_rewards.append(cumulative_reward)\n", + " # Add the Trajectory and the last experience to the buffer\n", + " buffer.extend(dict_trajectories_from_agent.pop(agent_id_terminated))\n", + " buffer.append(last_experience)\n", + "\n", + " # For all Agents with a Decision Step:\n", + " for agent_id_decisions in decision_steps:\n", + " # If the Agent does not have a Trajectory, create an empty one\n", + " if agent_id_decisions not in dict_trajectories_from_agent:\n", + " dict_trajectories_from_agent[agent_id_decisions] = []\n", + " dict_cumulative_reward_from_agent[agent_id_decisions] = 0\n", + "\n", + " # If the Agent requesting a decision has a \"last observation\"\n", + " if agent_id_decisions in dict_last_obs_from_agent:\n", + " # Create an Experience from the last observation and the Decision Step\n", + " exp = Experience(\n", + " obs=dict_last_obs_from_agent[agent_id_decisions].copy(),\n", + " reward=decision_steps[agent_id_decisions].reward,\n", + " done=False,\n", + " action=dict_last_action_from_agent[agent_id_decisions].copy(),\n", + " next_obs=decision_steps[agent_id_decisions].obs[0],\n", + " )\n", + " # Update the Trajectory of the Agent and its cumulative reward\n", + " dict_trajectories_from_agent[agent_id_decisions].append(exp)\n", + " dict_cumulative_reward_from_agent[agent_id_decisions] += (\n", + " decision_steps[agent_id_decisions].reward\n", + " )\n", + " # Store the observation as the new \"last observation\"\n", + " dict_last_obs_from_agent[agent_id_decisions] = (\n", + " decision_steps[agent_id_decisions].obs[0]\n", + " )\n", + "\n", + " # Generate an action for all the Agents that requested a decision\n", + " # Compute the values for each action given the observation\n", + " actions_values = (\n", + " q_net(torch.from_numpy(decision_steps.obs[0])).detach().numpy()\n", + " )\n", + " # Add some noise with epsilon to the values\n", + " actions_values += epsilon * (\n", + " np.random.randn(actions_values.shape[0], actions_values.shape[1])\n", + " ).astype(np.float32)\n", + " # Pick the best action using argmax\n", + " actions = np.argmax(actions_values, axis=1)\n", + " actions.resize((len(decision_steps), 1))\n", + " # Store the action that was picked, it will be put in the trajectory later\n", + " for agent_index, agent_id in enumerate(decision_steps.agent_id):\n", + " dict_last_action_from_agent[agent_id] = actions[agent_index]\n", + "\n", + " # Set the actions in the environment\n", + " # Unity Environments expect ActionTuple instances.\n", + " action_tuple = ActionTuple()\n", + " action_tuple.add_discrete(actions)\n", + " env.set_actions(behavior_name, action_tuple)\n", + " # Perform a step in the simulation\n", + " env.step()\n", + " return buffer, np.mean(cumulative_rewards)\n", + "\n", + " @staticmethod\n", + " def update_q_net(\n", + " q_net: VisualQNetwork,\n", + " optimizer: torch.optim,\n", + " buffer: Buffer,\n", + " action_size: int\n", + " ):\n", + " \"\"\"\n", + " Performs an update of the Q-Network using the provided optimizer and buffer\n", + " \"\"\"\n", + " BATCH_SIZE = 1000\n", + " NUM_EPOCH = 3\n", + " GAMMA = 0.9\n", + " batch_size = min(len(buffer), BATCH_SIZE)\n", + " random.shuffle(buffer)\n", + " # Split the buffer into batches\n", + " batches = [\n", + " buffer[batch_size * start : batch_size * (start + 1)]\n", + " for start in range(int(len(buffer) / batch_size))\n", + " ]\n", + " for _ in range(NUM_EPOCH):\n", + " for batch in batches:\n", + " # Create the Tensors that will be fed in the network\n", + " obs = torch.from_numpy(np.stack([ex.obs for ex in batch]))\n", + " reward = torch.from_numpy(\n", + " np.array([ex.reward for ex in batch], dtype=np.float32).reshape(-1, 1)\n", + " )\n", + " done = torch.from_numpy(\n", + " np.array([ex.done for ex in batch], dtype=np.float32).reshape(-1, 1)\n", + " )\n", + " action = torch.from_numpy(np.stack([ex.action for ex in batch]))\n", + " next_obs = torch.from_numpy(np.stack([ex.next_obs for ex in batch]))\n", + "\n", + " # Use the Bellman equation to update the Q-Network\n", + " target = (\n", + " reward\n", + " + (1.0 - done)\n", + " * GAMMA\n", + " * torch.max(q_net(next_obs).detach(), dim=1, keepdim=True).values\n", + " )\n", + " mask = torch.zeros((len(batch), action_size))\n", + " mask.scatter_(1, action, 1)\n", + " prediction = torch.sum(q_net(obs) * mask, dim=1, keepdim=True)\n", + " criterion = torch.nn.MSELoss()\n", + " loss = criterion(prediction, target)\n", + "\n", + " # Perform the backpropagation\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vcU4ZMAEWCvX" + }, + "source": [ + "### Run Training" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_lIHijQfbYjh" + }, + "source": [ + "# -----------------\n", + "# This code is used to close an env that might not have been closed before\n", + "try:\n", + " env.close()\n", + "except:\n", + " pass\n", + "# -----------------\n", + "\n", + "from mlagents_envs.registry import default_registry\n", + "from mlagents_envs.environment import UnityEnvironment\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "# Create the GridWorld Environment from the registry\n", + "env = default_registry[\"GridWorld\"].make()\n", + "print(\"GridWorld environment created.\")\n", + "\n", + "num_actions = 5\n", + "\n", + "try:\n", + " # Create a new Q-Network.\n", + " qnet = VisualQNetwork((3, 64, 84), 126, num_actions)\n", + "\n", + " experiences: Buffer = []\n", + " optim = torch.optim.Adam(qnet.parameters(), lr= 0.001)\n", + "\n", + " cumulative_rewards: List[float] = []\n", + "\n", + " # The number of training steps that will be performed\n", + " NUM_TRAINING_STEPS = int(os.getenv('QLEARNING_NUM_TRAINING_STEPS', 70))\n", + " # The number of experiences to collect per training step\n", + " NUM_NEW_EXP = int(os.getenv('QLEARNING_NUM_NEW_EXP', 1000))\n", + " # The maximum size of the Buffer\n", + " BUFFER_SIZE = int(os.getenv('QLEARNING_BUFFER_SIZE', 10000))\n", + "\n", + " for n in range(NUM_TRAINING_STEPS):\n", + " new_exp,_ = Trainer.generate_trajectories(env, qnet, NUM_NEW_EXP, epsilon=0.1)\n", + " random.shuffle(experiences)\n", + " if len(experiences) > BUFFER_SIZE:\n", + " experiences = experiences[:BUFFER_SIZE]\n", + " experiences.extend(new_exp)\n", + " Trainer.update_q_net(qnet, optim, experiences, num_actions)\n", + " _, rewards = Trainer.generate_trajectories(env, qnet, 100, epsilon=0)\n", + " cumulative_rewards.append(rewards)\n", + " print(\"Training step \", n+1, \"\\treward \", rewards)\n", + "except KeyboardInterrupt:\n", + " print(\"\\nTraining interrupted, continue to next cell to save to save the model.\")\n", + "finally:\n", + " env.close()\n", + "\n", + "# Show the training graph\n", + "try:\n", + " plt.plot(range(NUM_TRAINING_STEPS), cumulative_rewards)\n", + "except ValueError:\n", + " print(\"\\nPlot failed on interrupted training.\")\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Export PyTorch Model to ONNX" + ], + "metadata": { + "id": "pFEP9JT5KuO-" + } + }, + { + "cell_type": "markdown", + "source": [ + "The following cell provides an example of some of the extra tensors a model needs to work for ML-Agents inference with Barracuda. The GridWorldColab scene is configured to work with this ONNX file.\n", + "Only policy models need to be exported for inference and they need the following additional tensors:\n", + "\n", + "* All models need version_number\n", + "* All models need memory_size\n", + "* Models with continuous outputs need continuous_action_output_shape\n", + "* Models with discrete outputs need discrete_action_output_shape and an additional mask input that matches the shape of the discrete outputs\n", + "* The mask input must be connected to the outputs or it will be pruned on export, if mask values aren't being set they will be 1, so multiplying the discrete outputs by the mask will have no effect" + ], + "metadata": { + "id": "V0V7bH4mOnUF" + } + }, + { + "cell_type": "code", + "source": [ + "class WrapperNet(torch.nn.Module):\n", + " def __init__(\n", + " self,\n", + " qnet: VisualQNetwork,\n", + " discrete_output_sizes: List[int],\n", + " ):\n", + " \"\"\"\n", + " Wraps the VisualQNetwork adding extra constants and dummy mask inputs\n", + " required by runtime inference with Barracuda.\n", + "\n", + " For environment continuous actions outputs would need to add them\n", + " similarly to how discrete action outputs work, both in the wrapper\n", + " and in the ONNX output_names / dynamic_axes.\n", + " \"\"\"\n", + " super(WrapperNet, self).__init__()\n", + " self.qnet = qnet\n", + "\n", + " # version_number\n", + " # MLAgents1_0 = 2 (not covered by this example)\n", + " # MLAgents2_0 = 3\n", + " version_number = torch.Tensor([3])\n", + " self.version_number = Parameter(version_number, requires_grad=False)\n", + "\n", + " # memory_size\n", + " # TODO: document case where memory is not zero.\n", + " memory_size = torch.Tensor([0])\n", + " self.memory_size = Parameter(memory_size, requires_grad=False)\n", + "\n", + " # discrete_action_output_shape\n", + " output_shape=torch.Tensor([discrete_output_sizes])\n", + " self.discrete_shape = Parameter(output_shape, requires_grad=False)\n", + "\n", + "\n", + " # if you have discrete actions ML-agents expects corresponding a mask\n", + " # tensor with the same shape to exist as input\n", + " def forward(self, visual_obs: torch.tensor, mask: torch.tensor):\n", + " qnet_result = self.qnet(visual_obs)\n", + " # Connect mask to keep it from getting pruned\n", + " # Mask values will be 1 if you never call SetActionMask() in\n", + " # WriteDiscreteActionMask()\n", + " qnet_result = torch.mul(qnet_result, mask)\n", + " action = torch.argmax(qnet_result, dim=1, keepdim=True)\n", + " return [action], self.discrete_shape, self.version_number, self.memory_size\n", + "\n", + "\n", + "torch.onnx.export(\n", + " WrapperNet(qnet, [num_actions]),\n", + " # A tuple with an example of the input tensors\n", + " (torch.tensor([experiences[0].obs]), torch.ones(1, num_actions)),\n", + " 'GridWorldColab.onnx',\n", + " opset_version=9,\n", + " # input_names must correspond to the WrapperNet forward parameters\n", + " # obs will be obs_0, obs_1, etc.\n", + " input_names=[\"obs_0\", \"action_masks\"],\n", + " # output_names must correspond to the return tuple of the WrapperNet\n", + " # forward function.\n", + " output_names=[\"discrete_actions\", \"discrete_action_output_shape\",\n", + " \"version_number\", \"memory_size\"],\n", + " # All inputs and outputs should have their 0th dimension be designated\n", + " # as 'batch'\n", + " dynamic_axes={'obs_0': {0: 'batch'},\n", + " 'action_masks': {0: 'batch'},\n", + " 'discrete_actions': {0: 'batch'},\n", + " 'discrete_action_output_shape': {0: 'batch'}\n", + " }\n", + " )" + ], + "metadata": { + "id": "T0zzg8fWpTYO" + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/colab/Colab_UnityEnvironment_3_SideChannel.ipynb b/colab/Colab_UnityEnvironment_3_SideChannel.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..81711d3c84af5b6a0b8604e331cf5449e5954ac4 --- /dev/null +++ b/colab/Colab_UnityEnvironment_3_SideChannel.ipynb @@ -0,0 +1,293 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Colab-UnityEnvironment-3-SideChannel.ipynb", + "private_outputs": true, + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "pbVXrmEsLXDt" + }, + "source": [ + "# ML-Agents Use SideChannels\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WNKTwHU3d2-l" + }, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "htb-p1hSNX7D" + }, + "source": [ + "#@title Install Rendering Dependencies { display-mode: \"form\" }\n", + "#@markdown (You only need to run this code when using Colab's hosted runtime)\n", + "\n", + "import os\n", + "from IPython.display import HTML, display\n", + "\n", + "def progress(value, max=100):\n", + " return HTML(\"\"\"\n", + " \n", + " {value}\n", + " \n", + " \"\"\".format(value=value, max=max))\n", + "\n", + "pro_bar = display(progress(0, 100), display_id=True)\n", + "\n", + "try:\n", + " import google.colab\n", + " INSTALL_XVFB = True\n", + "except ImportError:\n", + " INSTALL_XVFB = 'COLAB_ALWAYS_INSTALL_XVFB' in os.environ\n", + "\n", + "if INSTALL_XVFB:\n", + " with open('frame-buffer', 'w') as writefile:\n", + " writefile.write(\"\"\"#taken from https://gist.github.com/jterrace/2911875\n", + "XVFB=/usr/bin/Xvfb\n", + "XVFBARGS=\":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset\"\n", + "PIDFILE=./frame-buffer.pid\n", + "case \"$1\" in\n", + " start)\n", + " echo -n \"Starting virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS\n", + " echo \".\"\n", + " ;;\n", + " stop)\n", + " echo -n \"Stopping virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE\n", + " rm $PIDFILE\n", + " echo \".\"\n", + " ;;\n", + " restart)\n", + " $0 stop\n", + " $0 start\n", + " ;;\n", + " *)\n", + " echo \"Usage: /etc/init.d/xvfb {start|stop|restart}\"\n", + " exit 1\n", + "esac\n", + "exit 0\n", + " \"\"\")\n", + " !sudo apt-get update\n", + " pro_bar.update(progress(10, 100))\n", + " !sudo DEBIAN_FRONTEND=noninteractive apt install -y daemon wget gdebi-core build-essential libfontenc1 libfreetype6 xorg-dev xorg\n", + " pro_bar.update(progress(20, 100))\n", + " !wget http://security.ubuntu.com/ubuntu/pool/main/libx/libxfont/libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(30, 100))\n", + " !wget --output-document xvfb.deb http://security.ubuntu.com/ubuntu/pool/universe/x/xorg-server/xvfb_1.18.4-0ubuntu0.12_amd64.deb 2>&1\n", + " pro_bar.update(progress(40, 100))\n", + " !sudo dpkg -i libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(50, 100))\n", + " !sudo dpkg -i xvfb.deb 2>&1\n", + " pro_bar.update(progress(70, 100))\n", + " !rm libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb\n", + " pro_bar.update(progress(80, 100))\n", + " !rm xvfb.deb\n", + " pro_bar.update(progress(90, 100))\n", + " !bash frame-buffer start\n", + " os.environ[\"DISPLAY\"] = \":1\"\n", + "pro_bar.update(progress(100, 100))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pzj7wgapAcDs" + }, + "source": [ + "### Installing ml-agents" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "N8yfQqkbebQ5" + }, + "source": [ + "try:\n", + " import mlagents\n", + " print(\"ml-agents already installed\")\n", + "except ImportError:\n", + " !python -m pip install -q mlagents==0.30.0\n", + " print(\"Installed ml-agents\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_u74YhSmW6gD" + }, + "source": [ + "## Side Channel\n", + "\n", + "SideChannels are objects that can be passed to the constructor of a UnityEnvironment or the `make()` method of a registry entry to send non Reinforcement Learning related data.\n", + "More information available [here](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Python-API.md#communicating-additional-information-with-the-environment)\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "U4RXnhLRk7Uc" + }, + "source": [ + "### Engine Configuration SideChannel\n", + "The [Engine Configuration Side Channel](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Python-API.md#engineconfigurationchannel) is used to configure how the Unity Engine should run.\n", + "We will use the GridWorld environment to demonstrate how to use the EngineConfigurationChannel." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YSf-WhxbqtLw" + }, + "source": [ + "# -----------------\n", + "# This code is used to close an env that might not have been closed before\n", + "try:\n", + " env.close()\n", + "except:\n", + " pass\n", + "# -----------------\n", + "\n", + "from mlagents_envs.registry import default_registry\n", + "env_id = \"GridWorld\"\n", + "\n", + "# Import the EngineConfigurationChannel class\n", + "from mlagents_envs.side_channel.engine_configuration_channel import EngineConfigurationChannel\n", + "\n", + "# Create the side channel\n", + "engine_config_channel = EngineConfigurationChannel()\n", + "\n", + "# Pass the side channel to the make method\n", + "# Note, the make method takes a LIST of SideChannel as input\n", + "env = default_registry[env_id].make(side_channels = [engine_config_channel])\n", + "\n", + "# Configure the Unity Engine\n", + "engine_config_channel.set_configuration_parameters(target_frame_rate = 30)\n", + "\n", + "env.reset()\n", + "\n", + "# ...\n", + "# Perform experiment on environment\n", + "# ...\n", + "\n", + "env.close()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h1lIx3_l24OP" + }, + "source": [ + "### Environment Parameters Channel\n", + "The [Environment Parameters Side Channel](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Python-API.md#environmentparameters) is used to modify environment parameters during the simulation.\n", + "We will use the GridWorld environment to demonstrate how to use the EngineConfigurationChannel." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dhtl0mpeqxYi" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "# -----------------\n", + "# This code is used to close an env that might not have been closed before\n", + "try:\n", + " env.close()\n", + "except:\n", + " pass\n", + "# -----------------\n", + "\n", + "from mlagents_envs.registry import default_registry\n", + "env_id = \"GridWorld\"\n", + "\n", + "# Import the EngineConfigurationChannel class\n", + "from mlagents_envs.side_channel.environment_parameters_channel import EnvironmentParametersChannel\n", + "\n", + "# Create the side channel\n", + "env_parameters = EnvironmentParametersChannel()\n", + "\n", + "# Pass the side channel to the make method\n", + "# Note, the make method takes a LIST of SideChannel as input\n", + "env = default_registry[env_id].make(side_channels = [env_parameters])\n", + "\n", + "env.reset()\n", + "behavior_name = list(env.behavior_specs)[0]\n", + "\n", + "print(\"Observation without changing the environment parameters\")\n", + "decision_steps, terminal_steps = env.get_steps(behavior_name)\n", + "plt.imshow(decision_steps.obs[0][0,:,:,:])\n", + "plt.show()\n", + "\n", + "print(\"Increasing the dimensions of the grid from 5 to 7\")\n", + "env_parameters.set_float_parameter(\"gridSize\", 7)\n", + "print(\"Increasing the number of X from 1 to 5\")\n", + "env_parameters.set_float_parameter(\"numObstacles\", 5)\n", + "\n", + "# Any change to a SideChannel will only be effective after a step or reset\n", + "# In the GridWorld Environment, the grid's dimensions can only change at reset\n", + "env.reset()\n", + "\n", + "\n", + "decision_steps, terminal_steps = env.get_steps(behavior_name)\n", + "plt.imshow(decision_steps.obs[0][0,:,:,:])\n", + "plt.show()\n", + "\n", + "\n", + "\n", + "env.close()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k1rwnVq2qyoO" + }, + "source": [ + "### Creating your own Side Channels\n", + "You can send various kinds of data between a Unity Environment and Python but you will need to [create your own implementation of a Side Channel](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Custom-SideChannels.md#custom-side-channels) for advanced use cases.\n" + ] + } + ] +} diff --git a/colab/Colab_UnityEnvironment_4_SB3VectorEnv.ipynb b/colab/Colab_UnityEnvironment_4_SB3VectorEnv.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..bfd80f019708a50fb37857593a4fda20aecf5b10 --- /dev/null +++ b/colab/Colab_UnityEnvironment_4_SB3VectorEnv.ipynb @@ -0,0 +1,470 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "pbVXrmEsLXDt" + }, + "source": [ + "# ML-Agents run with Stable Baselines 3\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WNKTwHU3d2-l" + }, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "#@title Install Rendering Dependencies { display-mode: \"form\" }\n", + "#@markdown (You only need to run this code when using Colab's hosted runtime)\n", + "\n", + "import os\n", + "from IPython.display import HTML, display\n", + "\n", + "def progress(value, max=100):\n", + " return HTML(\"\"\"\n", + " \n", + " {value}\n", + " \n", + " \"\"\".format(value=value, max=max))\n", + "\n", + "pro_bar = display(progress(0, 100), display_id=True)\n", + "\n", + "try:\n", + " import google.colab\n", + " INSTALL_XVFB = True\n", + "except ImportError:\n", + " INSTALL_XVFB = 'COLAB_ALWAYS_INSTALL_XVFB' in os.environ\n", + "\n", + "if INSTALL_XVFB:\n", + " with open('frame-buffer', 'w') as writefile:\n", + " writefile.write(\"\"\"#taken from https://gist.github.com/jterrace/2911875\n", + "XVFB=/usr/bin/Xvfb\n", + "XVFBARGS=\":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset\"\n", + "PIDFILE=./frame-buffer.pid\n", + "case \"$1\" in\n", + " start)\n", + " echo -n \"Starting virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS\n", + " echo \".\"\n", + " ;;\n", + " stop)\n", + " echo -n \"Stopping virtual X frame buffer: Xvfb\"\n", + " /sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE\n", + " rm $PIDFILE\n", + " echo \".\"\n", + " ;;\n", + " restart)\n", + " $0 stop\n", + " $0 start\n", + " ;;\n", + " *)\n", + " echo \"Usage: /etc/init.d/xvfb {start|stop|restart}\"\n", + " exit 1\n", + "esac\n", + "exit 0\n", + " \"\"\")\n", + " !sudo apt-get update\n", + " pro_bar.update(progress(10, 100))\n", + " !sudo DEBIAN_FRONTEND=noninteractive apt install -y daemon wget gdebi-core build-essential libfontenc1 libfreetype6 xorg-dev xorg\n", + " pro_bar.update(progress(20, 100))\n", + " !wget http://security.ubuntu.com/ubuntu/pool/main/libx/libxfont/libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(30, 100))\n", + " !wget --output-document xvfb.deb http://security.ubuntu.com/ubuntu/pool/universe/x/xorg-server/xvfb_1.18.4-0ubuntu0.12_amd64.deb 2>&1\n", + " pro_bar.update(progress(40, 100))\n", + " !sudo dpkg -i libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb 2>&1\n", + " pro_bar.update(progress(50, 100))\n", + " !sudo dpkg -i xvfb.deb 2>&1\n", + " pro_bar.update(progress(70, 100))\n", + " !rm libxfont1_1.5.1-1ubuntu0.16.04.4_amd64.deb\n", + " pro_bar.update(progress(80, 100))\n", + " !rm xvfb.deb\n", + " pro_bar.update(progress(90, 100))\n", + " !bash frame-buffer start\n", + " os.environ[\"DISPLAY\"] = \":1\"\n", + "pro_bar.update(progress(100, 100))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pzj7wgapAcDs" + }, + "source": [ + "### Installing ml-agents" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "N8yfQqkbebQ5", + "pycharm": { + "is_executing": true + } + }, + "outputs": [], + "source": [ + "try:\n", + " import mlagents\n", + " print(\"ml-agents already installed\")\n", + "except ImportError:\n", + " !python -m pip install -q mlagents==0.30.0\n", + " print(\"Installed ml-agents\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_u74YhSmW6gD" + }, + "source": [ + "## Run the Environment" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P-r_cB2rqp5x" + }, + "source": [ + "### Import dependencies and set some high level parameters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YSf-WhxbqtLw" + }, + "outputs": [], + "source": [ + "from dataclasses import dataclass\n", + "from pathlib import Path\n", + "from typing import Callable, Any\n", + "\n", + "import gym\n", + "from gym import Env\n", + "\n", + "from stable_baselines3 import PPO\n", + "from stable_baselines3.common.vec_env import VecMonitor, VecEnv, SubprocVecEnv\n", + "from supersuit import observation_lambda_v0\n", + "\n", + "\n", + "from mlagents_envs.environment import UnityEnvironment\n", + "from mlagents_envs.envs.unity_gym_env import UnityToGymWrapper\n", + "from mlagents_envs.registry import UnityEnvRegistry, default_registry\n", + "from mlagents_envs.side_channel.engine_configuration_channel import (\n", + " EngineConfig,\n", + " EngineConfigurationChannel,\n", + ")\n", + "\n", + "NUM_ENVS = 8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Environment and Engine Configurations" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Default values from CLI (See cli_utils.py)\n", + "DEFAULT_ENGINE_CONFIG = EngineConfig(\n", + " width=84,\n", + " height=84,\n", + " quality_level=4,\n", + " time_scale=20,\n", + " target_frame_rate=-1,\n", + " capture_frame_rate=60,\n", + ")\n", + "\n", + "# Some config subset of an actual config.yaml file for MLA.\n", + "@dataclass\n", + "class LimitedConfig:\n", + " # The local path to a Unity executable or the name of an entry in the registry.\n", + " env_path_or_name: str\n", + " base_port: int\n", + " base_seed: int = 0\n", + " num_env: int = 1\n", + " engine_config: EngineConfig = DEFAULT_ENGINE_CONFIG\n", + " visual_obs: bool = False\n", + " # TODO: Decide if we should just tell users to always use MultiInputPolicy so we can simplify the user workflow.\n", + " # WARNING: Make sure to use MultiInputPolicy if you turn this on.\n", + " allow_multiple_obs: bool = False\n", + " env_registry: UnityEnvRegistry = default_registry" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unity Environment SB3 Factory" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def _unity_env_from_path_or_registry(\n", + " env: str, registry: UnityEnvRegistry, **kwargs: Any\n", + ") -> UnityEnvironment:\n", + " if Path(env).expanduser().absolute().exists():\n", + " return UnityEnvironment(file_name=env, **kwargs)\n", + " elif env in registry:\n", + " return registry.get(env).make(**kwargs)\n", + " else:\n", + " raise ValueError(f\"Environment '{env}' wasn't a local path or registry entry\")\n", + " \n", + "def make_mla_sb3_env(config: LimitedConfig, **kwargs: Any) -> VecEnv:\n", + " def handle_obs(obs, space):\n", + " if isinstance(space, gym.spaces.Tuple):\n", + " if len(space) == 1:\n", + " return obs[0]\n", + " # Turn the tuple into a dict (stable baselines can handle spaces.Dict but not spaces.Tuple).\n", + " return {str(i): v for i, v in enumerate(obs)}\n", + " return obs\n", + "\n", + " def handle_obs_space(space):\n", + " if isinstance(space, gym.spaces.Tuple):\n", + " if len(space) == 1:\n", + " return space[0]\n", + " # Turn the tuple into a dict (stable baselines can handle spaces.Dict but not spaces.Tuple).\n", + " return gym.spaces.Dict({str(i): v for i, v in enumerate(space)})\n", + " return space\n", + "\n", + " def create_env(env: str, worker_id: int) -> Callable[[], Env]:\n", + " def _f() -> Env:\n", + " engine_configuration_channel = EngineConfigurationChannel()\n", + " engine_configuration_channel.set_configuration(config.engine_config)\n", + " kwargs[\"side_channels\"] = kwargs.get(\"side_channels\", []) + [\n", + " engine_configuration_channel\n", + " ]\n", + " unity_env = _unity_env_from_path_or_registry(\n", + " env=env,\n", + " registry=config.env_registry,\n", + " worker_id=worker_id,\n", + " base_port=config.base_port,\n", + " seed=config.base_seed + worker_id,\n", + " **kwargs,\n", + " )\n", + " new_env = UnityToGymWrapper(\n", + " unity_env=unity_env,\n", + " uint8_visual=config.visual_obs,\n", + " allow_multiple_obs=config.allow_multiple_obs,\n", + " )\n", + " new_env = observation_lambda_v0(new_env, handle_obs, handle_obs_space)\n", + " return new_env\n", + "\n", + " return _f\n", + "\n", + " env_facts = [\n", + " create_env(config.env_path_or_name, worker_id=x) for x in range(config.num_env)\n", + " ]\n", + " return SubprocVecEnv(env_facts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Start Environment from the registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# -----------------\n", + "# This code is used to close an env that might not have been closed before\n", + "try:\n", + " env.close()\n", + "except:\n", + " pass\n", + "# -----------------\n", + "\n", + "env = make_mla_sb3_env(\n", + " config=LimitedConfig(\n", + " env_path_or_name='Basic', # Can use any name from a registry or a path to your own unity build.\n", + " base_port=6006,\n", + " base_seed=42,\n", + " num_env=NUM_ENVS,\n", + " allow_multiple_obs=True,\n", + " ),\n", + " no_graphics=True, # Set to false if you are running locally and want to watch the environments move around as they train.\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create the model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# 250K should train to a reward ~= 0.90 for the \"Basic\" environment.\n", + "# We set the value lower here to demonstrate just a small amount of trianing.\n", + "BATCH_SIZE = 32\n", + "BUFFER_SIZE = 256\n", + "UPDATES = 50\n", + "TOTAL_TAINING_STEPS_GOAL = BUFFER_SIZE * UPDATES\n", + "BETA = 0.0005\n", + "N_EPOCHS = 3 \n", + "STEPS_PER_UPDATE = BUFFER_SIZE / NUM_ENVS\n", + "\n", + "# Helps gather stats for our eval() calls later so we can see reward stats.\n", + "env = VecMonitor(env)\n", + "\n", + "#Policy and Value function with 2 layers of 128 units each and no shared layers.\n", + "policy_kwargs = {\"net_arch\" : [{\"pi\": [32,32], \"vf\": [32,32]}]}\n", + "\n", + "model = PPO(\n", + " \"MlpPolicy\",\n", + " env,\n", + " verbose=1,\n", + " learning_rate=lambda progress: 0.0003 * (1.0 - progress),\n", + " clip_range=lambda progress: 0.2 * (1.0 - progress),\n", + " clip_range_vf=lambda progress: 0.2 * (1.0 - progress),\n", + " # Uncomment this if you want to log tensorboard results when running this notebook locally.\n", + " # tensorboard_log=\"results\",\n", + " policy_kwargs=policy_kwargs,\n", + " n_steps=int(STEPS_PER_UPDATE),\n", + " batch_size=BATCH_SIZE,\n", + " n_epochs=N_EPOCHS,\n", + " ent_coef=BETA,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Train the model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# 0.93 is considered solved for the Basic environment\n", + "for i in range(UPDATES):\n", + " print(f\"Training round {i + 1}/{UPDATES}\")\n", + " # NOTE: rest_num_timesteps should only happen the first time so that tensorboard logs are consistent.\n", + " model.learn(total_timesteps=BUFFER_SIZE, reset_num_timesteps=(i == 0))\n", + " model.policy.eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h1lIx3_l24OP" + }, + "source": [ + "### Close the environment\n", + "Frees up the ports being used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vdWG6_SqtNtv", + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "env.close()\n", + "print(\"Closed environment\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Colab-UnityEnvironment-1-Run.ipynb", + "private_outputs": true, + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/colab_requirements.txt b/colab_requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..ad064135a124b904aaec3b07556908a30326d388 --- /dev/null +++ b/colab_requirements.txt @@ -0,0 +1,2 @@ +matplotlib +jupyter diff --git a/com.unity.ml-agents.extensions/.gitignore b/com.unity.ml-agents.extensions/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..9f297351a83c2547c4b8857805fa54d1ef3cef26 --- /dev/null +++ b/com.unity.ml-agents.extensions/.gitignore @@ -0,0 +1,16 @@ +artifacts/** +build/** +.build_script/** +node_modules/** +.DS_Store +.npmrc +!Documentation~ +!.Documentation +npm-debug.log +build.sh.meta +build.bat.meta +.idea/ + +# API Scraper output +*.api +*.api.meta diff --git a/com.unity.ml-agents.extensions/.npmignore b/com.unity.ml-agents.extensions/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..696d110ce9e1091e96f4c89c27e58b72bdfdca4b --- /dev/null +++ b/com.unity.ml-agents.extensions/.npmignore @@ -0,0 +1,19 @@ +artifacts/** +build/** +.build_script/** +node_modules/** +Documentation/ApiDocs/** +Documentation~/ApiDocs/** +.DS_Store +.npmrc +.npmignore +.gitignore +CONTRIBUTING.md +CONTRIBUTING.md.meta +QAReport.md +QAReport.md.meta +.gitlab-ci.yml +build.sh +build.sh.meta +build.bat +build.bat.meta diff --git a/com.unity.ml-agents.extensions/CHANGELOG.md b/com.unity.ml-agents.extensions/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..cdff153bbee09c0a1570d621b28a21bf1f7ca335 --- /dev/null +++ b/com.unity.ml-agents.extensions/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +This changelog isn't used; please add to the `com.unity.ml-agents` changelog instead. + +## [Unreleased] +## [0.6.1-preview] - 2022-11-21 + * Initial version diff --git a/com.unity.ml-agents.extensions/CHANGELOG.md.meta b/com.unity.ml-agents.extensions/CHANGELOG.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..222c3d68692598c5250d3376a0cf4c3c6971946c --- /dev/null +++ b/com.unity.ml-agents.extensions/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cb3bf154cb17b41fca51ce7b73ef4d1b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Documentation~/CustomGridSensors.md b/com.unity.ml-agents.extensions/Documentation~/CustomGridSensors.md new file mode 100644 index 0000000000000000000000000000000000000000..c0244dc18691f41f65dfd10f88495c1469c6d69d --- /dev/null +++ b/com.unity.ml-agents.extensions/Documentation~/CustomGridSensors.md @@ -0,0 +1,76 @@ +# Extending Grid Sensors + +## Overview +Grid Sensor provides a 2D observation that detects objects around an agent from a top-down view. Compared to RayCasts, it receives a full observation in a grid area without gaps, and the detection is not blocked by objects around the agents. This gives a more granular view while requiring a higher usage of compute resources. + +One extra feature with Grid Sensors is that you can derive from the Grid Sensor base class to collect custom data besides the object tags, to include custom attributes as observations. This allows more flexibility for the use of GridSensor. This doc will elaborate how to create custom grid-based sensor class, and the sensors implementations provided in ml-agents package. + +## Customized Grid Sensor +To create a custom grid sensor, you'll need to derive from two classes: `GridSensorBase` and `GridSensorComponent`. + +### Deriving from `GridSensorBase` +This is the implementation of your sensor. This defines how your sensor process detected colliders, +what the data looks like, and how the observations are constructed from the detected objects. +Consider overriding the following methods depending on your use case: +* `protected virtual int GetCellObservationSize()`: Return the observation size per cell. Default to `1`. +* `protected virtual void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer)`: Constructs observations from the detected object. The input provides the detected GameObject and the index of its tag (0-indexed). The observations should be written to the given `dataBuffer` and the buffer size is defined in `GetCellObservationSize()`. This data will be gathered from each cell and sent to the trainer as observation. +* `protected virtual bool IsDataNormalized()`: Return whether the observation is normalized to 0~1. This affects whether you're able to use compressed observations as compressed data only supports normalized data. Return `true` if all the values written in `GetObjectData` are within the range of (0, 1), otherwise return `false`. Default to `false`. + + There might be cases when your data is not in the range of (0, 1) but you still wish to use compressed data to speed up training. If your data is naturally bounded within a range, normalize your data first to the possible range and fill the buffer with normalized data. For example, since the angle of rotation is bounded within `0 ~ 360`, record an angle `x` as `x/360` instead of `x`. If your data value is not bounded (position, velocity, etc.), consider setting a reasonable min/max value and use that to normalize your data. +* `protected internal virtual ProcessCollidersMethod GetProcessCollidersMethod()`: Return the method to process colliders detected in a cell. This defines the sensor behavior when multiple objects with detectable tags are detected within a cell. +Currently two methods are provided: + * `ProcessCollidersMethod.ProcessClosestColliders` (Default): Process the closest collider to the agent. In this case each cell's data is represented by one object. + * `ProcessCollidersMethod.ProcessAllColliders`: Process all detected colliders. This is useful when the data from each cell is additive, for instance, the count of detected objects in a cell. When using this option, the input `dataBuffer` in `GetObjectData()` will contain processed data from other colliders detected in the cell. You'll more likely want to add/subtract values from the buffer instead of overwrite it completely. + + +### Deriving from `GridSensorComponent` +To create your sensor, you need to override the sensor component and add your sensor to the creation. +Specifically, you need to override `GetGridSensors()` and return an array of grid sensors you want to use in the component. +It can be used to create multiple different customized grid sensors, or you can also include the ones provided in our package (listed in the next section). + +Example: +``` +public class CustomGridSensorComponent : GridSensorComponent +{ + protected override GridSensorBase[] GetGridSensors() + { + return new GridSensorBase[] { new CustomGridSensor(...)}; + } +} +``` + +## Grid Sensor Types +Here we list out two types of grid sensor we provide in our package: `OneHotGridSensor` and `CountingGridSensor`. +Their implementations are also a good reference for making you own ones. + +### OneHotGridSensor (provided in `com.unity.ml-agents`) +This is the default sensor used by `GridSensorComponent`. It detects objects with detectable tags and the observation is the one-hot representation of the detected tag index. + +The implementation of the sensor is defined as following: +* `GetCellObservationSize()`: `detectableTags.Length` +* `IsDataNormalized()`: `true` +* `ProcessCollidersMethod()`: `ProcessCollidersMethod.ProcessClosestColliders` +* `GetObjectData()`: + +``` +protected override void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer) +{ + dataBuffer[tagIndex] = 1; +} +``` + +### CountingGridSensor (provided in `com.unity.ml-agents.extensions`) +This is an example of using all colliders detected in a cell. It counts the number of objects detected for each detectable tag. The sensor cannot be used with data compression. + +The implementation of the sensor is defined as following: +* `GetCellObservationSize()`: `detectableTags.Length` +* `IsDataNormalized()`: `false` +* `ProcessCollidersMethod()`: `ProcessCollidersMethod.ProcessAllColliders` +* `GetObjectData()`: + +``` +protected override void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer) +{ + dataBuffer[tagIndex] += 1; +} +``` diff --git a/com.unity.ml-agents.extensions/Documentation~/InputActuatorComponent.md b/com.unity.ml-agents.extensions/Documentation~/InputActuatorComponent.md new file mode 100644 index 0000000000000000000000000000000000000000..b72fb3fd8c7f4b1e1021c61cacf9707fc2f03589 --- /dev/null +++ b/com.unity.ml-agents.extensions/Documentation~/InputActuatorComponent.md @@ -0,0 +1,57 @@ +# Integration of the Input System Package with ML-Agents + +## Overview +One area we are always trying to improve is getting developers up and running with ML-Agents. With this in mind, +we have implemented an `InputActuatorComponent`. This component integrates with the +[Input System Package](https://docs.unity3d.com/Packages/com.unity.inputsystem@1.1/manual/QuickStartGuide.html) +to set up an action space for your `Agent` based on an `InputActionAsset` that is referenced by the +`IInputActionAssetProvider` interface, or the `PlayerInput` component that may be living on your player controlled +`Agent`. This means that if you have code outside of your agent that handles input, you will not need to implement +the Heuristic function in agent as well. The `InputActuatorComponent` will handle this for you. You can now train and +run inference on `Agents` with an action space defined by an `InputActionAsset`. + +This implementation includes: + +* C# `InputActuatorComponent` you can attach to your Agent. +* Implement the `IInputActionAssetProvider` in the `Componenet` where you handle player input. +* An example environment where the input handling code is not in the Heuristic function of the Agent subclass. + +### Feedback +We have only implemented a small subset of `InputControl` types that we thought would cover a large portion of what +most developers would use. Please let us know if you want more control types implemented by posting in the [ML-Agents +forum.](https://forum.unity.com/forums/ml-agents.453/) + +We would also like your feedback on the workflow of integrating this into your games. If you run +into workflow issues please let us know in the ML-Agents forums, or if you've discovered a bug, +please file a bug on our GitHub page. + +## Getting started +The C# code for the `InputActuatorComponent` exists inside of the extensions package (com.unity.ml-agents.extensions). A good first step would be to familiarize with the extensions package by reading the document [here](com.unity.ml-agents.extensions.md). The second step would be to take a look at how we have implemented the C# code in the example Input Integration scene (located under ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/). Once you have some familiarity, then the next step would be to add the InputActuatorComponent to your player Agent. The example we have implemented uses C# Events to send information from the Input System. + +Additionally, see below for additional technical specifications on the C# code for the InputActuatorComponent. + +## Technical specifications for the InputActuatorComponent + +### `IInputActionsAssetProvider` Interface +The `InputActuatorComponent` searches for a `Component` that implements +`IInputActionAssetProvider` on the `GameObject` they both are attached to. It is important to note +that if multiple `Components` on your `GameObject` need to access an `InputActionAsset` to handle events, +they will need to share the same instance of the `InputActionAsset` that is returned from the +`IInputActionAssetProvider`. + +### `InputActuatorComponent` class +The `InputActuatorComponent` is the bridge between ML-Agents and the Input System.. It allows ML-Agents to +* create an `ActionSpec` for your Agent based on an `InputActionAsset` that comes from an +`IInputActionAssetProvider`. +* send simulated input from a training process or a neural network +* let developers keep their input handling code in one place + +This is accomplished by adding the `InputActuatorComponenet` to an Agent which already has the PlayerInput component attached. + +### Setting up a scene using the `InputActuatorComponent` +1. Add the `com.unity.inputsystem` version 1.1.0-preview.3 or later to your project via the Package Manager window. +2. If you have already setup an InputActionAsset skip to Step 3, otherwise follow these sub steps: + 1. Create an InputActionAsset to allow your Agent to be controlled by the Input System. + 2. Handle the events from the Input System where you normally would (i.e. a script external to your Agent class). +3. Add the InputSystemActuatorComponent to the GameObject that has the `PlayerInput` and `Agent` components attached. + diff --git a/com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md b/com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md new file mode 100644 index 0000000000000000000000000000000000000000..fb2dc99a519312d057bb06f429c7914176b65743 --- /dev/null +++ b/com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md @@ -0,0 +1,70 @@ +# About ML-Agents Extensions package (`com.unity.ml-agents.extensions`) + +The Unity ML-Agents Extensions package contains optional add-ons to the C# SDK for the +[Unity ML-Agents Toolkit](https://github.com/Unity-Technologies/ml-agents). + +These extensions are all considered experimental, and their API or behavior +may change between versions. + + +## Package contents + +The following table describes the package folder structure: + +| **Location** | **Description** | +| ---------------- | ---------------------------------------------------------------------- | +| _Documentation~_ | Contains the documentation for the Unity package. | +| _Editor_ | Contains utilities for Editor windows and drawers. | +| _Runtime_ | Contains core C# APIs for integrating ML-Agents into your Unity scene. | +| _Tests_ | Contains the unit tests for the package. | + +The Runtime directory currently contains these features: + * Physics-based sensors + * [Input System Package Integration](InputActuatorComponent.md) + * [Custom Grid-based Sensors](CustomGridSensors.md) + +## Installation +The ML-Agents Extensions package is not currently available in the Package Manager. There are two +recommended ways to install the package: + +### Local Installation +[Clone the repository](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/Installation.md#clone-the-ml-agents-toolkit-repository-optional) and follow the +[Local Installation for Development](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/Installation.md#advanced-local-installation-for-development-1) +directions (substituting `com.unity.ml-agents.extensions` for the package name). + +### Github via Package Manager +In Unity 2019.4 or later, open the Package Manager, hit the "+" button, and select "Add package from git URL". + +![Package Manager git URL](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/images/unity_package_manager_git_url.png) + +In the dialog that appears, enter + ``` +git+https://github.com/Unity-Technologies/ml-agents.git?path=com.unity.ml-agents.extensions#release_20 +``` + +You can also edit your project's `manifest.json` directly and add the following line to the `dependencies` +section: +``` +"com.unity.ml-agents.extensions": "git+https://github.com/Unity-Technologies/ml-agents.git?path=com.unity.ml-agents.extensions#release_20", +``` +See [Git dependencies](https://docs.unity3d.com/Manual/upm-git.html#subfolder) for more information. Note that this +may take several minutes to resolve the packages the first time that you add it. + + +## Requirements + +This version of the Unity ML-Agents package is compatible with the following +versions of the Unity Editor: + +- 2019.4 and later + +If using the `InputActuatorComponent` +- install the `com.unity.inputsystem` package version `1.1.0-preview.3` or later. + +## Known Limitations +- For the `InputActuatorComponent` + - Limited implementation of `InputControls` + - No way to customize the action space of the `InputActuatorComponent` + +## Need Help? +The main [README](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/README.md) contains links for contacting the team or getting support. diff --git a/com.unity.ml-agents.extensions/Documentation~/images/match3-moves.png b/com.unity.ml-agents.extensions/Documentation~/images/match3-moves.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0c9d4a344e725d098d34038f9216fd104ec1d6 Binary files /dev/null and b/com.unity.ml-agents.extensions/Documentation~/images/match3-moves.png differ diff --git a/com.unity.ml-agents.extensions/Documentation~/images/match3.png b/com.unity.ml-agents.extensions/Documentation~/images/match3.png new file mode 100644 index 0000000000000000000000000000000000000000..0091d798b7c3f6e993960dbe211c58fc660db970 Binary files /dev/null and b/com.unity.ml-agents.extensions/Documentation~/images/match3.png differ diff --git a/com.unity.ml-agents.extensions/Documentation~/images/persp_ortho_proj.png b/com.unity.ml-agents.extensions/Documentation~/images/persp_ortho_proj.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ea5e30df56f15a3b3fbf49dcd7e202378c9dc6 Binary files /dev/null and b/com.unity.ml-agents.extensions/Documentation~/images/persp_ortho_proj.png differ diff --git a/com.unity.ml-agents.extensions/Editor.meta b/com.unity.ml-agents.extensions/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..67487200060d20ad640bf5ef362ddbcffac6b3e4 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40d78a1c3c0ef4584a1816f66812de87 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Editor/EditorExample.cs b/com.unity.ml-agents.extensions/Editor/EditorExample.cs new file mode 100644 index 0000000000000000000000000000000000000000..e5aaef17242e1d6511370b9c48a5998aa60c67d8 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/EditorExample.cs @@ -0,0 +1,3 @@ +namespace Unity.MLAgents.Extensions.Editor +{ +} diff --git a/com.unity.ml-agents.extensions/Editor/EditorExample.cs.meta b/com.unity.ml-agents.extensions/Editor/EditorExample.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5b9a890fa96658b73a3b7d1588ecd753e7eba157 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/EditorExample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d278d118acf74b1294c16f6a065b4ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Editor/Input.meta b/com.unity.ml-agents.extensions/Editor/Input.meta new file mode 100644 index 0000000000000000000000000000000000000000..2b437a39f89dfa0708fd51877c05e2c7008581a8 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Input.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1f773a20e85042999e87f5d3c7b55281 +timeCreated: 1613637190 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Editor/Input/InputActuatorComponentEditor.cs b/com.unity.ml-agents.extensions/Editor/Input/InputActuatorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f48f6481f5a2ad2c6c22353b2dfb73d7bd7f530e --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Input/InputActuatorComponentEditor.cs @@ -0,0 +1,26 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Extensions.Input; +using UnityEditor; + +namespace Unity.MLAgents.Extensions.Editor.Input +{ + [CustomEditor(typeof(InputActuatorComponent))] + internal class InputActuatorComponentEditor : UnityEditor.Editor + { + const string k_ActionSpecName = "m_ActionSpec"; + + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + InputActuatorComponent o = so.targetObject as InputActuatorComponent; + _ = o.ActionSpec; + EditorGUI.indentLevel++; + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.PropertyField(so.FindProperty(k_ActionSpecName)); + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel--; + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Editor/Input/InputActuatorComponentEditor.cs.meta b/com.unity.ml-agents.extensions/Editor/Input/InputActuatorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7fe63a5420814b63f5109bd65209dd2aa54b469b --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Input/InputActuatorComponentEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3435eeef4d1645be8c0f770b68f2ba19 +timeCreated: 1613637202 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Editor/Input/Unity.ML-Agents.Extensions.Editor.Input.asmdef b/com.unity.ml-agents.extensions/Editor/Input/Unity.ML-Agents.Extensions.Editor.Input.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..162bac225273a05130f52a19eb1bc7c5196a87a0 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Input/Unity.ML-Agents.Extensions.Editor.Input.asmdef @@ -0,0 +1,26 @@ +{ + "name": "Unity.ML-Agents.Extensions.Editor.Input", + "references": [ + "Unity.ML-Agents", + "Unity.ML-Agents.Extensions.Input", + "Unity.ML-Agents.Editor", + "Unity.InputSystem" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.inputsystem", + "expression": "1.1.0-preview", + "define": "MLA_INPUT_SYSTEM" + } + ], + "noEngineReferences": false +} diff --git a/com.unity.ml-agents.extensions/Editor/Input/Unity.ML-Agents.Extensions.Editor.Input.asmdef.meta b/com.unity.ml-agents.extensions/Editor/Input/Unity.ML-Agents.Extensions.Editor.Input.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..0d252ad1754fecc18b033f80b0ee3a84e0cad99a --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Input/Unity.ML-Agents.Extensions.Editor.Input.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4851f2d02f9f1423a8593f60b1a9cd7e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Editor/RigidBodySensorComponentEditor.cs b/com.unity.ml-agents.extensions/Editor/RigidBodySensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..632a2e99e9b0562ae4e77647bf195c49ef634e68 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/RigidBodySensorComponentEditor.cs @@ -0,0 +1,73 @@ +using UnityEditor; +using Unity.MLAgents.Editor; +using Unity.MLAgents.Extensions.Sensors; + +namespace Unity.MLAgents.Extensions.Editor +{ + [CustomEditor(typeof(RigidBodySensorComponent))] + [CanEditMultipleObjects] + internal class RigidBodySensorComponentEditor : UnityEditor.Editor + { + bool ShowHierarchy = true; + + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + var rbSensorComp = so.targetObject as RigidBodySensorComponent; + if (rbSensorComp.IsTrivial()) + { + EditorGUILayout.HelpBox( + "The Root Body has no Joints, and the Virtual Root is null or the same as the " + + "Root Body's GameObject. This will not generate any useful observations; they will always " + + "be the identity values. Consider removing this component since it won't help the Agent.", + MessageType.Warning + ); + } + + bool requireExtractorUpdate; + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + // All the fields affect the sensor order or observation size, + // So can't be changed at runtime. + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(so.FindProperty("RootBody"), true); + EditorGUILayout.PropertyField(so.FindProperty("VirtualRoot"), true); + + // Changing the root body or virtual root changes the hierarchy, so we need to reset later. + requireExtractorUpdate = EditorGUI.EndChangeCheck(); + + EditorGUILayout.PropertyField(so.FindProperty("Settings"), true); + + // Collapsible tree for the body hierarchy + ShowHierarchy = EditorGUILayout.Foldout(ShowHierarchy, "Hierarchy", true); + if (ShowHierarchy) + { + var treeNodes = rbSensorComp.GetDisplayNodes(); + var originalIndent = EditorGUI.indentLevel; + foreach (var node in treeNodes) + { + var obj = node.NodeObject; + var objContents = EditorGUIUtility.ObjectContent(obj, obj.GetType()); + EditorGUI.indentLevel = originalIndent + node.Depth; + var enabled = EditorGUILayout.Toggle(objContents, node.Enabled); + rbSensorComp.SetPoseEnabled(node.OriginalIndex, enabled); + } + + EditorGUI.indentLevel = originalIndent; + } + + EditorGUILayout.PropertyField(so.FindProperty("sensorName"), true); + } + EditorGUI.EndDisabledGroup(); + + so.ApplyModifiedProperties(); + if (requireExtractorUpdate) + { + rbSensorComp.ResetPoseExtractor(); + } + } + } +} diff --git a/com.unity.ml-agents.extensions/Editor/RigidBodySensorComponentEditor.cs.meta b/com.unity.ml-agents.extensions/Editor/RigidBodySensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..51c90805bb2891a8df550d0c51ec7e92fd13214b --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/RigidBodySensorComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c3481f5312564501b381742673d3100 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Editor/Unity.ML-Agents.Extensions.Editor.asmdef b/com.unity.ml-agents.extensions/Editor/Unity.ML-Agents.Extensions.Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..300a1530e4e4a1cfb9ef71be3f2b829e10977f09 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Unity.ML-Agents.Extensions.Editor.asmdef @@ -0,0 +1,12 @@ +{ + "name": "Unity.ML-Agents.Extensions.Editor", + "references": [ + "Unity.ML-Agents.Extensions", + "Unity.ML-Agents", + "Unity.ML-Agents.Editor" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/com.unity.ml-agents.extensions/Editor/Unity.ML-Agents.Extensions.Editor.asmdef.meta b/com.unity.ml-agents.extensions/Editor/Unity.ML-Agents.Extensions.Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..bd9ebd4b70a0350960345c0a4804df332550ea35 --- /dev/null +++ b/com.unity.ml-agents.extensions/Editor/Unity.ML-Agents.Extensions.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eec81f5d1363e46538604927f0b9199c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/LICENSE.md b/com.unity.ml-agents.extensions/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..5653ad84f21a169e2c8d76ea7223f44f590f62b1 --- /dev/null +++ b/com.unity.ml-agents.extensions/LICENSE.md @@ -0,0 +1,202 @@ +Copyright 2020-2021 Unity Technologies + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. diff --git a/com.unity.ml-agents.extensions/LICENSE.md.meta b/com.unity.ml-agents.extensions/LICENSE.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..a909dc934ed6e19bdb626db1874ab884901ca920 --- /dev/null +++ b/com.unity.ml-agents.extensions/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1f518b76bbd7b4806b0653aac1143b42 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/README.md b/com.unity.ml-agents.extensions/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ec1b5448ced7b700e4ccf00128f485644349e9df --- /dev/null +++ b/com.unity.ml-agents.extensions/README.md @@ -0,0 +1,3 @@ +# ML-Agents Extensions + +See the [package documentation](Documentation~/com.unity.ml-agents.extensions.md) for more information diff --git a/com.unity.ml-agents.extensions/README.md.meta b/com.unity.ml-agents.extensions/README.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..62684ffce0ecf0296e5919874243e60c2f912366 --- /dev/null +++ b/com.unity.ml-agents.extensions/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 86620336dab3b4d3783b0b3114496654 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime.meta b/com.unity.ml-agents.extensions/Runtime.meta new file mode 100644 index 0000000000000000000000000000000000000000..58017d2891e7d6af2ed286ddd7fff66413198166 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35f52f986759c491cb377b1f3841c566 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/AssemblyInfo.cs b/com.unity.ml-agents.extensions/Runtime/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..c1bdcc8d5f6c24c956ab11b52a9837a99938d972 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.EditorTests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.Editor")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.Tests")] diff --git a/com.unity.ml-agents.extensions/Runtime/AssemblyInfo.cs.meta b/com.unity.ml-agents.extensions/Runtime/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..21cec76829e88b206c903b3c4a45a2729a4e2b9f --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48c8790647c3345e19c57d6c21065112 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Input.meta b/com.unity.ml-agents.extensions/Runtime/Input.meta new file mode 100644 index 0000000000000000000000000000000000000000..6d9bda962b0b913539c6a27b1b27f47b4856f565 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1694e881b9ec420ba1c201f0612392d6 +timeCreated: 1610754907 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors.meta b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors.meta new file mode 100644 index 0000000000000000000000000000000000000000..f75266d5b71ec4708c923ff44854743f204e6269 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: de3fc3f4fd664e3ab579a102f7fabc88 +timeCreated: 1612204931 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/ButtonInputActionAdaptor.cs b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/ButtonInputActionAdaptor.cs new file mode 100644 index 0000000000000000000000000000000000000000..b37582422a585e0aa646aab66ae4ca3bbc88837c --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/ButtonInputActionAdaptor.cs @@ -0,0 +1,45 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Actuators; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Controls; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Class that translates data between the a and + /// the ML-Agents object. + /// + public class ButtonInputActionAdaptor : IRLActionInputAdaptor + { + /// + /// TODO this method needs to be more nuanced depending the types of controls that can back it. i.e. TriggerControls + /// are continuous buttons, etc. + /// Currently returns an with 1 branch of size 2. One value for not pressed, and one + /// for pressed. + /// + /// The action associated with this adaptor to help determine the action space. + /// + public ActionSpec GetActionSpecForInputAction(InputAction action) + { + return ActionSpec.MakeDiscrete(2); + } + + /// TODO again this might need to be more nuanced for things like continuous buttons. + /// + public void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, InputControl control, ActionSpec actionSpec, in ActionBuffers actionBuffers) + { + var val = actionBuffers.DiscreteActions[0]; + ((ButtonControl)control).WriteValueIntoEvent((float)val, eventPtr); + } + + /// > + public void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers) + { + var discreteActions = actionBuffers.DiscreteActions; + var val = action.ReadValue(); + discreteActions[0] = (int)val; + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/ButtonInputActionAdaptor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/ButtonInputActionAdaptor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..68f92bc212e4c214c3ca06d7fd6fb64782505907 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/ButtonInputActionAdaptor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f3a0fe3f0bd446958c729d6f71e8d00b +timeCreated: 1612373241 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/DoubleInputActionAdaptor.cs b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/DoubleInputActionAdaptor.cs new file mode 100644 index 0000000000000000000000000000000000000000..3d42226eaa8861ac2e3e5adba85396952cb5f66e --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/DoubleInputActionAdaptor.cs @@ -0,0 +1,36 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Actuators; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Controls; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Translates data from a . + /// + public class DoubleInputActionAdaptor : IRLActionInputAdaptor + { + /// + public ActionSpec GetActionSpecForInputAction(InputAction action) + { + return ActionSpec.MakeContinuous(1); + } + + /// + public void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, InputControl control, ActionSpec actionSpec, in ActionBuffers actionBuffers) + { + var val = actionBuffers.ContinuousActions[0]; + ((DoubleControl)control).WriteValueIntoEvent((double)val, eventPtr); + } + + /// + public void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers) + { + var actions = actionBuffers.ContinuousActions; + var val = (float)action.ReadValue(); + actions[0] = val; + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/DoubleInputActionAdaptor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/DoubleInputActionAdaptor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ced0139369e5b806179b9e5c79cac50cf7260863 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/DoubleInputActionAdaptor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 14ec2823be0a4b3bbee5490ed4840e9c +timeCreated: 1612574422 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/FloatInputActionAdaptor.cs b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/FloatInputActionAdaptor.cs new file mode 100644 index 0000000000000000000000000000000000000000..5de783d812f874cd27b74c329924ec7e984f45e2 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/FloatInputActionAdaptor.cs @@ -0,0 +1,35 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Actuators; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Translates data from any control that extends from . + /// + public class FloatInputActionAdaptor : IRLActionInputAdaptor + { + /// + public ActionSpec GetActionSpecForInputAction(InputAction action) + { + return ActionSpec.MakeContinuous(1); + } + + /// + public void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, InputControl control, ActionSpec actionSpec, in ActionBuffers actionBuffers) + { + var val = actionBuffers.ContinuousActions[0]; + control.WriteValueIntoEvent(val, eventPtr); + } + + /// + public void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers) + { + var actions = actionBuffers.ContinuousActions; + var val = action.ReadValue(); + actions[0] = val; + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/FloatInputActionAdaptor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/FloatInputActionAdaptor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e12bca95fd8453dd7d9690dfd1fb1201f88c532 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/FloatInputActionAdaptor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6c98cc3fdaec4664aae128a05cfe6560 +timeCreated: 1612573580 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/IntegerInputActionAdaptor.cs b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/IntegerInputActionAdaptor.cs new file mode 100644 index 0000000000000000000000000000000000000000..3bb9f98d57c67905ed148a8709bcc28f87b88e94 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/IntegerInputActionAdaptor.cs @@ -0,0 +1,36 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Actuators; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Translates data from a . + /// + public class IntegerInputActionAdaptor : IRLActionInputAdaptor + { + // TODO need to figure out how we can infer the branch size from here. + /// + public ActionSpec GetActionSpecForInputAction(InputAction action) + { + return ActionSpec.MakeDiscrete(2); + } + + /// + public void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, InputControl control, ActionSpec actionSpec, in ActionBuffers actionBuffers) + { + var val = actionBuffers.DiscreteActions[0]; + control.WriteValueIntoEvent(val, eventPtr); + } + + /// + public void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers) + { + var actions = actionBuffers.DiscreteActions; + var val = action.ReadValue(); + actions[0] = val; + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/IntegerInputActionAdaptor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/IntegerInputActionAdaptor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3db5316f100844fc3200568d8c3eeb22ffb03fae --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/IntegerInputActionAdaptor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 592012f9a30847a29c618f0cf8addfdf +timeCreated: 1612572952 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/Vector2InputActionAdaptor.cs b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/Vector2InputActionAdaptor.cs new file mode 100644 index 0000000000000000000000000000000000000000..e46c5a9ef2ef1fdb6c11c89b398f29645e00d480 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/Vector2InputActionAdaptor.cs @@ -0,0 +1,42 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Actuators; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Translates data from any control that extends from . + /// + public class Vector2InputActionAdaptor : IRLActionInputAdaptor + { + /// + public ActionSpec GetActionSpecForInputAction(InputAction action) + { + // TODO create the action spec based on what controls back the action + return ActionSpec.MakeContinuous(2); + } + + /// + public void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, + InputControl control, + ActionSpec actionSpec, + in ActionBuffers actionBuffers) + { + var x = actionBuffers.ContinuousActions[0]; + var y = actionBuffers.ContinuousActions[1]; + control.WriteValueIntoEvent(new Vector2(x, y), eventPtr); + } + + /// + public void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers) + { + var value = action.ReadValue(); + var continuousActions = actionBuffers.ContinuousActions; + continuousActions[0] = value.x; + continuousActions[1] = value.y; + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/Vector2InputActionAdaptor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/Vector2InputActionAdaptor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7f87c8fefd78603106daec6b65f34a720bab4519 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Adaptors/Vector2InputActionAdaptor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aa311fde3dac44f3b7998bb7fee77225 +timeCreated: 1611356491 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/AssemblyInfo.cs b/com.unity.ml-agents.extensions/Runtime/Input/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..ffd66a0ad7ce7a06071d7967682aab6ad39419a2 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.Input.Tests.Runtime")] diff --git a/com.unity.ml-agents.extensions/Runtime/Input/AssemblyInfo.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..93ccdcd83334f0d2173446fb083997c5bc4f4400 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/AssemblyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 989e62db4b694586bf2c832ce13e2d50 +timeCreated: 1612916938 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/IInputActionAssetProvider.cs b/com.unity.ml-agents.extensions/Runtime/Input/IInputActionAssetProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd56c3503fe9804d1bb5acffc23d0ca066f347c0 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/IInputActionAssetProvider.cs @@ -0,0 +1,27 @@ +#if MLA_INPUT_SYSTEM +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Implement this interface if you are listening to C# events from the generated C# class from the + /// . This interface works with the in order + /// to allow ML-Agents to simulate input actions based on the instance of the + /// used to listen to events. If you implement this interface the will use + /// what is returned from as the asset to base it's simulated input for. + /// Otherwise, the will look for the component + /// and use the asset from there. If you have multiple components handling PlayerInput on the same GameObject + /// they will need to share the same instance of the in order to get the simulated + /// input. + /// + public interface IInputActionAssetProvider + { + /// + /// Returns the instance being from the generated C# class of the + /// in order to correctly fire events when simulating input from ML-Agents. + /// + /// The instance of the you are listening for events on. + (InputActionAsset, IInputActionCollection2) GetInputActionAsset(); + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/IInputActionAssetProvider.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/IInputActionAssetProvider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8b441de4dcfb95b92f28afca014445850c4923fa --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/IInputActionAssetProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ce1e3218e46e48a4ab64f6f631553a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Input/IRLActionInputAdaptor.cs b/com.unity.ml-agents.extensions/Runtime/Input/IRLActionInputAdaptor.cs new file mode 100644 index 0000000000000000000000000000000000000000..c0f1ade2fb12577baf4865c9b2812b27a6c6c736 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/IRLActionInputAdaptor.cs @@ -0,0 +1,40 @@ +#if MLA_INPUT_SYSTEM +using Unity.MLAgents.Actuators; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Implement this interface in order to customize how information is translated s + /// and . + /// + public interface IRLActionInputAdaptor + { + /// + /// Generate an for a given action which determines how data is translated between + /// the and ML-Agents. + /// + /// The to based the from. + /// An instance based off the information in the . + ActionSpec GetActionSpecForInputAction(InputAction action); + + /// + /// Translates data from the object to the . + /// + /// The Event pointer to write to. + /// The action associated with this adaptor. + /// The control which will write the event to the . + /// The associated with this action and adaptor pair. + /// The object to read from. + void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, InputControl control, ActionSpec actionSpec, in ActionBuffers actionBuffers); + + /// + /// Writes data from the to the . + /// + /// The to read data from. + /// The object to write data to. + void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers); + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/IRLActionInputAdaptor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/IRLActionInputAdaptor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f59800ce366ba1b860f5088311a406747240733d --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/IRLActionInputAdaptor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 010af7dd365b48849a9d498b84a4be94 +timeCreated: 1611350962 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs b/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..8f7d4f530f0a89a273898b6d094c70ebe8ccb529 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs @@ -0,0 +1,101 @@ +#if MLA_INPUT_SYSTEM + +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using UnityEngine.InputSystem; +using UnityEngine.Profiling; + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// This implementation of will send events from the ML-Agents training process, or from + /// neural networks to the via the interface. If an + /// 's indicate that the Agent is running in Heuristic Mode, + /// this Actuator will write actions from the to the object. + /// + public class InputActionActuator : IActuator, IBuiltInActuator + { + readonly BehaviorParameters m_BehaviorParameters; + readonly InputAction m_Action; + readonly IRLActionInputAdaptor m_InputAdaptor; + InputActuatorEventContext m_InputActuatorEventContext; + InputDevice m_Device; + InputControl m_Control; + + /// + /// Construct an with the of the + /// component, the relevant , and the relevant + /// to convert between ml-agents <--> . + /// + /// The input device this action is bound to. + /// Used to determine if the is running in + /// heuristic mode. + /// The this we read/write data to/from + /// via the . + /// The that will convert data between ML-Agents + /// and the . + /// The object that will provide the event ptr to write to. + public InputActionActuator(InputDevice inputDevice, BehaviorParameters behaviorParameters, + InputAction action, + IRLActionInputAdaptor adaptor, + InputActuatorEventContext inputActuatorEventContext) + { + m_BehaviorParameters = behaviorParameters; + Name = $"InputActionActuator-{action.name}"; + m_Action = action; + m_InputAdaptor = adaptor; + m_InputActuatorEventContext = inputActuatorEventContext; + ActionSpec = adaptor.GetActionSpecForInputAction(m_Action); + m_Device = inputDevice; + m_Control = m_Device?.GetChildControl(m_Action.name); + } + + /// + public void OnActionReceived(ActionBuffers actionBuffers) + { + Profiler.BeginSample("InputActionActuator.OnActionReceived"); + if (!m_BehaviorParameters.IsInHeuristicMode()) + { + using (m_InputActuatorEventContext.GetEventForFrame(out var eventPtr)) + { + m_InputAdaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, ActionSpec, actionBuffers); + } + } + Profiler.EndSample(); + } + + /// + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + // TODO configure mask from editor UI? + } + + /// + public ActionSpec ActionSpec { get; } + + /// + public string Name { get; } + + /// + public void ResetData() + { + // do nothing for now + } + + /// + public void Heuristic(in ActionBuffers actionBuffersOut) + { + Profiler.BeginSample("InputActionActuator.Heuristic"); + m_InputAdaptor.WriteToHeuristic(m_Action, actionBuffersOut); + Profiler.EndSample(); + } + + /// + public BuiltInActuatorType GetBuiltInActuatorType() + { + return BuiltInActuatorType.InputActionActuator; + } + } +} + +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..158711cbab72c0c893d70e331309728b5e48fe77 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d4dfb5125cc2461088f18e27b6c21842 +timeCreated: 1612305510 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorComponent.cs b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..ac8ae75236ca1fdcde80b2a3d0780847c63fe4f9 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorComponent.cs @@ -0,0 +1,376 @@ +#if MLA_INPUT_SYSTEM +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Controls; +using UnityEngine.InputSystem.LowLevel; +using UnityEngine.InputSystem.Layouts; +using UnityEngine.InputSystem.Utilities; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// Component class that handles the parsing of the and translates that into + /// s. + /// + [RequireComponent(typeof(PlayerInput), typeof(IInputActionAssetProvider))] + [AddComponentMenu("ML Agents/Input Actuator", (int)MenuGroup.Actuators)] + public class InputActuatorComponent : ActuatorComponent + { + InputActionAsset m_InputAsset; + IInputActionCollection2 m_AssetCollection; + PlayerInput m_PlayerInput; + BehaviorParameters m_BehaviorParameters; + IActuator[] m_Actuators; + InputDevice m_Device; + + /// + /// Mapping of types to types of concrete classes. + /// + public static Dictionary controlTypeToAdaptorType = new Dictionary + { + { typeof(Vector2Control), typeof(Vector2InputActionAdaptor) }, + { typeof(ButtonControl), typeof(ButtonInputActionAdaptor) }, + { typeof(IntegerControl), typeof(IntegerInputActionAdaptor) }, + { typeof(AxisControl), typeof(FloatInputActionAdaptor) }, + { typeof(DoubleControl), typeof(DoubleInputActionAdaptor) } + }; + + string m_LayoutName; + [SerializeField] + ActionSpec m_ActionSpec; + InputControlScheme m_ControlScheme; + + public const string mlAgentsLayoutFormat = "MLAT"; + public const string mlAgentsLayoutName = "MLAgentsLayout"; + public const string mlAgentsControlSchemeName = "ml-agents"; + + /// + public override ActionSpec ActionSpec + { + get + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying && m_ActionSpec.NumContinuousActions == 0 + && m_ActionSpec.BranchSizes == null + || m_ActionSpec.BranchSizes.Length == 0) + { + FindNeededComponents(); + var actuators = CreateActuatorsFromMap(m_InputAsset.FindActionMap(m_PlayerInput.defaultActionMap), + m_BehaviorParameters, + null, + InputActuatorEventContext.s_EditorContext); + m_ActionSpec = CombineActuatorActionSpecs(actuators); + } +#endif + return m_ActionSpec; + } + } + + void OnDisable() + { + CleanupActionAsset(); + } + + /// + /// This method is where the gets parsed and translated into + /// s that communicate with the via a + /// virtual . + /// + /// The flow of this method is as follows: + /// + /// + /// Ensure that our custom s are registered with + /// the InputSystem. + /// + /// + /// Look for the components that are needed by this class in order to retrieve the + /// . It first looks for , if that + /// is not found, it will get the asset from the component. + /// + /// + /// Create the list s, one for each action in the default + /// as set by the component. Within the method + /// where the actuators are being created, an is also being built based + /// on the number and types of s. This will be used to create a virtual + /// with a that is specific to the + /// specified by + /// + /// + /// Create our device based on the layout that was generated and registered during + /// actuator creation. + /// + /// + /// Create an ml-agents control scheme and add it to the so + /// our virtual devices can be used. + /// + /// + /// Add our virtual to the input system. + /// + /// + /// + /// + /// A list of + public override IActuator[] CreateActuators() + { + FindNeededComponents(); + var collection = m_AssetCollection ?? m_InputAsset; + collection.Disable(); + var inputActionMap = m_InputAsset.FindActionMap(m_PlayerInput.defaultActionMap); + + RegisterLayoutBuilder(inputActionMap, m_LayoutName); + m_Device = InputSystem.AddDevice(m_LayoutName); + + var context = new InputActuatorEventContext(inputActionMap.actions.Count, m_Device); + m_Actuators = CreateActuatorsFromMap(inputActionMap, m_BehaviorParameters, m_Device, context); + + UpdateDeviceBinding(m_BehaviorParameters.IsInHeuristicMode()); + inputActionMap.Enable(); + + m_ActionSpec = CombineActuatorActionSpecs(m_Actuators); + collection.Enable(); + return m_Actuators; + } + + static ActionSpec CombineActuatorActionSpecs(IActuator[] actuators) + { + var specs = new ActionSpec[actuators.Length]; + for (var i = 0; i < actuators.Length; i++) + { + specs[i] = actuators[i].ActionSpec; + } + return ActionSpec.Combine(specs); + } + + internal static IActuator[] CreateActuatorsFromMap(InputActionMap inputActionMap, + BehaviorParameters behaviorParameters, + InputDevice inputDevice, + InputActuatorEventContext context) + { + var actuators = new IActuator[inputActionMap.actions.Count]; + for (var i = 0; i < inputActionMap.actions.Count; i++) + { + var action = inputActionMap.actions[i]; + var actionLayout = InputSystem.LoadLayout(action.expectedControlType); + var adaptor = (IRLActionInputAdaptor)Activator.CreateInstance(controlTypeToAdaptorType[actionLayout.type]); + actuators[i] = new InputActionActuator(inputDevice, behaviorParameters, action, adaptor, context); + + // Reasonably, the input system starts adding numbers after the first none numbered name + // is added. So for device ID of 0, we use the empty string in the path. + var path = $"{inputDevice?.path}{InputControlPath.Separator}{action.name}"; + action.AddBinding(path, + action.interactions, + action.processors, + mlAgentsControlSchemeName); + action.bindingMask = InputBinding.MaskByGroup(mlAgentsControlSchemeName); + } + return actuators; + } + + /// + /// Set up bindings based on whether or not the BehaviorParameters are working in Heuristic mode or not. + /// If we are working in Heuristic mode, we want the input system to handle everything. If not, we + /// want the neural network to send input from virtual devices. + /// + /// true if the Agent connected to this GameObject is working in + /// Heuristic mode. + /// + internal void UpdateDeviceBinding(bool isInHeuristicMode) + { + if (ReferenceEquals(m_Device, null)) + { + return; + } + var collection = m_AssetCollection ?? m_InputAsset; + m_ControlScheme = CreateControlScheme(m_Device, isInHeuristicMode, m_InputAsset); + if (m_InputAsset.FindControlSchemeIndex(m_ControlScheme.name) != -1) + { + m_InputAsset.RemoveControlScheme(m_ControlScheme.name); + } + + if (!isInHeuristicMode) + { + var inputActionMap = m_InputAsset.FindActionMap(m_PlayerInput.defaultActionMap); + m_InputAsset.AddControlScheme(m_ControlScheme); + collection.bindingMask = InputBinding.MaskByGroup(m_ControlScheme.bindingGroup); + collection.devices = new ReadOnlyArray(new[] { m_Device }); + inputActionMap.bindingMask = collection.bindingMask; + inputActionMap.devices = collection.devices; + } + else + { + var inputActionMap = m_InputAsset.FindActionMap(m_PlayerInput.defaultActionMap); + collection.bindingMask = null; + collection.devices = InputSystem.devices; + inputActionMap.devices = InputSystem.devices; + inputActionMap.bindingMask = null; + } + collection.Enable(); + } + + /// + /// This method creates a control scheme and adds it to the passed in so + /// we can add our device to in order for it to be discovered by the . + /// + /// The virtual device to add to our custom control scheme. + /// if we are in heuristic mode, we need to add other other device requirements. + /// The InputActionAsset to get the device requirements from + internal static InputControlScheme CreateControlScheme(InputControl device, + bool isInHeuristicMode, + InputActionAsset asset) + { + var deviceRequirements = new List + { + new InputControlScheme.DeviceRequirement + { + controlPath = InputBinding.Separator + mlAgentsLayoutName + } + }; + + if (isInHeuristicMode) + { + for (var i = 0; i < asset.controlSchemes.Count; i++) + { + var scheme = asset.controlSchemes[i]; + for (var ii = 0; ii < scheme.deviceRequirements.Count; ii++) + { + deviceRequirements.Add(scheme.deviceRequirements[ii]); + } + } + } + + var inputControlScheme = new InputControlScheme( + mlAgentsControlSchemeName, + deviceRequirements); + + return inputControlScheme; + } + + /// + /// + /// + /// + /// + /// + internal static void RegisterLayoutBuilder(InputActionMap defaultMap, string layoutName) + { + if (InputSystem.LoadLayout(layoutName) == null) + { + InputSystem.RegisterLayoutBuilder(() => + { + // TODO does this need to change based on the action map we use? + var builder = new InputControlLayout.Builder() + .WithName(layoutName) + .WithFormat(mlAgentsLayoutFormat); + for (var i = 0; i < defaultMap.actions.Count; i++) + { + var action = defaultMap.actions[i]; + builder.AddControl(action.name) + .WithLayout(action.expectedControlType); + } + return builder.Build(); + }, layoutName); + } + } + + internal void FindNeededComponents() + { + if (m_InputAsset == null) + { + var assetProvider = GetComponent(); + Assert.IsNotNull(assetProvider); + (m_InputAsset, m_AssetCollection) = assetProvider.GetInputActionAsset(); + Assert.IsNotNull(m_InputAsset, "An InputActionAsset could not be found on IInputActionAssetProvider or PlayerInput."); + } + if (m_PlayerInput == null) + { + m_PlayerInput = GetComponent(); + Assert.IsNotNull(m_PlayerInput, "PlayerInput component could not be found on this GameObject."); + } + + if (m_BehaviorParameters == null) + { + m_BehaviorParameters = GetComponent(); + Assert.IsNotNull(m_BehaviorParameters, "BehaviorParameters were not on the current GameObject."); + m_BehaviorParameters.OnPolicyUpdated += UpdateDeviceBinding; + m_LayoutName = mlAgentsLayoutName + m_BehaviorParameters.BehaviorName; + } + } + + internal void CleanupActionAsset() + { + InputSystem.RemoveLayout(mlAgentsLayoutName); + if (!ReferenceEquals(m_Device, null)) + { + InputSystem.RemoveDevice(m_Device); + } + + if (!ReferenceEquals(m_InputAsset, null) + && m_InputAsset.FindControlSchemeIndex(mlAgentsControlSchemeName) != -1) + { + m_InputAsset.RemoveControlScheme(mlAgentsControlSchemeName); + } + + if (m_Actuators != null) + { + Array.Clear(m_Actuators, 0, m_Actuators.Length); + } + + if (!ReferenceEquals(m_BehaviorParameters, null)) + { + m_BehaviorParameters.OnPolicyUpdated -= UpdateDeviceBinding; + } + + m_InputAsset = null; + m_PlayerInput = null; + m_BehaviorParameters = null; + m_Device = null; + } + + int m_ActuatorsWrittenToEvent; + NativeArray m_InputBufferForFrame; + InputEventPtr m_InputEventPtrForFrame; + public InputEventPtr GetEventForFrame() + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) + { + return new InputEventPtr(); + } +#endif + if (m_ActuatorsWrittenToEvent % m_Actuators.Length == 0 || !m_InputEventPtrForFrame.valid) + { + m_ActuatorsWrittenToEvent = 0; + m_InputEventPtrForFrame = new InputEventPtr(); + m_InputBufferForFrame = StateEvent.From(m_Device, out m_InputEventPtrForFrame); + } + + return m_InputEventPtrForFrame; + } + + public void EventProcessedInFrame() + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) + { + return; + } +#endif + m_ActuatorsWrittenToEvent++; + if (m_ActuatorsWrittenToEvent == m_Actuators.Length && m_InputEventPtrForFrame.valid) + { + InputSystem.QueueEvent(m_InputEventPtrForFrame); + m_InputBufferForFrame.Dispose(); + } + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorComponent.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ee3aa3d02407538ea2239492b20740c29e66e0b3 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33005b124d7f841a191249baf2bacb2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorEventContext.cs b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorEventContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..816c55dbba67051188cf810a93365f239deed0d3 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorEventContext.cs @@ -0,0 +1,79 @@ +#if MLA_INPUT_SYSTEM +using System; +using Unity.Collections; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Unity.MLAgents.Extensions.Input +{ + /// + /// This interface is passed to InputActionActuators to allow them to write to InputEvents. + /// The way this interface should be used is to request the by calling + /// then call before returning from + /// + public class InputActuatorEventContext : IDisposable + { + /// + /// The number of times to allow the use of an event before queuing it in the InputSystem. + /// + public readonly int NumTimesToProcess; + public readonly InputDevice InputDevice; + NativeArray m_EventBuffer; + InputEventPtr m_Ptr; + int m_Count; + +#if UNITY_EDITOR + public static InputActuatorEventContext s_EditorContext = new InputActuatorEventContext(); +#endif + + public InputActuatorEventContext(int numTimesToProcess = 1, InputDevice device = null) + { + NumTimesToProcess = numTimesToProcess; + InputDevice = device; + m_Count = 0; + m_Ptr = new InputEventPtr(); + m_EventBuffer = new NativeArray(); + } + + /// + /// Returns the to write to for the current frame. + /// + /// The to write to for the current frame. + public IDisposable GetEventForFrame(out InputEventPtr eventPtr) + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) + { + eventPtr = new InputEventPtr(); + } +#endif + if (m_Count % NumTimesToProcess == 0) + { + m_Count = 0; + m_EventBuffer = StateEvent.From(InputDevice, out m_Ptr); + } + eventPtr = m_Ptr; + return this; + } + + public void Dispose() + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) + { + return; + } +#endif + m_Count++; + if (m_Count == NumTimesToProcess && m_Ptr.valid) + { + InputSystem.QueueEvent(m_Ptr); + m_EventBuffer.Dispose(); + } + } + } +} +#endif // MLA_INPUT_SYSTEM diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorEventContext.cs.meta b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorEventContext.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bc7c18aeab9cda3c61c37d519a86b7fcbc033e15 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActuatorEventContext.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 76c31df314114ec6bf104e8db4e5568b +timeCreated: 1614892215 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Unity.ML-Agents.Extensions.Input.asmdef b/com.unity.ml-agents.extensions/Runtime/Input/Unity.ML-Agents.Extensions.Input.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..650ad842b1f2241cbd094f6e99023757ab0d6d8c --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Unity.ML-Agents.Extensions.Input.asmdef @@ -0,0 +1,23 @@ +{ + "name": "Unity.ML-Agents.Extensions.Input", + "references": [ + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.InputSystem" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.inputsystem", + "expression": "1.3.0", + "define": "MLA_INPUT_SYSTEM" + } + ], + "noEngineReferences": false +} diff --git a/com.unity.ml-agents.extensions/Runtime/Input/Unity.ML-Agents.Extensions.Input.asmdef.meta b/com.unity.ml-agents.extensions/Runtime/Input/Unity.ML-Agents.Extensions.Input.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..5ad61670a73fce2dda191e9cc1a42766f04f0725 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Input/Unity.ML-Agents.Extensions.Input.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a7b0d999fb2a7493a85c4c7017412530 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors.meta b/com.unity.ml-agents.extensions/Runtime/Sensors.meta new file mode 100644 index 0000000000000000000000000000000000000000..8a56d015934126688e7e629266ae8674ae41a3b3 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a66e31170bb04777b9ade862995a624 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyJointExtractor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyJointExtractor.cs new file mode 100644 index 0000000000000000000000000000000000000000..fca56a479552b2f78d7fc1925d8a73a719c3ea78 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyJointExtractor.cs @@ -0,0 +1,147 @@ +#if UNITY_2020_1_OR_NEWER + +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + public class ArticulationBodyJointExtractor : IJointExtractor + { + ArticulationBody m_Body; + + public ArticulationBodyJointExtractor(ArticulationBody body) + { + m_Body = body; + } + + public int NumObservations(PhysicsSensorSettings settings) + { + return NumObservations(m_Body, settings); + } + + public static int NumObservations(ArticulationBody body, PhysicsSensorSettings settings) + { + if (body == null || body.isRoot) + { + return 0; + } + + var totalCount = 0; + if (settings.UseJointPositionsAndAngles) + { + switch (body.jointType) + { + case ArticulationJointType.RevoluteJoint: + case ArticulationJointType.SphericalJoint: + // Both RevoluteJoint and SphericalJoint have all angular components. + // We use sine and cosine of the angles for the observations. + totalCount += 2 * body.dofCount; + break; + case ArticulationJointType.FixedJoint: + // Since FixedJoint can't moved, there aren't any interesting observations for it. + break; + case ArticulationJointType.PrismaticJoint: + // One linear component + totalCount += body.dofCount; + break; + } + } + + if (settings.UseJointForces) + { + totalCount += body.dofCount; + } + + return totalCount; + } + + public int Write(PhysicsSensorSettings settings, ObservationWriter writer, int offset) + { + if (m_Body == null || m_Body.isRoot) + { + return 0; + } + + var currentOffset = offset; + + // Write joint positions + if (settings.UseJointPositionsAndAngles) + { + switch (m_Body.jointType) + { + case ArticulationJointType.RevoluteJoint: + case ArticulationJointType.SphericalJoint: + // All joint positions are angular + for (var dofIndex = 0; dofIndex < m_Body.dofCount; dofIndex++) + { + var jointRotationRads = m_Body.jointPosition[dofIndex]; + writer[currentOffset++] = Mathf.Sin(jointRotationRads); + writer[currentOffset++] = Mathf.Cos(jointRotationRads); + } + break; + case ArticulationJointType.FixedJoint: + // No observations + break; + case ArticulationJointType.PrismaticJoint: + writer[currentOffset++] = GetPrismaticValue(); + break; + } + } + + if (settings.UseJointForces) + { + for (var dofIndex = 0; dofIndex < m_Body.dofCount; dofIndex++) + { + // take tanh to keep in [-1, 1] + writer[currentOffset++] = (float)System.Math.Tanh(m_Body.jointForce[dofIndex]); + } + } + + return currentOffset - offset; + } + + float GetPrismaticValue() + { + // Prismatic joints should have at most one free axis. + bool limited = false; + var drive = m_Body.xDrive; + if (m_Body.linearLockX == ArticulationDofLock.LimitedMotion) + { + drive = m_Body.xDrive; + limited = true; + } + else if (m_Body.linearLockY == ArticulationDofLock.LimitedMotion) + { + drive = m_Body.yDrive; + limited = true; + } + else if (m_Body.linearLockZ == ArticulationDofLock.LimitedMotion) + { + drive = m_Body.zDrive; + limited = true; + } + + var jointPos = m_Body.jointPosition[0]; + if (limited) + { + // If locked, interpolate between the limits. + var upperLimit = drive.upperLimit; + var lowerLimit = drive.lowerLimit; + if (upperLimit <= lowerLimit) + { + // Invalid limits (probably equal), so don't try to lerp + return 0; + } + var invLerped = Mathf.InverseLerp(lowerLimit, upperLimit, jointPos); + + // Convert [0, 1] -> [-1, 1] + var normalized = 2.0f * invLerped - 1.0f; + return normalized; + } + // take tanh() to keep in [-1, 1] + return (float)System.Math.Tanh(jointPos); + } + } +} +#endif diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyJointExtractor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyJointExtractor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8b5c4d67292348ad12ac70f08e211b99afccd64e --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyJointExtractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 238d15f867b9c4ced9cef331b7420b27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyPoseExtractor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyPoseExtractor.cs new file mode 100644 index 0000000000000000000000000000000000000000..c307da0811e2322600a80c39eb8b5b04ea6bb696 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyPoseExtractor.cs @@ -0,0 +1,107 @@ +#if UNITY_2020_1_OR_NEWER + +using System.Collections.Generic; +using UnityEngine; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Utility class to track a hierarchy of ArticulationBodies. + /// + public class ArticulationBodyPoseExtractor : PoseExtractor + { + ArticulationBody[] m_Bodies; + + public ArticulationBodyPoseExtractor(ArticulationBody rootBody) + { + if (rootBody == null) + { + return; + } + + if (!rootBody.isRoot) + { + Debug.Log("Must pass ArticulationBody.isRoot"); + return; + } + + var bodies = rootBody.GetComponentsInChildren(); + if (bodies[0] != rootBody) + { + Debug.Log("Expected root body at index 0"); + return; + } + + var numBodies = bodies.Length; + m_Bodies = bodies; + int[] parentIndices = new int[numBodies]; + parentIndices[0] = -1; + + var bodyToIndex = new Dictionary(); + for (var i = 0; i < numBodies; i++) + { + bodyToIndex[m_Bodies[i]] = i; + } + + for (var i = 1; i < numBodies; i++) + { + var currentArticBody = m_Bodies[i]; + // Component.GetComponentInParent will consider the provided object as well. + // So start looking from the parent. + var currentGameObject = currentArticBody.gameObject; + var parentGameObject = currentGameObject.transform.parent; + var parentArticBody = parentGameObject.GetComponentInParent(); + parentIndices[i] = bodyToIndex[parentArticBody]; + } + + Setup(parentIndices); + } + + /// + protected internal override Vector3 GetLinearVelocityAt(int index) + { + return m_Bodies[index].velocity; + } + + /// + protected internal override Pose GetPoseAt(int index) + { + var body = m_Bodies[index]; + var go = body.gameObject; + var t = go.transform; + return new Pose { rotation = t.rotation, position = t.position }; + } + + /// + protected internal override Object GetObjectAt(int index) + { + return m_Bodies[index]; + } + + internal ArticulationBody[] Bodies => m_Bodies; + + internal IEnumerable GetEnabledArticulationBodies() + { + if (m_Bodies == null) + { + yield break; + } + + for (var i = 0; i < m_Bodies.Length; i++) + { + var articBody = m_Bodies[i]; + if (articBody == null) + { + // Ignore a virtual root. + continue; + } + + if (IsPoseEnabled(i)) + { + yield return articBody; + } + } + } + } +} +#endif // UNITY_2020_1_OR_NEWER diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyPoseExtractor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyPoseExtractor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..41f7baad442098a16937ca2df86a169580eba9bf --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodyPoseExtractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11fe037a02b4a483cb9342c3454232cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..41e8acde56cf4a1248e29a2f04abde304b667e02 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs @@ -0,0 +1,25 @@ +#if UNITY_2020_1_OR_NEWER +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + public class ArticulationBodySensorComponent : SensorComponent + { + public ArticulationBody RootBody; + + [SerializeField] + public PhysicsSensorSettings Settings = PhysicsSensorSettings.Default(); + public string sensorName; + + /// + /// Creates a PhysicsBodySensor. + /// + /// + public override ISensor[] CreateSensors() + { + return new ISensor[] {new PhysicsBodySensor(RootBody, Settings, sensorName)}; + } + } +} +#endif // UNITY_2020_1_OR_NEWER diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3cdd83ac522d890f5525e39da17649c3c453adac --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/ArticulationBodySensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e57a788acd5e049c6aa9642b450ca318 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f7a212be1eade3cd687d0b398462d671bc6c5470 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs @@ -0,0 +1,61 @@ +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Grid-based sensor that counts the number of detctable objects. + /// + public class CountingGridSensor : GridSensorBase + { + /// + /// Create a CountingGridSensor with the specified configuration. + /// + /// The sensor name + /// The scale of each cell in the grid + /// Number of cells on each side of the grid + /// Tags to be detected by the sensor + /// Compression type + public CountingGridSensor( + string name, + Vector3 cellScale, + Vector3Int gridSize, + string[] detectableTags, + SensorCompressionType compression + ) : base(name, cellScale, gridSize, detectableTags, compression) + { + CompressionType = SensorCompressionType.None; + } + + /// + protected override int GetCellObservationSize() + { + return DetectableTags == null ? 0 : DetectableTags.Length; + } + + /// + protected override bool IsDataNormalized() + { + return false; + } + + /// + protected internal override ProcessCollidersMethod GetProcessCollidersMethod() + { + return ProcessCollidersMethod.ProcessAllColliders; + } + + /// + /// Get object counts for each detectable tags detected in a cell. + /// + /// The game object that was detected within a certain cell + /// The index of the detectedObject's tag in the DetectableObjects list + /// The buffer to write the observation values. + /// The buffer size is configured by . + /// + protected override void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer) + { + dataBuffer[tagIndex] += 1; + } + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..853e1b61452397a8b64a1a0bd48efd0c1ce91652 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a99e8702817b641c2a3ccb6520403e9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/IJointExtractor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/IJointExtractor.cs new file mode 100644 index 0000000000000000000000000000000000000000..401e3abf5009d703e760f2a61ea606010c98bd76 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/IJointExtractor.cs @@ -0,0 +1,27 @@ +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Interface for generating observations from a physical joint or constraint. + /// + public interface IJointExtractor + { + /// + /// Determine the number of observations that would be generated for the particular joint + /// using the provided PhysicsSensorSettings. + /// + /// + /// Number of floats that will be written. + int NumObservations(PhysicsSensorSettings settings); + + /// + /// Write the observations to the ObservationWriter, starting at the specified offset. + /// + /// + /// + /// + /// Number of floats that were written. + int Write(PhysicsSensorSettings settings, ObservationWriter writer, int offset); + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/IJointExtractor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/IJointExtractor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a1ef9c2f7b3f7f04c7567315f35a03aae8347d86 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/IJointExtractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d2a01ea194334a4682d5c8cad4a956b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsBodySensor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsBodySensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..edcfd169664eb939ee6e25851f42a2eaf6ae00dc --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsBodySensor.cs @@ -0,0 +1,131 @@ +using System.Collections.Generic; +#if UNITY_2020_1_OR_NEWER +using UnityEngine; +#endif +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// ISensor implementation that generates observations for a group of Rigidbodies or ArticulationBodies. + /// + public class PhysicsBodySensor : ISensor, IBuiltInSensor + { + ObservationSpec m_ObservationSpec; + string m_SensorName; + + PoseExtractor m_PoseExtractor; + List m_JointExtractors; + PhysicsSensorSettings m_Settings; + + /// + /// Construct a new PhysicsBodySensor + /// + /// + /// + /// + public PhysicsBodySensor( + RigidBodyPoseExtractor poseExtractor, + PhysicsSensorSettings settings, + string sensorName + ) + { + m_PoseExtractor = poseExtractor; + m_SensorName = sensorName; + m_Settings = settings; + + var numJointExtractorObservations = 0; + m_JointExtractors = new List(poseExtractor.NumEnabledPoses); + foreach (var rb in poseExtractor.GetEnabledRigidbodies()) + { + var jointExtractor = new RigidBodyJointExtractor(rb); + numJointExtractorObservations += jointExtractor.NumObservations(settings); + m_JointExtractors.Add(jointExtractor); + } + + var numTransformObservations = m_PoseExtractor.GetNumPoseObservations(settings); + m_ObservationSpec = ObservationSpec.Vector(numTransformObservations + numJointExtractorObservations); + } + +#if UNITY_2020_1_OR_NEWER + public PhysicsBodySensor(ArticulationBody rootBody, PhysicsSensorSettings settings, string sensorName = null) + { + var poseExtractor = new ArticulationBodyPoseExtractor(rootBody); + m_PoseExtractor = poseExtractor; + m_SensorName = string.IsNullOrEmpty(sensorName) ? $"ArticulationBodySensor:{rootBody?.name}" : sensorName; + m_Settings = settings; + + var numJointExtractorObservations = 0; + m_JointExtractors = new List(poseExtractor.NumEnabledPoses); + foreach (var articBody in poseExtractor.GetEnabledArticulationBodies()) + { + var jointExtractor = new ArticulationBodyJointExtractor(articBody); + numJointExtractorObservations += jointExtractor.NumObservations(settings); + m_JointExtractors.Add(jointExtractor); + } + + var numTransformObservations = m_PoseExtractor.GetNumPoseObservations(settings); + m_ObservationSpec = ObservationSpec.Vector(numTransformObservations + numJointExtractorObservations); + } + +#endif + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public int Write(ObservationWriter writer) + { + var numWritten = writer.WritePoses(m_Settings, m_PoseExtractor); + foreach (var jointExtractor in m_JointExtractors) + { + numWritten += jointExtractor.Write(m_Settings, writer, numWritten); + } + return numWritten; + } + + /// + public byte[] GetCompressedObservation() + { + return null; + } + + /// + public void Update() + { + if (m_Settings.UseModelSpace) + { + m_PoseExtractor.UpdateModelSpacePoses(); + } + + if (m_Settings.UseLocalSpace) + { + m_PoseExtractor.UpdateLocalSpacePoses(); + } + } + + /// + public void Reset() { } + + /// + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + + /// + public string GetName() + { + return m_SensorName; + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.PhysicsBodySensor; + } + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsBodySensor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsBodySensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2fce9c0200134a6e5980c92237a86b3a9af4e7f3 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsBodySensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 254640b3578a24bd2838c1fa39f1011a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsSensorSettings.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsSensorSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..d9f9c0d4418c6ce9c6dbc9c483514d9f79809c6c --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsSensorSettings.cs @@ -0,0 +1,152 @@ +using System; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Settings that define the observations generated for physics-based sensors. + /// + [Serializable] + public struct PhysicsSensorSettings + { + /// + /// Whether to use model space (relative to the root body) translations as observations. + /// + public bool UseModelSpaceTranslations; + + /// + /// Whether to use model space (relative to the root body) rotations as observations. + /// + public bool UseModelSpaceRotations; + + /// + /// Whether to use local space (relative to the parent body) translations as observations. + /// + public bool UseLocalSpaceTranslations; + + /// + /// Whether to use local space (relative to the parent body) translations as observations. + /// + public bool UseLocalSpaceRotations; + + /// + /// Whether to use model space (relative to the root body) linear velocities as observations. + /// + public bool UseModelSpaceLinearVelocity; + + /// + /// Whether to use local space (relative to the parent body) linear velocities as observations. + /// + public bool UseLocalSpaceLinearVelocity; + + /// + /// Whether to use joint-specific positions and angles as observations. + /// + public bool UseJointPositionsAndAngles; + + /// + /// Whether to use the joint forces and torques that are applied by the solver as observations. + /// + public bool UseJointForces; + + /// + /// Creates a PhysicsSensorSettings with reasonable default values. + /// + /// + public static PhysicsSensorSettings Default() + { + return new PhysicsSensorSettings + { + UseModelSpaceTranslations = true, + UseModelSpaceRotations = true, + }; + } + + /// + /// Whether any model space observations are being used. + /// + public bool UseModelSpace + { + get { return UseModelSpaceTranslations || UseModelSpaceRotations || UseModelSpaceLinearVelocity; } + } + + /// + /// Whether any local space observations are being used. + /// + public bool UseLocalSpace + { + get { return UseLocalSpaceTranslations || UseLocalSpaceRotations || UseLocalSpaceLinearVelocity; } + } + } + + internal static class ObservationWriterPhysicsExtensions + { + /// + /// Utility method for writing a PoseExtractor to an ObservationWriter. + /// + /// + /// + /// + /// The offset into the ObservationWriter to start writing at. + /// The number of observations written. + public static int WritePoses(this ObservationWriter writer, PhysicsSensorSettings settings, PoseExtractor poseExtractor, int baseOffset = 0) + { + var offset = baseOffset; + if (settings.UseModelSpace) + { + foreach (var pose in poseExtractor.GetEnabledModelSpacePoses()) + { + if (settings.UseModelSpaceTranslations) + { + writer.Add(pose.position, offset); + offset += 3; + } + + if (settings.UseModelSpaceRotations) + { + writer.Add(pose.rotation, offset); + offset += 4; + } + } + + foreach (var vel in poseExtractor.GetEnabledModelSpaceVelocities()) + { + if (settings.UseModelSpaceLinearVelocity) + { + writer.Add(vel, offset); + offset += 3; + } + } + } + + if (settings.UseLocalSpace) + { + foreach (var pose in poseExtractor.GetEnabledLocalSpacePoses()) + { + if (settings.UseLocalSpaceTranslations) + { + writer.Add(pose.position, offset); + offset += 3; + } + + if (settings.UseLocalSpaceRotations) + { + writer.Add(pose.rotation, offset); + offset += 4; + } + } + + foreach (var vel in poseExtractor.GetEnabledLocalSpaceVelocities()) + { + if (settings.UseLocalSpaceLinearVelocity) + { + writer.Add(vel, offset); + offset += 3; + } + } + } + + return offset - baseOffset; + } + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsSensorSettings.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsSensorSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..04f26d1a8a06b8e86d9ef80fec16ac5d12c9b5f2 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/PhysicsSensorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcb7a51f0d5f8404db7b85bd35ecc1fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/PoseExtractor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/PoseExtractor.cs new file mode 100644 index 0000000000000000000000000000000000000000..9777473a95e0a34f7bdd1e34d12042d2c4b32c9d --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/PoseExtractor.cs @@ -0,0 +1,471 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Abstract class for managing the transforms of a hierarchy of objects. + /// This could be GameObjects or Monobehaviours in the scene graph, but this is + /// not a requirement; for example, the objects could be rigid bodies whose hierarchy + /// is defined by Joint configurations. + /// + /// Poses are either considered in model space, which is relative to a root body, + /// or in local space, which is relative to their parent. + /// + public abstract class PoseExtractor + { + int[] m_ParentIndices; + Pose[] m_ModelSpacePoses; + Pose[] m_LocalSpacePoses; + + Vector3[] m_ModelSpaceLinearVelocities; + Vector3[] m_LocalSpaceLinearVelocities; + + bool[] m_PoseEnabled; + + + /// + /// Read iterator for the enabled model space transforms. + /// + public IEnumerable GetEnabledModelSpacePoses() + { + if (m_ModelSpacePoses == null) + { + yield break; + } + + for (var i = 0; i < m_ModelSpacePoses.Length; i++) + { + if (m_PoseEnabled[i]) + { + yield return m_ModelSpacePoses[i]; + } + } + } + + /// + /// Read iterator for the enabled local space transforms. + /// + public IEnumerable GetEnabledLocalSpacePoses() + { + if (m_LocalSpacePoses == null) + { + yield break; + } + + for (var i = 0; i < m_LocalSpacePoses.Length; i++) + { + if (m_PoseEnabled[i]) + { + yield return m_LocalSpacePoses[i]; + } + } + } + + /// + /// Read iterator for the enabled model space linear velocities. + /// + public IEnumerable GetEnabledModelSpaceVelocities() + { + if (m_ModelSpaceLinearVelocities == null) + { + yield break; + } + + for (var i = 0; i < m_ModelSpaceLinearVelocities.Length; i++) + { + if (m_PoseEnabled[i]) + { + yield return m_ModelSpaceLinearVelocities[i]; + } + } + } + + /// + /// Read iterator for the enabled local space linear velocities. + /// + public IEnumerable GetEnabledLocalSpaceVelocities() + { + if (m_LocalSpaceLinearVelocities == null) + { + yield break; + } + + for (var i = 0; i < m_LocalSpaceLinearVelocities.Length; i++) + { + if (m_PoseEnabled[i]) + { + yield return m_LocalSpaceLinearVelocities[i]; + } + } + } + + /// + /// Number of enabled poses in the hierarchy (read-only). + /// + public int NumEnabledPoses + { + get + { + if (m_PoseEnabled == null) + { + return 0; + } + + var numEnabled = 0; + for (var i = 0; i < m_PoseEnabled.Length; i++) + { + numEnabled += m_PoseEnabled[i] ? 1 : 0; + } + + return numEnabled; + } + } + + /// + /// Number of total poses in the hierarchy (read-only). + /// + public int NumPoses + { + get { return m_ModelSpacePoses?.Length ?? 0; } + } + + /// + /// Get the parent index of the body at the specified index. + /// + /// + /// + public int GetParentIndex(int index) + { + if (m_ParentIndices == null) + { + throw new NullReferenceException("No parent indices set"); + } + + return m_ParentIndices[index]; + } + + /// + /// Set whether the pose at the given index is enabled or disabled for observations. + /// + /// + /// + public void SetPoseEnabled(int index, bool val) + { + m_PoseEnabled[index] = val; + } + + public bool IsPoseEnabled(int index) + { + return m_PoseEnabled[index]; + } + + /// + /// Initialize with the mapping of parent indices. + /// The 0th element is assumed to be -1, indicating that it's the root. + /// + /// + protected void Setup(int[] parentIndices) + { +#if DEBUG + if (parentIndices[0] != -1) + { + throw new UnityAgentsException($"Expected parentIndices[0] to be -1, got {parentIndices[0]}"); + } +#endif + m_ParentIndices = parentIndices; + var numPoses = parentIndices.Length; + m_ModelSpacePoses = new Pose[numPoses]; + m_LocalSpacePoses = new Pose[numPoses]; + + m_ModelSpaceLinearVelocities = new Vector3[numPoses]; + m_LocalSpaceLinearVelocities = new Vector3[numPoses]; + + m_PoseEnabled = new bool[numPoses]; + // All poses are enabled by default. Generally we'll want to disable the root though. + for (var i = 0; i < numPoses; i++) + { + m_PoseEnabled[i] = true; + } + } + + /// + /// Return the world space Pose of the i'th object. + /// + /// + /// + protected internal abstract Pose GetPoseAt(int index); + + /// + /// Return the world space linear velocity of the i'th object. + /// + /// + /// + protected internal abstract Vector3 GetLinearVelocityAt(int index); + + /// + /// Return the underlying object at the given index. This is only + /// used for display in the inspector. + /// + /// + /// + protected internal virtual Object GetObjectAt(int index) + { + return null; + } + + /// + /// Update the internal model space transform storage based on the underlying system. + /// + public void UpdateModelSpacePoses() + { + using (TimerStack.Instance.Scoped("UpdateModelSpacePoses")) + { + if (m_ModelSpacePoses == null) + { + return; + } + + var rootWorldTransform = GetPoseAt(0); + var worldToModel = rootWorldTransform.Inverse(); + var rootLinearVel = GetLinearVelocityAt(0); + + for (var i = 0; i < m_ModelSpacePoses.Length; i++) + { + var currentWorldSpacePose = GetPoseAt(i); + var currentModelSpacePose = worldToModel.Multiply(currentWorldSpacePose); + m_ModelSpacePoses[i] = currentModelSpacePose; + + var currentBodyLinearVel = GetLinearVelocityAt(i); + var relativeVelocity = currentBodyLinearVel - rootLinearVel; + m_ModelSpaceLinearVelocities[i] = worldToModel.rotation * relativeVelocity; + } + } + } + + /// + /// Update the internal model space transform storage based on the underlying system. + /// + public void UpdateLocalSpacePoses() + { + using (TimerStack.Instance.Scoped("UpdateLocalSpacePoses")) + { + if (m_LocalSpacePoses == null) + { + return; + } + + for (var i = 0; i < m_LocalSpacePoses.Length; i++) + { + if (m_ParentIndices[i] != -1) + { + var parentTransform = GetPoseAt(m_ParentIndices[i]); + // This is slightly inefficient, since for a body with multiple children, we'll end up inverting + // the transform multiple times. Might be able to trade space for perf here. + var invParent = parentTransform.Inverse(); + var currentTransform = GetPoseAt(i); + m_LocalSpacePoses[i] = invParent.Multiply(currentTransform); + + var parentLinearVel = GetLinearVelocityAt(m_ParentIndices[i]); + var currentLinearVel = GetLinearVelocityAt(i); + m_LocalSpaceLinearVelocities[i] = invParent.rotation * (currentLinearVel - parentLinearVel); + } + else + { + m_LocalSpacePoses[i] = Pose.identity; + m_LocalSpaceLinearVelocities[i] = Vector3.zero; + } + } + } + } + + /// + /// Compute the number of floats needed to represent the poses for the given PhysicsSensorSettings. + /// + /// + /// + public int GetNumPoseObservations(PhysicsSensorSettings settings) + { + int obsPerPose = 0; + obsPerPose += settings.UseModelSpaceTranslations ? 3 : 0; + obsPerPose += settings.UseModelSpaceRotations ? 4 : 0; + obsPerPose += settings.UseLocalSpaceTranslations ? 3 : 0; + obsPerPose += settings.UseLocalSpaceRotations ? 4 : 0; + + obsPerPose += settings.UseModelSpaceLinearVelocity ? 3 : 0; + obsPerPose += settings.UseLocalSpaceLinearVelocity ? 3 : 0; + + return NumEnabledPoses * obsPerPose; + } + + internal void DrawModelSpace(Vector3 offset) + { + UpdateLocalSpacePoses(); + UpdateModelSpacePoses(); + + var pose = m_ModelSpacePoses; + var localPose = m_LocalSpacePoses; + for (var i = 0; i < pose.Length; i++) + { + var current = pose[i]; + if (m_ParentIndices[i] == -1) + { + continue; + } + + var parent = pose[m_ParentIndices[i]]; + Debug.DrawLine(current.position + offset, parent.position + offset, Color.cyan); + var localUp = localPose[i].rotation * Vector3.up; + var localFwd = localPose[i].rotation * Vector3.forward; + var localRight = localPose[i].rotation * Vector3.right; + Debug.DrawLine(current.position + offset, current.position + offset + .1f * localUp, Color.red); + Debug.DrawLine(current.position + offset, current.position + offset + .1f * localFwd, Color.green); + Debug.DrawLine(current.position + offset, current.position + offset + .1f * localRight, Color.blue); + } + } + + /// + /// Simplified representation of the a node in the hierarchy for display. + /// + internal struct DisplayNode + { + /// + /// Underlying object in the hierarchy. Pass to EditorGUIUtility.ObjectContent() for display. + /// + public Object NodeObject; + + /// + /// Whether the poses for the object are enabled. + /// + public bool Enabled; + + /// + /// Depth in the hierarchy, used for adjusting the indent level. + /// + public int Depth; + + /// + /// The index of the corresponding object in the PoseExtractor. + /// + public int OriginalIndex; + } + + /// + /// Get a list of display nodes in depth-first order. + /// + /// + internal IList GetDisplayNodes() + { + if (NumPoses == 0) + { + return Array.Empty(); + } + var nodesOut = new List(NumPoses); + + // List of children for each node + var tree = new Dictionary>(); + for (var i = 0; i < NumPoses; i++) + { + var parent = GetParentIndex(i); + if (i == -1) + { + continue; + } + + if (!tree.ContainsKey(parent)) + { + tree[parent] = new List(); + } + tree[parent].Add(i); + } + + // Store (index, depth) in the stack + var stack = new Stack<(int, int)>(); + stack.Push((0, 0)); + + while (stack.Count != 0) + { + var (current, depth) = stack.Pop(); + var obj = GetObjectAt(current); + + var node = new DisplayNode + { + NodeObject = obj, + Enabled = IsPoseEnabled(current), + OriginalIndex = current, + Depth = depth + }; + nodesOut.Add(node); + + // Add children + if (tree.ContainsKey(current)) + { + // Push to the stack in reverse order + var children = tree[current]; + for (var childIdx = children.Count - 1; childIdx >= 0; childIdx--) + { + stack.Push((children[childIdx], depth + 1)); + } + } + + // Safety check + // This shouldn't even happen, but in case we have a cycle in the graph + // exit instead of looping forever and eating up all the memory. + if (nodesOut.Count > NumPoses) + { + return nodesOut; + } + } + + return nodesOut; + } + } + + /// + /// Extension methods for the Pose struct, in order to improve the readability of some math. + /// + public static class PoseExtensions + { + /// + /// Compute the inverse of a Pose. For any Pose P, + /// P.Inverse() * P + /// will equal the identity pose (within tolerance). + /// + /// + /// + public static Pose Inverse(this Pose pose) + { + var rotationInverse = Quaternion.Inverse(pose.rotation); + var translationInverse = -(rotationInverse * pose.position); + return new Pose { rotation = rotationInverse, position = translationInverse }; + } + + /// + /// This is equivalent to Pose.GetTransformedBy(), but keeps the order more intuitive. + /// + /// + /// + /// + public static Pose Multiply(this Pose pose, Pose rhs) + { + return rhs.GetTransformedBy(pose); + } + + /// + /// Transform the vector by the pose. Conceptually this is equivalent to treating the Pose + /// as a 4x4 matrix and multiplying the augmented vector. + /// See https://en.wikipedia.org/wiki/Affine_transformation#Augmented_matrix for more details. + /// + /// + /// + /// + public static Vector3 Multiply(this Pose pose, Vector3 rhs) + { + return pose.rotation * rhs + pose.position; + } + + // TODO optimize inv(A)*B? + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/PoseExtractor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/PoseExtractor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5a16a709bef3f1384cd6d848e1873b123007a99c --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/PoseExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e0f1e5147a394f428f9a6447c4a8a1f4 +timeCreated: 1591919825 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyJointExtractor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyJointExtractor.cs new file mode 100644 index 0000000000000000000000000000000000000000..1a5795521ff7ecb8601753ec700590a28053929d --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyJointExtractor.cs @@ -0,0 +1,61 @@ +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + public class RigidBodyJointExtractor : IJointExtractor + { + Rigidbody m_Body; + Joint m_Joint; + + public RigidBodyJointExtractor(Rigidbody body) + { + m_Body = body; + m_Joint = m_Body?.GetComponent(); + } + + public int NumObservations(PhysicsSensorSettings settings) + { + return NumObservations(m_Body, m_Joint, settings); + } + + public static int NumObservations(Rigidbody body, Joint joint, PhysicsSensorSettings settings) + { + if (body == null || joint == null) + { + return 0; + } + + var numObservations = 0; + if (settings.UseJointForces) + { + // 3 force and 3 torque values + numObservations += 6; + } + + return numObservations; + } + + public int Write(PhysicsSensorSettings settings, ObservationWriter writer, int offset) + { + if (m_Body == null || m_Joint == null) + { + return 0; + } + + var currentOffset = offset; + if (settings.UseJointForces) + { + // Take tanh of the forces and torques to ensure they're in [-1, 1] + writer[currentOffset++] = (float)System.Math.Tanh(m_Joint.currentForce.x); + writer[currentOffset++] = (float)System.Math.Tanh(m_Joint.currentForce.y); + writer[currentOffset++] = (float)System.Math.Tanh(m_Joint.currentForce.z); + + writer[currentOffset++] = (float)System.Math.Tanh(m_Joint.currentTorque.x); + writer[currentOffset++] = (float)System.Math.Tanh(m_Joint.currentTorque.y); + writer[currentOffset++] = (float)System.Math.Tanh(m_Joint.currentTorque.z); + } + return currentOffset - offset; + } + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyJointExtractor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyJointExtractor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9d3dc91df92163188f3ffc139b2d581cec5563de --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyJointExtractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5014d7ab95c6a44469f447b8a7019746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyPoseExtractor.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyPoseExtractor.cs new file mode 100644 index 0000000000000000000000000000000000000000..38fad10fdeca7cd57e67fa12fa8956057d7b86f5 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyPoseExtractor.cs @@ -0,0 +1,207 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Utility class to track a hierarchy of RigidBodies. These are assumed to have a root node, + /// and child nodes are connect to their parents via Joints. + /// + public class RigidBodyPoseExtractor : PoseExtractor + { + Rigidbody[] m_Bodies; + + /// + /// Optional game object used to determine the root of the poses, separate from the actual Rigidbodies + /// in the hierarchy. For locomotion + /// + GameObject m_VirtualRoot; + + /// + /// Initialize given a root RigidBody. + /// + /// The root Rigidbody. This has no Joints on it (but other Joints may connect to it). + /// Optional GameObject used to find Rigidbodies in the hierarchy. + /// Optional GameObject used to determine the root of the poses, + /// separate from the actual Rigidbodies in the hierarchy. For locomotion tasks, with ragdolls, this provides + /// a stabilized reference frame, which can improve learning. + /// Optional mapping of whether a body's psoe should be enabled or not. + public RigidBodyPoseExtractor(Rigidbody rootBody, GameObject rootGameObject = null, + GameObject virtualRoot = null, Dictionary enableBodyPoses = null) + { + if (rootBody == null) + { + return; + } + + Rigidbody[] rbs; + Joint[] joints; + if (rootGameObject == null) + { + rbs = rootBody.GetComponentsInChildren(); + joints = rootBody.GetComponentsInChildren(); + } + else + { + rbs = rootGameObject.GetComponentsInChildren(); + joints = rootGameObject.GetComponentsInChildren(); + } + + if (rbs == null || rbs.Length == 0) + { + Debug.Log("No rigid bodies found!"); + return; + } + + if (rbs[0] != rootBody) + { + Debug.Log("Expected root body at index 0"); + return; + } + + // Adjust the array if we have a virtual root. + // This will be at index 0, and the "real" root will be parented to it. + if (virtualRoot != null) + { + var extendedRbs = new Rigidbody[rbs.Length + 1]; + for (var i = 0; i < rbs.Length; i++) + { + extendedRbs[i + 1] = rbs[i]; + } + + rbs = extendedRbs; + } + + var bodyToIndex = new Dictionary(rbs.Length); + var parentIndices = new int[rbs.Length]; + parentIndices[0] = -1; + + for (var i = 0; i < rbs.Length; i++) + { + if (rbs[i] != null) + { + bodyToIndex[rbs[i]] = i; + } + } + + foreach (var j in joints) + { + var parent = j.connectedBody; + var child = j.GetComponent(); + + var parentIndex = bodyToIndex[parent]; + var childIndex = bodyToIndex[child]; + parentIndices[childIndex] = parentIndex; + } + + if (virtualRoot != null) + { + // Make sure the original root treats the virtual root as its parent. + parentIndices[1] = 0; + m_VirtualRoot = virtualRoot; + } + + m_Bodies = rbs; + Setup(parentIndices); + + // By default, ignore the root + SetPoseEnabled(0, false); + + if (enableBodyPoses != null) + { + foreach (var pair in enableBodyPoses) + { + var rb = pair.Key; + if (bodyToIndex.TryGetValue(rb, out var index)) + { + SetPoseEnabled(index, pair.Value); + } + } + } + } + + /// + protected internal override Vector3 GetLinearVelocityAt(int index) + { + if (index == 0 && m_VirtualRoot != null) + { + // No velocity on the virtual root + return Vector3.zero; + } + return m_Bodies[index].velocity; + } + + /// + protected internal override Pose GetPoseAt(int index) + { + if (index == 0 && m_VirtualRoot != null) + { + // Use the GameObject's world transform + return new Pose + { + rotation = m_VirtualRoot.transform.rotation, + position = m_VirtualRoot.transform.position + }; + } + + var body = m_Bodies[index]; + return new Pose { rotation = body.rotation, position = body.position }; + } + + /// + protected internal override Object GetObjectAt(int index) + { + if (index == 0 && m_VirtualRoot != null) + { + return m_VirtualRoot; + } + return m_Bodies[index]; + } + + internal Rigidbody[] Bodies => m_Bodies; + + /// + /// Get a dictionary indicating which Rigidbodies' poses are enabled or disabled. + /// + /// + internal Dictionary GetBodyPosesEnabled() + { + var bodyPosesEnabled = new Dictionary(m_Bodies.Length); + for (var i = 0; i < m_Bodies.Length; i++) + { + var rb = m_Bodies[i]; + if (rb == null) + { + continue; // skip virtual root + } + + bodyPosesEnabled[rb] = IsPoseEnabled(i); + } + + return bodyPosesEnabled; + } + + internal IEnumerable GetEnabledRigidbodies() + { + if (m_Bodies == null) + { + yield break; + } + + for (var i = 0; i < m_Bodies.Length; i++) + { + var rb = m_Bodies[i]; + if (rb == null) + { + // Ignore a virtual root. + continue; + } + + if (IsPoseEnabled(i)) + { + yield return rb; + } + } + } + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyPoseExtractor.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyPoseExtractor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8418e2f14696d6937529a7a4e298fa39ec48999e --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodyPoseExtractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 867cab4a07f244518bae3e6fdda14416 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodySensorComponent.cs b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodySensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..283a37b3a560d4505083421cd37f6b31d0cc509f --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodySensorComponent.cs @@ -0,0 +1,113 @@ +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Extensions.Sensors +{ + /// + /// Editor component that creates a PhysicsBodySensor for the Agent. + /// + public class RigidBodySensorComponent : SensorComponent + { + /// + /// The root Rigidbody of the system. + /// + public Rigidbody RootBody; + + /// + /// Optional GameObject used to determine the root of the poses. + /// + public GameObject VirtualRoot; + + /// + /// Settings defining what types of observations will be generated. + /// + [SerializeField] + public PhysicsSensorSettings Settings = PhysicsSensorSettings.Default(); + + /// + /// Optional sensor name. This must be unique for each Agent. + /// + [SerializeField] + public string sensorName; + + [SerializeField] + [HideInInspector] + RigidBodyPoseExtractor m_PoseExtractor; + + /// + /// Creates a PhysicsBodySensor. + /// + /// + public override ISensor[] CreateSensors() + { + var _sensorName = string.IsNullOrEmpty(sensorName) ? $"PhysicsBodySensor:{RootBody?.name}" : sensorName; + return new ISensor[] { new PhysicsBodySensor(GetPoseExtractor(), Settings, _sensorName) }; + } + + /// + /// Get the DisplayNodes of the hierarchy. + /// + /// + internal IList GetDisplayNodes() + { + return GetPoseExtractor().GetDisplayNodes(); + } + + /// + /// Lazy construction of the PoseExtractor. + /// + /// + RigidBodyPoseExtractor GetPoseExtractor() + { + if (m_PoseExtractor == null) + { + ResetPoseExtractor(); + } + + return m_PoseExtractor; + } + + /// + /// Reset the pose extractor, trying to keep the enabled state of the corresponding poses the same. + /// + internal void ResetPoseExtractor() + { + // Get the current enabled state of each body, so that we can reinitialize with them. + Dictionary bodyPosesEnabled = null; + if (m_PoseExtractor != null) + { + bodyPosesEnabled = m_PoseExtractor.GetBodyPosesEnabled(); + } + m_PoseExtractor = new RigidBodyPoseExtractor(RootBody, gameObject, VirtualRoot, bodyPosesEnabled); + } + + /// + /// Toggle the pose at the given index. + /// + /// + /// + internal void SetPoseEnabled(int index, bool enabled) + { + GetPoseExtractor().SetPoseEnabled(index, enabled); + } + + internal bool IsTrivial() + { + if (ReferenceEquals(RootBody, null)) + { + // It *is* trivial, but this will happen when the sensor is being set up, so don't warn then. + return false; + } + var joints = RootBody.GetComponentsInChildren(); + if (joints.Length == 0) + { + if (ReferenceEquals(VirtualRoot, null) || ReferenceEquals(VirtualRoot, RootBody.gameObject)) + { + return true; + } + } + return false; + } + } +} diff --git a/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodySensorComponent.cs.meta b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodySensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..59ba148382c057db2ec0d4be26963d08ae80290c --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Sensors/RigidBodySensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df0f8be9a37d6486498061e2cbc4cd94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef b/com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..416d9e8b7f5a9885850e93e0de2752f4ffba5da9 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef @@ -0,0 +1,8 @@ +{ + "name": "Unity.ML-Agents.Extensions", + "references": [ + "Unity.Barracuda", + "Unity.ML-Agents", + "Unity.ML-Agents.Extensions.Input" + ] +} diff --git a/com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef.meta b/com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..71b01c55fc74a952246f777e51e3bc1285c1dbf8 --- /dev/null +++ b/com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0234213bbb9574f66bb4d93920cc6bb7 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests.meta b/com.unity.ml-agents.extensions/Tests.meta new file mode 100644 index 0000000000000000000000000000000000000000..983c35226f31a46bcafde3a737642e6382185681 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b9992bc4a2804deda293d0d28bbf5e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/.tests.json b/com.unity.ml-agents.extensions/Tests/.tests.json new file mode 100644 index 0000000000000000000000000000000000000000..327abb29e523ac0bf5338190d4ca6c9a765838bc --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/.tests.json @@ -0,0 +1,3 @@ +{ + "createSeparatePackage": false +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime.meta b/com.unity.ml-agents.extensions/Tests/Runtime.meta new file mode 100644 index 0000000000000000000000000000000000000000..39b875009d1a97d8f77ae95bf40813de9f6e85ef --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 302e80f9aed2d40a3899643525e5b706 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input.meta new file mode 100644 index 0000000000000000000000000000000000000000..ad97c88194d045613ca1d3b365ed676c589e0e38 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 27f8e1ce37d7485f814ce50a37101203 +timeCreated: 1612908869 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors.meta new file mode 100644 index 0000000000000000000000000000000000000000..13aedd73ff5c9feaaa2aed8ec2cec35a8be6d6a5 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9b59c16f3e30469ca26156b96351164a +timeCreated: 1613081382 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/ButtonInputActionAdaptorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/ButtonInputActionAdaptorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..7187a7e331897f1403f09f1e16f5c2005e6d2519 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/ButtonInputActionAdaptorTests.cs @@ -0,0 +1,80 @@ +#if MLA_INPUT_TESTS +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + public class ButtonInputActionAdaptorTests : InputTestFixture + { + ButtonInputActionAdaptor m_Adaptor; + InputDevice m_Device; + InputControl m_Control; + InputAction m_Action; + + public override void Setup() + { + base.Setup(); + const string kLayout = @" + { + ""name"" : ""TestDevice"", + ""extend"" : ""HID"", + ""controls"" : [ + { ""name"" : ""button"", ""layout"" : ""Button"" } + ] + }"; + InputSystem.RegisterLayout(kLayout); + m_Device = InputSystem.AddDevice("TestDevice"); + m_Control = (InputControl)m_Device["button"]; + m_Action = new InputAction("action", InputActionType.Button, "/TestDevice/button", null, null, "Button"); + m_Action.Enable(); + m_Adaptor = new ButtonInputActionAdaptor(); + } + + public override void TearDown() + { + base.TearDown(); + m_Adaptor = null; + } + + [Test] + public void TestGenerateActionSpec() + { + var actionSpec = m_Adaptor.GetActionSpecForInputAction(new InputAction()); + Assert.IsTrue(actionSpec.NumDiscreteActions == 1); + Assert.IsTrue(actionSpec.BranchSizes[0] == 2); + } + + [Test] + public void TestQueueEvent() + { + var actionBuffers = new ActionBuffers(ActionSegment.Empty, new ActionSegment(new[] { 1 })); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var val = m_Action.ReadValue(); + Assert.IsTrue(Mathf.Approximately(1f, val)); + } + + [Test] + public void TestWriteToHeuristic() + { + var actionBuffers = new ActionBuffers(ActionSegment.Empty, new ActionSegment(new[] { 1 })); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var buffer = new ActionBuffers(ActionSegment.Empty, new ActionSegment(new[] { 1 })); + m_Adaptor.WriteToHeuristic(m_Action, buffer); + Assert.IsTrue(buffer.DiscreteActions[0] == 1); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/ButtonInputActionAdaptorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/ButtonInputActionAdaptorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b8047c76fb30c88b995452b8e9a140d1aa1fb94c --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/ButtonInputActionAdaptorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f53bd7ea7b154c9a992b48c9fbc34e47 +timeCreated: 1613081399 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/DoubleInputActionAdaptorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/DoubleInputActionAdaptorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..7033b383fe3f828ec2f9e5e8b3924b279bc3c1ce --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/DoubleInputActionAdaptorTests.cs @@ -0,0 +1,78 @@ +#if MLA_INPUT_TESTS +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + public class DoubleInputActionAdaptorTests : InputTestFixture + { + DoubleInputActionAdaptor m_Adaptor; + InputDevice m_Device; + InputControl m_Control; + InputAction m_Action; + + public override void Setup() + { + base.Setup(); + const string kLayout = @" + { + ""name"" : ""TestDevice"", + ""extend"" : ""HID"", + ""controls"" : [ + { ""name"" : ""button"", ""layout"" : ""Double"" } + ] + }"; + InputSystem.RegisterLayout(kLayout); + m_Device = InputSystem.AddDevice("TestDevice"); + m_Control = (InputControl)m_Device["button"]; + m_Action = new InputAction("action", InputActionType.Value, "/TestDevice/button", null, null, "double"); + m_Action.Enable(); + m_Adaptor = new DoubleInputActionAdaptor(); + } + + public override void TearDown() + { + base.TearDown(); + m_Adaptor = null; + } + + [Test] + public void TestGenerateActionSpec() + { + var actionSpec = m_Adaptor.GetActionSpecForInputAction(new InputAction()); + Assert.IsTrue(actionSpec.NumContinuousActions == 1); + } + + [Test] + public void TestQueueEvent() + { + var actionBuffers = new ActionBuffers(new ActionSegment(new[] { 1f }), ActionSegment.Empty); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + Assert.IsTrue(Mathf.Approximately(1f, (float)m_Action.ReadValue())); + } + + [Test] + public void TestWriteToHeuristic() + { + var actionBuffers = new ActionBuffers(new ActionSegment(new[] { 1f }), ActionSegment.Empty); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var buffer = new ActionBuffers(new ActionSegment(new[] { 1f }), ActionSegment.Empty); + m_Adaptor.WriteToHeuristic(m_Action, buffer); + Assert.IsTrue(Mathf.Approximately(buffer.ContinuousActions[0], 1f)); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/DoubleInputActionAdaptorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/DoubleInputActionAdaptorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b5779ccaaa689b07cb2ce7f353ec6428a80f4041 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/DoubleInputActionAdaptorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ae2012c098aa4b57ab09dbf72bcd4efe +timeCreated: 1613074622 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/FloatInputActionAdapatorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/FloatInputActionAdapatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..300dabec0cf771174cbfba045d370c6cbbbbe2d9 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/FloatInputActionAdapatorTests.cs @@ -0,0 +1,79 @@ +#if MLA_INPUT_TESTS +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + public class FloatInputActionAdaptorTests : InputTestFixture + { + FloatInputActionAdaptor m_Adaptor; + InputDevice m_Device; + InputControl m_Control; + InputAction m_Action; + + public override void Setup() + { + base.Setup(); + const string kLayout = @" + { + ""name"" : ""TestDevice"", + ""extend"" : ""HID"", + ""controls"" : [ + { ""name"" : ""button"", ""layout"" : ""Axis"" } + ] + }"; + InputSystem.RegisterLayout(kLayout); + m_Device = InputSystem.AddDevice("TestDevice"); + m_Control = (InputControl)m_Device["button"]; + m_Action = new InputAction("action", InputActionType.Value, "/TestDevice/button", null, null, "Axis"); + m_Action.Enable(); + m_Adaptor = new FloatInputActionAdaptor(); + } + + public override void TearDown() + { + base.TearDown(); + m_Adaptor = null; + } + + [Test] + public void TestGenerateActionSpec() + { + var actionSpec = m_Adaptor.GetActionSpecForInputAction(new InputAction()); + Assert.IsTrue(actionSpec.NumContinuousActions == 1); + } + + [Test] + public void TestQueueEvent() + { + var actionBuffers = new ActionBuffers(new ActionSegment(new[] { 1f }), ActionSegment.Empty); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var val = m_Action.ReadValue(); + Assert.IsTrue(Mathf.Approximately(1f, val)); + } + + [Test] + public void TestWriteToHeuristic() + { + var actionBuffers = new ActionBuffers(new ActionSegment(new[] { 1f }), ActionSegment.Empty); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var buffer = new ActionBuffers(new ActionSegment(new[] { 1f }), ActionSegment.Empty); + m_Adaptor.WriteToHeuristic(m_Action, buffer); + Assert.IsTrue(Mathf.Approximately(1f, buffer.ContinuousActions[0])); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/FloatInputActionAdapatorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/FloatInputActionAdapatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f8abad1d70227425c131acdf8cdf02a5168fb3a8 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/FloatInputActionAdapatorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a85fbb8b3e154eccadbdab826c3c5cae +timeCreated: 1613083958 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/IntegerInputActionAdaptorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/IntegerInputActionAdaptorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..a6d92e7af2739259f79cac3940bf7a4cf0843547 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/IntegerInputActionAdaptorTests.cs @@ -0,0 +1,79 @@ +#if MLA_INPUT_TESTS +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + public class IntegerInputActionAdaptorTests : InputTestFixture + { + IntegerInputActionAdaptor m_Adaptor; + InputDevice m_Device; + InputControl m_Control; + InputAction m_Action; + + public override void Setup() + { + base.Setup(); + const string kLayout = @" + { + ""name"" : ""TestDevice"", + ""extend"" : ""HID"", + ""controls"" : [ + { ""name"" : ""button"", ""layout"" : ""integer"" } + ] + }"; + InputSystem.RegisterLayout(kLayout); + m_Device = InputSystem.AddDevice("TestDevice"); + m_Control = (InputControl)m_Device["button"]; + m_Action = new InputAction("action", InputActionType.Value, "/TestDevice/button", null, null, "int"); + m_Action.Enable(); + m_Adaptor = new IntegerInputActionAdaptor(); + } + + public override void TearDown() + { + base.TearDown(); + m_Adaptor = null; + } + + [Test] + public void TestGenerateActionSpec() + { + var actionSpec = m_Adaptor.GetActionSpecForInputAction(new InputAction()); + Assert.IsTrue(actionSpec.NumDiscreteActions == 1); + Assert.IsTrue(actionSpec.SumOfDiscreteBranchSizes == 2); + } + + [Test] + public void TestQueueEvent() + { + var actionBuffers = new ActionBuffers(ActionSegment.Empty, new ActionSegment(new[] { 1 })); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var val = m_Action.ReadValue(); + Assert.IsTrue(val == 1); + } + + [Test] + public void TestWriteToHeuristic() + { + var actionBuffers = new ActionBuffers(ActionSegment.Empty, new ActionSegment(new[] { 1 })); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var buffer = new ActionBuffers(ActionSegment.Empty, new ActionSegment(new int[1])); + m_Adaptor.WriteToHeuristic(m_Action, buffer); + Assert.IsTrue(buffer.DiscreteActions[0] == 1); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/IntegerInputActionAdaptorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/IntegerInputActionAdaptorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4af1d870816d3110bdc2a82a48f2cd1d217702f8 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/IntegerInputActionAdaptorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a8631ede70c049a7836284217ddfdc94 +timeCreated: 1613082414 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/Vector2InputActionAdaptorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/Vector2InputActionAdaptorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..70f29d9a884461b8d0b32013cb9b8b0044681e16 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/Vector2InputActionAdaptorTests.cs @@ -0,0 +1,81 @@ +#if MLA_INPUT_TESTS +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + public class Vector2InputActionAdaptorTests : InputTestFixture + { + Vector2InputActionAdaptor m_Adaptor; + InputDevice m_Device; + InputControl m_Control; + InputAction m_Action; + + public override void Setup() + { + base.Setup(); + const string kLayout = @" + { + ""name"" : ""TestDevice"", + ""extend"" : ""HID"", + ""controls"" : [ + { ""name"" : ""button"", ""layout"" : ""Vector2"" } + ] + }"; + InputSystem.RegisterLayout(kLayout); + m_Device = InputSystem.AddDevice("TestDevice"); + m_Control = (InputControl)m_Device["button"]; + m_Action = new InputAction("action", InputActionType.Value, "/TestDevice/button", null, null, "Vector2"); + m_Action.Enable(); + m_Adaptor = new Vector2InputActionAdaptor(); + } + + public override void TearDown() + { + base.TearDown(); + m_Adaptor = null; + } + + [Test] + public void TestGenerateActionSpec() + { + var actionSpec = m_Adaptor.GetActionSpecForInputAction(new InputAction()); + Assert.IsTrue(actionSpec.NumContinuousActions == 2); + } + + [Test] + public void TestQueueEvent() + { + var actionBuffers = new ActionBuffers(new ActionSegment(new[] { 0f, 1f }), ActionSegment.Empty); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var val = m_Action.ReadValue(); + Assert.IsTrue(Mathf.Approximately(0f, val.x)); + Assert.IsTrue(Mathf.Approximately(1f, val.y)); + } + + [Test] + public void TestWriteToHeuristic() + { + var actionBuffers = new ActionBuffers(new ActionSegment(new[] { 0f, 1f }), ActionSegment.Empty); + var context = new InputActuatorEventContext(1, m_Device); + using (context.GetEventForFrame(out var eventPtr)) + { + m_Adaptor.WriteToInputEventForAction(eventPtr, m_Action, m_Control, new ActionSpec(), actionBuffers); + } + InputSystem.Update(); + var buffer = new ActionBuffers(new ActionSegment(new float[2]), ActionSegment.Empty); + m_Adaptor.WriteToHeuristic(m_Action, buffer); + Assert.IsTrue(Mathf.Approximately(buffer.ContinuousActions[0], 0f)); + Assert.IsTrue(Mathf.Approximately(buffer.ContinuousActions[1], 1f)); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/Vector2InputActionAdaptorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/Vector2InputActionAdaptorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cfadda331400a4c0ef14446c20efc45f6e8bf5c5 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Adaptors/Vector2InputActionAdaptorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 135c4a0f33174ea090da18b0d67bd169 +timeCreated: 1613082080 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActionActuatorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActionActuatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..dc3f26835941e63b5f05549e0b4b10a36fb5e67a --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActionActuatorTests.cs @@ -0,0 +1,83 @@ +#if MLA_INPUT_TESTS +using NUnit.Framework; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using Unity.MLAgents.Policies; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + class TestAdaptor : IRLActionInputAdaptor + { + public bool eventWritten; + public bool writtenToHeuristic; + + public ActionSpec GetActionSpecForInputAction(InputAction action) + { + return ActionSpec.MakeContinuous(1); + } + + public void WriteToInputEventForAction(InputEventPtr eventPtr, InputAction action, InputControl control, ActionSpec actionSpec, in ActionBuffers actionBuffers) + { + eventWritten = true; + } + + public void WriteToHeuristic(InputAction action, in ActionBuffers actionBuffers) + { + writtenToHeuristic = true; + } + + public void Reset() + { + eventWritten = false; + writtenToHeuristic = false; + } + } + + [TestFixture] + public class InputActionActuatorTests + { + BehaviorParameters m_BehaviorParameters; + InputActionActuator m_Actuator; + TestAdaptor m_Adaptor; + + [SetUp] + public void Setup() + { + var go = new GameObject(); + m_BehaviorParameters = go.AddComponent(); + var action = new InputAction("action"); + m_Adaptor = new TestAdaptor(); + m_Actuator = new InputActionActuator(null, m_BehaviorParameters, action, m_Adaptor, new InputActuatorEventContext(1, InputSystem.AddDevice())); + } + + [Test] + public void TestOnActionReceived() + { + m_BehaviorParameters.BehaviorType = BehaviorType.HeuristicOnly; + m_Actuator.OnActionReceived(new ActionBuffers()); + m_Actuator.Heuristic(new ActionBuffers()); + Assert.IsFalse(m_Adaptor.eventWritten); + Assert.IsTrue(m_Adaptor.writtenToHeuristic); + m_Adaptor.Reset(); + + m_BehaviorParameters.BehaviorType = BehaviorType.Default; + m_Actuator.OnActionReceived(new ActionBuffers()); + Assert.IsFalse(m_Adaptor.eventWritten); + m_Adaptor.Reset(); + + m_BehaviorParameters.Model = ScriptableObject.CreateInstance(); + m_Actuator.OnActionReceived(new ActionBuffers()); + Assert.IsTrue(m_Adaptor.eventWritten); + m_Adaptor.Reset(); + + Assert.AreEqual(m_Actuator.Name, "InputActionActuator-action"); + m_Actuator.ResetData(); + m_Actuator.WriteDiscreteActionMask(null); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActionActuatorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActionActuatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..decea5110f60f5d8986af2bbd4c342c41f8940db --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActionActuatorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c5adebe0f22e48938e7730469f034c70 +timeCreated: 1613070186 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..74849278dc58a65b34751ff4c34f2570a5307d23 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs @@ -0,0 +1,117 @@ +#if MLA_INPUT_TESTS +using System; +using System.Linq; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Extensions.Input; +using Unity.MLAgents.Policies; +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Unity.MLAgents.Extensions.Tests.Runtime.Input +{ + class TestProvider : MonoBehaviour, IInputActionAssetProvider + { + public InputActionAsset asset; + public IInputActionCollection2 collection; + + public (InputActionAsset, IInputActionCollection2) GetInputActionAsset() + { + return (asset, collection); + } + } + public class InputActuatorComponentTests : InputTestFixture + { + InputActionAsset m_Asset; + GameObject m_GameObject; + PlayerInput m_PlayerInput; + BehaviorParameters m_BehaviorParameters; + InputActuatorComponent m_ActuatorComponent; + TestPushBlockActions m_Actions; + TestProvider m_Provider; + + public override void Setup() + { + base.Setup(); + m_Actions = new TestPushBlockActions(); + m_Asset = m_Actions.asset; + m_GameObject = new GameObject(); + m_PlayerInput = m_GameObject.AddComponent(); + m_Provider = m_GameObject.AddComponent(); + m_Provider.asset = m_Asset; + m_Provider.collection = m_Actions; + m_ActuatorComponent = m_GameObject.AddComponent(); + m_BehaviorParameters = m_GameObject.AddComponent(); + m_BehaviorParameters.BehaviorName = "InputTest"; + m_BehaviorParameters.BehaviorType = BehaviorType.Default; + } + + public override void TearDown() + { + m_ActuatorComponent.CleanupActionAsset(); + var objects = GameObject.FindObjectsOfType(); + foreach (var o in objects) + { + UnityEngine.Object.DestroyImmediate(o); + } + base.TearDown(); + } + + [Test] + public void InputActuatorComponentTestCreateActuators() + { + // Use the Assert class to test conditions. + m_PlayerInput.actions = m_Asset; + m_PlayerInput.defaultActionMap = m_Asset.actionMaps[0].name; + var actuators = m_ActuatorComponent.CreateActuators(); + Assert.IsTrue(actuators.Length == 2); + Assert.IsTrue(actuators[0].ActionSpec.Equals(ActionSpec.MakeContinuous(2))); + Assert.IsTrue(actuators[1].ActionSpec.NumDiscreteActions == 1); + + var actuatorComponentActionSpec = m_ActuatorComponent.ActionSpec; + Assert.IsTrue(actuatorComponentActionSpec.BranchSizes.SequenceEqual(new[] {2})); + Assert.IsTrue(actuatorComponentActionSpec.NumContinuousActions == 2); + } + + [Test] + public void InputActuatorComponentTestGenerateActuatorsFromAsset() + { + // Use the Assert class to test conditions. + m_PlayerInput.actions = m_Asset; + m_PlayerInput.defaultActionMap = m_Asset.actionMaps[0].name; + var inputActionMap = m_Asset.FindActionMap(m_PlayerInput.defaultActionMap); + InputActuatorComponent.RegisterLayoutBuilder( + inputActionMap, + "TestLayout"); + + var device = InputSystem.AddDevice("TestLayout"); + + var actuators = InputActuatorComponent.CreateActuatorsFromMap(inputActionMap, m_BehaviorParameters, device, new InputActuatorEventContext()); + Assert.IsTrue(actuators.Length == 2); + Assert.IsTrue(actuators[0].ActionSpec.Equals(ActionSpec.MakeContinuous(2))); + Assert.IsTrue(actuators[1].ActionSpec.NumDiscreteActions == 1); + } + + [Test] + public void InputActuatorComponentTestCreateDevice() + { + // Use the Assert class to test conditions. + m_PlayerInput.actions = m_Asset; + m_PlayerInput.defaultActionMap = m_Asset.actionMaps[0].name; + + // need to call this to load the layout in the input system + InputActuatorComponent.RegisterLayoutBuilder( + m_Asset.FindActionMap(m_PlayerInput.defaultActionMap), + "TestLayout"); + + InputSystem.LoadLayout("TestLayout"); + var device = InputSystem.AddDevice("TestLayout"); + Assert.AreEqual("TestLayout", device.layout); + Assert.IsTrue(device.children.Count == 2); + Assert.AreEqual(device.children[0].path, $"{device.path}{InputControlPath.Separator}movement"); + Assert.AreEqual(device.children[1].path, $"{device.path}{InputControlPath.Separator}jump"); + Assert.NotNull(InputSystem.LoadLayout("TestLayout")); + } + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a506e544f5a1ca8908b5a51a40e1de77534568bd --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/InputActuatorComponentTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1894abc7110a4ab39719618db7eb55a9 +timeCreated: 1612910162 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/TestPushBlockActions.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Input/TestPushBlockActions.cs new file mode 100644 index 0000000000000000000000000000000000000000..d7dff9102d215026b118318958108dfd02c7289a --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/TestPushBlockActions.cs @@ -0,0 +1,318 @@ +#if MLA_INPUT_TESTS +//------------------------------------------------------------------------------ +// +// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator +// version 1.1.0 +// from Assets/ML-Agents/Examples/PushBlock/TestPushBlockActions.inputactions +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Utilities; + +public partial class TestPushBlockActions : IInputActionCollection2, IDisposable +{ + public InputActionAsset asset { get; } + public TestPushBlockActions() + { + asset = InputActionAsset.FromJson(@"{ + ""name"": ""TestPushBlockActions"", + ""maps"": [ + { + ""name"": ""Movement"", + ""id"": ""03a2e5d4-ae81-47f1-a575-0779fb7da538"", + ""actions"": [ + { + ""name"": ""movement"", + ""type"": ""Value"", + ""id"": ""5f47cbc6-de46-4d33-93e2-2b1af4f5996d"", + ""expectedControlType"": ""Vector2"", + ""processors"": """", + ""interactions"": """" + }, + { + ""name"": ""jump"", + ""type"": ""Value"", + ""id"": ""ca5eb833-5dfb-4b7c-880d-6118bd5d1378"", + ""expectedControlType"": ""Integer"", + ""processors"": """", + ""interactions"": """" + } + ], + ""bindings"": [ + { + ""name"": ""gamepad_move"", + ""id"": ""477500ef-6d32-4b84-b9f8-158f18bcb906"", + ""path"": ""2DVector"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""movement"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""6d2537b8-2266-4a50-8575-fb0fe310daa5"", + ""path"": ""/dpad/up"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""50584c83-beb6-4e90-a453-a635c03a761e"", + ""path"": ""/dpad/down"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""44408b8f-27e7-4c6d-b078-7536ba020d1a"", + ""path"": ""/dpad/left"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""f5681423-d3e3-41a5-b85e-0a7642c774aa"", + ""path"": ""/dpad/right"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""keyboard_move"", + ""id"": ""6bcba4bf-5ce0-4005-9e6a-0de2487211b0"", + ""path"": ""2DVector"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""movement"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""63da699e-b354-4e63-b0f8-26fb92abea41"", + ""path"": ""/w"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""39409748-9002-4aff-9a09-cdc05b9708ad"", + ""path"": ""/s"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""0afe45fc-dc45-4310-9c73-7dc3c503addf"", + ""path"": ""/a"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""69fe0335-9e0c-495d-a90d-4b0fcbfd2b34"", + ""path"": ""/d"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""movement"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": """", + ""id"": ""ab696218-63cd-4eb8-9fe1-48a68e32e92f"", + ""path"": ""/space"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""jump"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""7adcb138-5175-4cc4-addc-d2b02cb5f0de"", + ""path"": ""/buttonSouth"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard"", + ""action"": ""jump"", + ""isComposite"": false, + ""isPartOfComposite"": false + } + ] + } + ], + ""controlSchemes"": [ + { + ""name"": ""Keyboard"", + ""bindingGroup"": ""Keyboard"", + ""devices"": [ + { + ""devicePath"": """", + ""isOptional"": true, + ""isOR"": false + }, + { + ""devicePath"": """", + ""isOptional"": true, + ""isOR"": false + } + ] + } + ] +}"); + // Movement + m_Movement = asset.FindActionMap("Movement", throwIfNotFound: true); + m_Movement_movement = m_Movement.FindAction("movement", throwIfNotFound: true); + m_Movement_jump = m_Movement.FindAction("jump", throwIfNotFound: true); + } + + public void Dispose() + { + UnityEngine.Object.Destroy(asset); + } + + public InputBinding? bindingMask + { + get => asset.bindingMask; + set => asset.bindingMask = value; + } + + public ReadOnlyArray? devices + { + get => asset.devices; + set => asset.devices = value; + } + + public ReadOnlyArray controlSchemes => asset.controlSchemes; + + public bool Contains(InputAction action) + { + return asset.Contains(action); + } + + public IEnumerator GetEnumerator() + { + return asset.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Enable() + { + asset.Enable(); + } + + public void Disable() + { + asset.Disable(); + } + public IEnumerable bindings => asset.bindings; + + public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false) + { + return asset.FindAction(actionNameOrId, throwIfNotFound); + } + public int FindBinding(InputBinding bindingMask, out InputAction action) + { + return asset.FindBinding(bindingMask, out action); + } + + // Movement + private readonly InputActionMap m_Movement; + private IMovementActions m_MovementActionsCallbackInterface; + private readonly InputAction m_Movement_movement; + private readonly InputAction m_Movement_jump; + public struct MovementActions + { + private TestPushBlockActions m_Wrapper; + public MovementActions(TestPushBlockActions wrapper) { m_Wrapper = wrapper; } + public InputAction @movement => m_Wrapper.m_Movement_movement; + public InputAction @jump => m_Wrapper.m_Movement_jump; + public InputActionMap Get() { return m_Wrapper.m_Movement; } + public void Enable() { Get().Enable(); } + public void Disable() { Get().Disable(); } + public bool enabled => Get().enabled; + public static implicit operator InputActionMap(MovementActions set) { return set.Get(); } + public void SetCallbacks(IMovementActions instance) + { + if (m_Wrapper.m_MovementActionsCallbackInterface != null) + { + @movement.started -= m_Wrapper.m_MovementActionsCallbackInterface.OnMovement; + @movement.performed -= m_Wrapper.m_MovementActionsCallbackInterface.OnMovement; + @movement.canceled -= m_Wrapper.m_MovementActionsCallbackInterface.OnMovement; + @jump.started -= m_Wrapper.m_MovementActionsCallbackInterface.OnJump; + @jump.performed -= m_Wrapper.m_MovementActionsCallbackInterface.OnJump; + @jump.canceled -= m_Wrapper.m_MovementActionsCallbackInterface.OnJump; + } + m_Wrapper.m_MovementActionsCallbackInterface = instance; + if (instance != null) + { + @movement.started += instance.OnMovement; + @movement.performed += instance.OnMovement; + @movement.canceled += instance.OnMovement; + @jump.started += instance.OnJump; + @jump.performed += instance.OnJump; + @jump.canceled += instance.OnJump; + } + } + } + public MovementActions @Movement => new MovementActions(this); + private int m_KeyboardSchemeIndex = -1; + public InputControlScheme KeyboardScheme + { + get + { + if (m_KeyboardSchemeIndex == -1) m_KeyboardSchemeIndex = asset.FindControlSchemeIndex("Keyboard"); + return asset.controlSchemes[m_KeyboardSchemeIndex]; + } + } + public interface IMovementActions + { + void OnMovement(InputAction.CallbackContext context); + void OnJump(InputAction.CallbackContext context); + } +} +#endif // MLA_INPUT_TESTS diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/TestPushBlockActions.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/TestPushBlockActions.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..18f5eb644ad3221fe30691923dec7407c21eb7a9 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/TestPushBlockActions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 87c358a50faa48c1bba3e5f48a5cb75d +timeCreated: 1613172830 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Unity.ML-Agents.Extensions.Input.Tests.Runtime.asmdef b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Unity.ML-Agents.Extensions.Input.Tests.Runtime.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..7c74185ac98fe1cac20e28a5ea098b3e48e0e40d --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Unity.ML-Agents.Extensions.Input.Tests.Runtime.asmdef @@ -0,0 +1,31 @@ +{ + "name": "Unity.ML-Agents.Extensions.Input.Tests.Runtime", + "references": [ + "Unity.ML-Agents", + "Unity.ML-Agents.Extensions.Input", + "Unity.InputSystem.TestFramework", + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "Unity.InputSystem", + "Unity.Barracuda" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": true, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [ + { + "name": "com.unity.inputsystem", + "expression": "1.1.0-preview.3", + "define": "MLA_INPUT_TESTS" + } + ], + "noEngineReferences": false +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Input/Unity.ML-Agents.Extensions.Input.Tests.Runtime.asmdef.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Unity.ML-Agents.Extensions.Input.Tests.Runtime.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..874e8ded0ea92f1b62393f064cca92a8acb4711c --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Input/Unity.ML-Agents.Extensions.Input.Tests.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca257bdcba9544f71baf0c291c36b05a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/RuntimeExampleTest.cs b/com.unity.ml-agents.extensions/Tests/Runtime/RuntimeExampleTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..4065dce1dc7b2d136dba5c15e33785811aff4f00 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/RuntimeExampleTest.cs @@ -0,0 +1,13 @@ +using NUnit.Framework; + +namespace Unity.MLAgents.Extensions.Tests +{ + internal class RuntimeExampleTest + { + [Test] + public void RuntimeTestMath() + { + Assert.AreEqual(2, 1 + 1); + } + } +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/RuntimeExampleTest.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/RuntimeExampleTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0d17785136ee54f32f33e049de71512d071179b7 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/RuntimeExampleTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be1c02c37007345aa8ad2e44603852b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors.meta new file mode 100644 index 0000000000000000000000000000000000000000..b3ae6c4f70092e54ead01455e92e78a699636691 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 88803e617d2d429aa4838bdaaeb64bac +timeCreated: 1616140923 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodyPoseExtractorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodyPoseExtractorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..d7dada005e841a965f5da2a8bd945373533ac90b --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodyPoseExtractorTests.cs @@ -0,0 +1,63 @@ +#if UNITY_2020_1_OR_NEWER +using UnityEngine; +using NUnit.Framework; +using Unity.MLAgents.Extensions.Sensors; + +namespace Unity.MLAgents.Extensions.Tests.Sensors +{ + public class ArticulationBodyPoseExtractorTests + { + [TearDown] + public void RemoveGameObjects() + { + var objects = GameObject.FindObjectsOfType(); + foreach (var o in objects) + { + UnityEngine.Object.DestroyImmediate(o); + } + } + + [Test] + public void TestNullRoot() + { + var poseExtractor = new ArticulationBodyPoseExtractor(null); + // These should be no-ops + poseExtractor.UpdateLocalSpacePoses(); + poseExtractor.UpdateModelSpacePoses(); + + Assert.AreEqual(0, poseExtractor.NumPoses); + } + + [Test] + public void TestSingleBody() + { + var go = new GameObject(); + var rootArticBody = go.AddComponent(); + var poseExtractor = new ArticulationBodyPoseExtractor(rootArticBody); + Assert.AreEqual(1, poseExtractor.NumPoses); + } + + [Test] + public void TestTwoBodies() + { + // * rootObj + // - rootArticBody + // * leafGameObj + // - leafArticBody + var rootObj = new GameObject(); + var rootArticBody = rootObj.AddComponent(); + + var leafGameObj = new GameObject(); + var leafArticBody = leafGameObj.AddComponent(); + leafGameObj.transform.SetParent(rootObj.transform); + + leafArticBody.jointType = ArticulationJointType.RevoluteJoint; + + var poseExtractor = new ArticulationBodyPoseExtractor(rootArticBody); + Assert.AreEqual(2, poseExtractor.NumPoses); + Assert.AreEqual(-1, poseExtractor.GetParentIndex(0)); + Assert.AreEqual(0, poseExtractor.GetParentIndex(1)); + } + } +} +#endif diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodyPoseExtractorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodyPoseExtractorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a23b4edb891795d6d14d5c221d763bca22f529ec --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodyPoseExtractorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8d41ed0d5b594ef0813fa0935e20b7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodySensorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodySensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..322f934f74d2e13e937e662a1954896fda42d985 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodySensorTests.cs @@ -0,0 +1,139 @@ +#if UNITY_2020_1_OR_NEWER +using UnityEngine; +using NUnit.Framework; +using Unity.MLAgents.Extensions.Sensors; + + +namespace Unity.MLAgents.Extensions.Tests.Sensors +{ + public class ArticulationBodySensorTests + { + [Test] + public void TestNullRootBody() + { + var gameObj = new GameObject(); + + var sensorComponent = gameObj.AddComponent(); + var sensor = sensorComponent.CreateSensors()[0]; + SensorTestHelper.CompareObservation(sensor, new float[0]); + } + + [Test] + public void TestSingleBody() + { + var gameObj = new GameObject(); + var articulationBody = gameObj.AddComponent(); + var sensorComponent = gameObj.AddComponent(); + sensorComponent.RootBody = articulationBody; + sensorComponent.Settings = new PhysicsSensorSettings + { + UseModelSpaceLinearVelocity = true, + UseLocalSpaceTranslations = true, + UseLocalSpaceRotations = true + }; + + var sensor = sensorComponent.CreateSensors()[0]; + sensor.Update(); + var expected = new[] + { + 0f, 0f, 0f, // ModelSpaceLinearVelocity + 0f, 0f, 0f, // LocalSpaceTranslations + 0f, 0f, 0f, 1f // LocalSpaceRotations + }; + SensorTestHelper.CompareObservation(sensor, expected); + Assert.AreEqual(expected.Length, sensor.GetObservationSpec().Shape[0]); + } + + [Test] + public void TestBodiesWithJoint() + { + var rootObj = new GameObject(); + var rootArticBody = rootObj.AddComponent(); + + var middleGamObj = new GameObject(); + var middleArticBody = middleGamObj.AddComponent(); + middleArticBody.AddForce(new Vector3(0f, 1f, 0f)); + middleGamObj.transform.SetParent(rootObj.transform); + middleGamObj.transform.localPosition = new Vector3(13.37f, 0f, 0f); + middleArticBody.jointType = ArticulationJointType.RevoluteJoint; + + var leafGameObj = new GameObject(); + var leafArticBody = leafGameObj.AddComponent(); + leafGameObj.transform.SetParent(middleGamObj.transform); + leafGameObj.transform.localPosition = new Vector3(4.2f, 0f, 0f); + leafArticBody.jointType = ArticulationJointType.PrismaticJoint; + leafArticBody.linearLockZ = ArticulationDofLock.LimitedMotion; + leafArticBody.zDrive = new ArticulationDrive + { + lowerLimit = -3, + upperLimit = 1 + }; + + +#if UNITY_2020_2_OR_NEWER + // ArticulationBody.velocity is read-only in 2020.1 + rootArticBody.velocity = new Vector3(1f, 0f, 0f); + middleArticBody.velocity = new Vector3(0f, 1f, 0f); + leafArticBody.velocity = new Vector3(0f, 0f, 1f); +#endif + + var sensorComponent = rootObj.AddComponent(); + sensorComponent.RootBody = rootArticBody; + sensorComponent.Settings = new PhysicsSensorSettings + { + UseModelSpaceTranslations = true, + UseLocalSpaceTranslations = true, +#if UNITY_2020_2_OR_NEWER + UseLocalSpaceLinearVelocity = true +#endif + }; + + var sensor = sensorComponent.CreateSensors()[0]; + sensor.Update(); + var expected = new[] + { + // Model space + 0f, 0f, 0f, // Root pos + 13.37f, 0f, 0f, // Middle pos + leafGameObj.transform.position.x, 0f, 0f, // Leaf pos + + // Local space + 0f, 0f, 0f, // Root pos + 13.37f, 0f, 0f, // Attached pos + 4.2f, 0f, 0f, // Leaf pos + +#if UNITY_2020_2_OR_NEWER + 0f, 0f, 0f, // Root vel + -1f, 1f, 0f, // Attached vel + 0f, -1f, 1f // Leaf vel +#endif + }; + SensorTestHelper.CompareObservation(sensor, expected); + Assert.AreEqual(expected.Length, sensor.GetObservationSpec().Shape[0]); + + // Update the settings to only process joint observations + sensorComponent.Settings = new PhysicsSensorSettings + { + UseJointForces = true, + UseJointPositionsAndAngles = true, + }; + + sensor = sensorComponent.CreateSensors()[0]; + sensor.Update(); + + expected = new[] + { + // revolute + 0f, 1f, // joint1.position (sin and cos) + 0f, // joint1.force + + // prismatic + 0.5f, // joint2.position (interpolate between limits) + 0f, // joint2.force + }; + SensorTestHelper.CompareObservation(sensor, expected); + Assert.AreEqual(expected.Length, sensor.GetObservationSpec().Shape[0]); + } + } +} +#endif // #if UNITY_2020_1_OR_NEWER diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodySensorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodySensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8f5dfaeb12a7ed92637edc6dc48674c8eb6e0ad8 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/ArticulationBodySensorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bef5eb8df11b549c6a25d698a47ff428 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/AssemblyInfo.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..0cd831e21fe104aa363900304ffe83b48f46ad63 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.EditorTests")] diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/AssemblyInfo.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5eb7568b6e6dd6461e65234de64d3627490f9c2f --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/AssemblyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 60e8a1df689a49cc9f7dca42c93a8100 +timeCreated: 1616141554 \ No newline at end of file diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/CountingGridSensorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/CountingGridSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..4e2054358ba74c25cddd1429650fe483dada3baf --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/CountingGridSensorTests.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections; +using System.Linq; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Extensions.Sensors; +using Object = UnityEngine.Object; + +namespace Unity.MLAgents.Extensions.Tests.Sensors +{ + public class CountingGridSensorTests + { + GameObject testGo; + GameObject boxGo; + TestCountingGridSensorComponent gridSensorComponent; + + // Use built-in tags + const string k_Tag1 = "Player"; + const string k_Tag2 = "Respawn"; + + [UnitySetUp] + public IEnumerator SetupScene() + { + testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + gridSensorComponent = testGo.AddComponent(); + + boxGo = new GameObject("block"); + boxGo.tag = k_Tag1; + boxGo.transform.position = new Vector3(3f, 0f, 3f); + boxGo.AddComponent(); + + yield return null; + } + + [TearDown] + public void ClearScene() + { + Object.DestroyImmediate(boxGo); + Object.DestroyImmediate(testGo); + } + + public class TestCountingGridSensorComponent : GridSensorComponent + { + public void SetParameters(string[] detectableTags) + { + DetectableTags = detectableTags; + CellScale = new Vector3(1, 0.01f, 1); + GridSize = new Vector3Int(10, 1, 10); + ColliderMask = LayerMask.GetMask("Default"); + RotateWithAgent = false; + CompressionType = SensorCompressionType.None; + } + + protected override GridSensorBase[] GetGridSensors() + { + return new GridSensorBase[] + { + new CountingGridSensor( + "TestSensor", + CellScale, + GridSize, + DetectableTags, + CompressionType) + }; + } + } + + // Copied from GridSensorTests in main package + public static float[][] DuplicateArray(float[] array, int numCopies) + { + float[][] duplicated = new float[numCopies][]; + for (int i = 0; i < numCopies; i++) + { + duplicated[i] = array; + } + return duplicated; + } + + // Copied from GridSensorTests in main package + public static void AssertSubarraysAtIndex(float[] total, int[] indicies, float[][] expectedArrays, float[] expectedDefaultArray) + { + int totalIndex = 0; + int subIndex = 0; + int subarrayIndex = 0; + int lenOfData = expectedDefaultArray.Length; + int numArrays = total.Length / lenOfData; + for (int i = 0; i < numArrays; i++) + { + totalIndex = i * lenOfData; + + if (indicies.Contains(i)) + { + subarrayIndex = Array.IndexOf(indicies, i); + for (subIndex = 0; subIndex < lenOfData; subIndex++) + { + Assert.AreEqual(expectedArrays[subarrayIndex][subIndex], total[totalIndex], + "Expected " + expectedArrays[subarrayIndex][subIndex] + " at subarray index " + totalIndex + ", index = " + subIndex + " but was " + total[totalIndex]); + totalIndex++; + } + } + else + { + for (subIndex = 0; subIndex < lenOfData; subIndex++) + { + Assert.AreEqual(expectedDefaultArray[subIndex], total[totalIndex], + "Expected default value " + expectedDefaultArray[subIndex] + " at subarray index " + totalIndex + ", index = " + subIndex + " but was " + total[totalIndex]); + totalIndex++; + } + } + } + } + + [Test] + public void TestCountingSensor() + { + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetParameters(tags); + var gridSensor = (CountingGridSensor)gridSensorComponent.CreateSensors()[0]; + Assert.AreEqual(gridSensor.PerceptionBuffer.Length, 10 * 10 * 2); + + gridSensor.Update(); + + int[] subarrayIndicies = new int[] { 77, 78, 87, 88 }; + float[][] expectedSubarrays = DuplicateArray(new float[] { 1, 0 }, 4); + float[] expectedDefault = new float[] { 0, 0 }; + AssertSubarraysAtIndex(gridSensor.PerceptionBuffer, subarrayIndicies, expectedSubarrays, expectedDefault); + + var boxGo2 = new GameObject("block"); + boxGo2.tag = k_Tag1; + boxGo2.transform.position = new Vector3(3.1f, 0f, 3f); + boxGo2.AddComponent(); + + gridSensor.Update(); + + subarrayIndicies = new[] { 77, 78, 87, 88 }; + expectedSubarrays = DuplicateArray(new float[] { 2, 0 }, 4); + expectedDefault = new float[] { 0, 0 }; + AssertSubarraysAtIndex(gridSensor.PerceptionBuffer, subarrayIndicies, expectedSubarrays, expectedDefault); + Object.DestroyImmediate(boxGo2); + } + } +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/CountingGridSensorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/CountingGridSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f1a711faf830327dfe3a13ec20188659db7e098f --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/CountingGridSensorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a1d17f91519347e0a8692e2816b7c8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/PoseExtractorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/PoseExtractorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..7aa8528a972078ed821fb321f7a8beaae17be68b --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/PoseExtractorTests.cs @@ -0,0 +1,243 @@ +using System; +using UnityEngine; +using NUnit.Framework; +using Unity.MLAgents.Extensions.Sensors; + +namespace Unity.MLAgents.Extensions.Tests.Sensors +{ + public class PoseExtractorTests + { + class BasicPoseExtractor : PoseExtractor + { + protected internal override Pose GetPoseAt(int index) + { + return Pose.identity; + } + + protected internal override Vector3 GetLinearVelocityAt(int index) + { + return Vector3.zero; + } + } + + class UselessPoseExtractor : BasicPoseExtractor + { + public void Init(int[] parentIndices) + { + Setup(parentIndices); + } + } + + [Test] + public void TestEmptyExtractor() + { + var poseExtractor = new UselessPoseExtractor(); + + // These should be no-ops + poseExtractor.UpdateLocalSpacePoses(); + poseExtractor.UpdateModelSpacePoses(); + + Assert.AreEqual(0, poseExtractor.NumPoses); + + // Iterating through poses and velocities should be an empty loop + foreach (var pose in poseExtractor.GetEnabledModelSpacePoses()) + { + throw new UnityAgentsException("This shouldn't happen"); + } + + foreach (var pose in poseExtractor.GetEnabledLocalSpacePoses()) + { + throw new UnityAgentsException("This shouldn't happen"); + } + + foreach (var vel in poseExtractor.GetEnabledModelSpaceVelocities()) + { + throw new UnityAgentsException("This shouldn't happen"); + } + + foreach (var vel in poseExtractor.GetEnabledLocalSpaceVelocities()) + { + throw new UnityAgentsException("This shouldn't happen"); + } + + // Getting a parent index should throw an index exception + Assert.Throws( + () => poseExtractor.GetParentIndex(0) + ); + + // DisplayNodes should be empty + var displayNodes = poseExtractor.GetDisplayNodes(); + Assert.AreEqual(0, displayNodes.Count); + } + + [Test] + public void TestSimpleExtractor() + { + var poseExtractor = new UselessPoseExtractor(); + var parentIndices = new[] { -1, 0 }; + poseExtractor.Init(parentIndices); + Assert.AreEqual(2, poseExtractor.NumPoses); + } + + /// + /// A simple "chain" hierarchy, where each object is parented to the one before it. + /// 0 <- 1 <- 2 <- ... + /// + class ChainPoseExtractor : PoseExtractor + { + public Vector3 offset; + public ChainPoseExtractor(int size) + { + var parents = new int[size]; + for (var i = 0; i < size; i++) + { + parents[i] = i - 1; + } + Setup(parents); + } + + protected internal override Pose GetPoseAt(int index) + { + var rotation = Quaternion.identity; + var translation = offset + new Vector3(index, index, index); + return new Pose + { + rotation = rotation, + position = translation + }; + } + + protected internal override Vector3 GetLinearVelocityAt(int index) + { + return Vector3.zero; + } + } + + [Test] + public void TestChain() + { + var size = 4; + var chain = new ChainPoseExtractor(size); + chain.offset = new Vector3(.5f, .75f, .333f); + + chain.UpdateModelSpacePoses(); + chain.UpdateLocalSpacePoses(); + + + var modelPoseIndex = 0; + foreach (var modelSpace in chain.GetEnabledModelSpacePoses()) + { + if (modelPoseIndex == 0) + { + // Root transforms are currently always the identity. + Assert.IsTrue(modelSpace == Pose.identity); + } + else + { + var expectedModelTranslation = new Vector3(modelPoseIndex, modelPoseIndex, modelPoseIndex); + Assert.IsTrue(expectedModelTranslation == modelSpace.position); + } + modelPoseIndex++; + } + Assert.AreEqual(size, modelPoseIndex); + + var localPoseIndex = 0; + foreach (var localSpace in chain.GetEnabledLocalSpacePoses()) + { + if (localPoseIndex == 0) + { + // Root transforms are currently always the identity. + Assert.IsTrue(localSpace == Pose.identity); + } + else + { + var expectedLocalTranslation = new Vector3(1, 1, 1); + Assert.IsTrue(expectedLocalTranslation == localSpace.position, $"{expectedLocalTranslation} != {localSpace.position}"); + } + + localPoseIndex++; + } + Assert.AreEqual(size, localPoseIndex); + } + + [Test] + public void TestChainDisplayNodes() + { + var size = 4; + var chain = new ChainPoseExtractor(size); + + var displayNodes = chain.GetDisplayNodes(); + Assert.AreEqual(size, displayNodes.Count); + + for (var i = 0; i < size; i++) + { + var displayNode = displayNodes[i]; + Assert.AreEqual(i, displayNode.OriginalIndex); + Assert.AreEqual(null, displayNode.NodeObject); + Assert.AreEqual(i, displayNode.Depth); + Assert.AreEqual(true, displayNode.Enabled); + } + } + + [Test] + public void TestDisplayNodesLoop() + { + // Degenerate case with a loop + var poseExtractor = new UselessPoseExtractor(); + poseExtractor.Init(new[] { -1, 2, 1 }); + + // This just shouldn't blow up + poseExtractor.GetDisplayNodes(); + + // Self-loop + poseExtractor.Init(new[] { -1, 1 }); + + // This just shouldn't blow up + poseExtractor.GetDisplayNodes(); + } + + class BadPoseExtractor : BasicPoseExtractor + { + public BadPoseExtractor() + { + var size = 2; + var parents = new int[size]; + // Parents are intentionally invalid - expect -1 at root + for (var i = 0; i < size; i++) + { + parents[i] = i; + } + Setup(parents); + } + } + + [Test] + public void TestExpectedRoot() + { + Assert.Throws(() => + { + var unused = new BadPoseExtractor(); + }); + } + } + + public class PoseExtensionTests + { + [Test] + public void TestInverse() + { + Pose t = new Pose + { + rotation = Quaternion.AngleAxis(23.0f, new Vector3(1, 1, 1).normalized), + position = new Vector3(-1.0f, 2.0f, 3.0f) + }; + + var inverseT = t.Inverse(); + var product = inverseT.Multiply(t); + Assert.IsTrue(Vector3.zero == product.position); + Assert.IsTrue(Quaternion.identity == product.rotation); + + Assert.IsTrue(Pose.identity == product); + } + } +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/PoseExtractorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/PoseExtractorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ecf5b74dae9b9a892327271855e217a7ecf8b859 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/PoseExtractorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e228666ae564440a3afb6fb5afddd921 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodyPoseExtractorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodyPoseExtractorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..a8a378beb00b23e2f6dc79699c4a387eddd4416c --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodyPoseExtractorTests.cs @@ -0,0 +1,183 @@ +using UnityEngine; +using NUnit.Framework; +using Unity.MLAgents.Extensions.Sensors; + +namespace Unity.MLAgents.Extensions.Tests.Sensors +{ + public class RigidBodyPoseExtractorTests + { + [TearDown] + public void RemoveGameObjects() + { + var objects = GameObject.FindObjectsOfType(); + foreach (var o in objects) + { + UnityEngine.Object.DestroyImmediate(o); + } + } + + [Test] + public void TestNullRoot() + { + var poseExtractor = new RigidBodyPoseExtractor(null); + // These should be no-ops + poseExtractor.UpdateLocalSpacePoses(); + poseExtractor.UpdateModelSpacePoses(); + + Assert.AreEqual(0, poseExtractor.NumPoses); + } + + [Test] + public void TestSingleBody() + { + var go = new GameObject(); + var rootRb = go.AddComponent(); + var poseExtractor = new RigidBodyPoseExtractor(rootRb); + Assert.AreEqual(1, poseExtractor.NumPoses); + + // Also pass the GameObject + poseExtractor = new RigidBodyPoseExtractor(rootRb, go); + Assert.AreEqual(1, poseExtractor.NumPoses); + } + + [Test] + public void TestNoBodiesFound() + { + // Check that if we can't find any bodies under the game object, we get an empty extractor + var gameObj = new GameObject(); + var rootRb = gameObj.AddComponent(); + var otherGameObj = new GameObject(); + var poseExtractor = new RigidBodyPoseExtractor(rootRb, otherGameObj); + Assert.AreEqual(0, poseExtractor.NumPoses); + + // Add an RB under the other GameObject. Constructor will find a rigid body, but not the root. + otherGameObj.AddComponent(); + poseExtractor = new RigidBodyPoseExtractor(rootRb, otherGameObj); + Assert.AreEqual(0, poseExtractor.NumPoses); + } + + [Test] + public void TestTwoBodies() + { + // * rootObj + // - rb1 + // * go2 + // - rb2 + // - joint + var rootObj = new GameObject(); + var rb1 = rootObj.AddComponent(); + + var go2 = new GameObject(); + var rb2 = go2.AddComponent(); + go2.transform.SetParent(rootObj.transform); + + var joint = go2.AddComponent(); + joint.connectedBody = rb1; + + var poseExtractor = new RigidBodyPoseExtractor(rb1); + Assert.AreEqual(2, poseExtractor.NumPoses); + + rb1.position = new Vector3(1, 0, 0); + rb1.rotation = Quaternion.Euler(0, 13.37f, 0); + rb1.velocity = new Vector3(2, 0, 0); + + Assert.AreEqual(rb1.position, poseExtractor.GetPoseAt(0).position); + Assert.IsTrue(rb1.rotation == poseExtractor.GetPoseAt(0).rotation); + Assert.AreEqual(rb1.velocity, poseExtractor.GetLinearVelocityAt(0)); + + // Check DisplayNodes gives expected results + var displayNodes = poseExtractor.GetDisplayNodes(); + Assert.AreEqual(2, displayNodes.Count); + Assert.AreEqual(rb1, displayNodes[0].NodeObject); + Assert.AreEqual(false, displayNodes[0].Enabled); + + Assert.AreEqual(rb2, displayNodes[1].NodeObject); + Assert.AreEqual(true, displayNodes[1].Enabled); + } + + [Test] + public void TestTwoBodiesVirtualRoot() + { + // * virtualRoot + // * rootObj + // - rb1 + // * go2 + // - rb2 + // - joint + var virtualRoot = new GameObject("I am vroot"); + + var rootObj = new GameObject(); + var rb1 = rootObj.AddComponent(); + + var go2 = new GameObject(); + go2.AddComponent(); + go2.transform.SetParent(rootObj.transform); + + var joint = go2.AddComponent(); + joint.connectedBody = rb1; + + var poseExtractor = new RigidBodyPoseExtractor(rb1, null, virtualRoot); + Assert.AreEqual(3, poseExtractor.NumPoses); + + // "body" 0 has no parent + Assert.AreEqual(-1, poseExtractor.GetParentIndex(0)); + + // body 1 has parent 0 + Assert.AreEqual(0, poseExtractor.GetParentIndex(1)); + + var virtualRootPos = new Vector3(0, 2, 0); + var virtualRootRot = Quaternion.Euler(0, 42, 0); + virtualRoot.transform.position = virtualRootPos; + virtualRoot.transform.rotation = virtualRootRot; + + Assert.AreEqual(virtualRootPos, poseExtractor.GetPoseAt(0).position); + Assert.IsTrue(virtualRootRot == poseExtractor.GetPoseAt(0).rotation); + Assert.AreEqual(Vector3.zero, poseExtractor.GetLinearVelocityAt(0)); + + // Same as above test, but using index 1 + rb1.position = new Vector3(1, 0, 0); + rb1.rotation = Quaternion.Euler(0, 13.37f, 0); + rb1.velocity = new Vector3(2, 0, 0); + + Assert.AreEqual(rb1.position, poseExtractor.GetPoseAt(1).position); + Assert.IsTrue(rb1.rotation == poseExtractor.GetPoseAt(1).rotation); + Assert.AreEqual(rb1.velocity, poseExtractor.GetLinearVelocityAt(1)); + } + + [Test] + public void TestBodyPosesEnabledDictionary() + { + // * rootObj + // - rb1 + // * go2 + // - rb2 + // - joint + var rootObj = new GameObject(); + var rb1 = rootObj.AddComponent(); + + var go2 = new GameObject(); + var rb2 = go2.AddComponent(); + go2.transform.SetParent(rootObj.transform); + + var joint = go2.AddComponent(); + joint.connectedBody = rb1; + + var poseExtractor = new RigidBodyPoseExtractor(rb1); + + // Expect the root body disabled and the attached one enabled. + Assert.IsFalse(poseExtractor.IsPoseEnabled(0)); + Assert.IsTrue(poseExtractor.IsPoseEnabled(1)); + var bodyPosesEnabled = poseExtractor.GetBodyPosesEnabled(); + Assert.IsFalse(bodyPosesEnabled[rb1]); + Assert.IsTrue(bodyPosesEnabled[rb2]); + + // Swap the values + bodyPosesEnabled[rb1] = true; + bodyPosesEnabled[rb2] = false; + + var poseExtractor2 = new RigidBodyPoseExtractor(rb1, null, null, bodyPosesEnabled); + Assert.IsTrue(poseExtractor2.IsPoseEnabled(0)); + Assert.IsFalse(poseExtractor2.IsPoseEnabled(1)); + } + } +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodyPoseExtractorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodyPoseExtractorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8d26a9ce5d6d84227464cf02c5e5b88a33f4545a --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodyPoseExtractorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f83546d14c62641b9a2d88f066d120c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodySensorTests.cs b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodySensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..f5b86e99dedd3db6fb755bd9a532ab3adce12af0 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodySensorTests.cs @@ -0,0 +1,143 @@ +using UnityEngine; +using NUnit.Framework; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Extensions.Sensors; + +namespace Unity.MLAgents.Extensions.Tests.Sensors +{ + public static class SensorTestHelper + { + public static void CompareObservation(ISensor sensor, float[] expected) + { + string errorMessage; + bool isOk = SensorHelper.CompareObservation(sensor, expected, out errorMessage); + Assert.IsTrue(isOk, errorMessage); + } + + public static void CompareObservation(ISensor sensor, float[,,] expected) + { + string errorMessage; + bool isOk = SensorHelper.CompareObservation(sensor, expected, out errorMessage); + Assert.IsTrue(isOk, errorMessage); + } + } + + public class RigidBodySensorTests + { + [Test] + public void TestNullRootBody() + { + var gameObj = new GameObject(); + + var sensorComponent = gameObj.AddComponent(); + Assert.IsFalse(sensorComponent.IsTrivial()); + var sensor = sensorComponent.CreateSensors()[0]; + SensorTestHelper.CompareObservation(sensor, new float[0]); + } + + [Test] + public void TestSingleRigidbody() + { + var gameObj = new GameObject(); + var rootRb = gameObj.AddComponent(); + var sensorComponent = gameObj.AddComponent(); + sensorComponent.RootBody = rootRb; + sensorComponent.Settings = new PhysicsSensorSettings + { + UseModelSpaceLinearVelocity = true, + UseLocalSpaceTranslations = true, + UseLocalSpaceRotations = true + }; + Assert.IsTrue(sensorComponent.IsTrivial()); + + var sensor = sensorComponent.CreateSensors()[0]; + sensor.Update(); + + // The root body is ignored since it always generates identity values + // and there are no other bodies to generate observations. + var expected = new float[0]; + Assert.AreEqual(expected.Length, sensor.GetObservationSpec().Shape[0]); + SensorTestHelper.CompareObservation(sensor, expected); + } + + [Test] + public void TestBodiesWithJoint() + { + var rootObj = new GameObject(); + var rootRb = rootObj.AddComponent(); + rootRb.velocity = new Vector3(1f, 0f, 0f); + + var middleGamObj = new GameObject(); + var middleRb = middleGamObj.AddComponent(); + middleRb.velocity = new Vector3(0f, 1f, 0f); + middleGamObj.transform.SetParent(rootObj.transform); + middleGamObj.transform.localPosition = new Vector3(13.37f, 0f, 0f); + var joint = middleGamObj.AddComponent(); + joint.connectedBody = rootRb; + + var leafGameObj = new GameObject(); + var leafRb = leafGameObj.AddComponent(); + leafRb.velocity = new Vector3(0f, 0f, 1f); + leafGameObj.transform.SetParent(middleGamObj.transform); + leafGameObj.transform.localPosition = new Vector3(4.2f, 0f, 0f); + var joint2 = leafGameObj.AddComponent(); + joint2.connectedBody = middleRb; + + var virtualRoot = new GameObject(); + + var sensorComponent = rootObj.AddComponent(); + sensorComponent.RootBody = rootRb; + sensorComponent.Settings = new PhysicsSensorSettings + { + UseModelSpaceTranslations = true, + UseLocalSpaceTranslations = true, + UseLocalSpaceLinearVelocity = true + }; + sensorComponent.VirtualRoot = virtualRoot; + Assert.IsFalse(sensorComponent.IsTrivial()); + + var sensor = sensorComponent.CreateSensors()[0]; + sensor.Update(); + + // Note that the VirtualRoot is ignored from the observations + var expected = new[] + { + // Model space + 0f, 0f, 0f, // Root pos + 13.37f, 0f, 0f, // Middle pos + leafGameObj.transform.position.x, 0f, 0f, // Leaf pos + + // Local space + 0f, 0f, 0f, // Root pos + 13.37f, 0f, 0f, // Attached pos + 4.2f, 0f, 0f, // Leaf pos + + 1f, 0f, 0f, // Root vel (relative to virtual root) + -1f, 1f, 0f, // Attached vel + 0f, -1f, 1f // Leaf vel + }; + Assert.AreEqual(expected.Length, sensor.GetObservationSpec().Shape[0]); + SensorTestHelper.CompareObservation(sensor, expected); + + // Update the settings to only process joint observations + sensorComponent.Settings = new PhysicsSensorSettings + { + UseJointPositionsAndAngles = true, + UseJointForces = true, + }; + + sensor = sensorComponent.CreateSensors()[0]; + sensor.Update(); + + expected = new[] + { + 0f, 0f, 0f, // joint1.force + 0f, 0f, 0f, // joint1.torque + 0f, 0f, 0f, // joint2.force + 0f, 0f, 0f, // joint2.torque + }; + SensorTestHelper.CompareObservation(sensor, expected); + Assert.AreEqual(expected.Length, sensor.GetObservationSpec().Shape[0]); + } + } +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodySensorTests.cs.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodySensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6837d9c5492533d8adee43f5b068ac2ed3c9029b --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Sensors/RigidBodySensorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b8b560acc80a4ddab0239d0535d5324 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Unity.ML-Agents.Extensions.Tests.asmdef b/com.unity.ml-agents.extensions/Tests/Runtime/Unity.ML-Agents.Extensions.Tests.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..14da330bec5abce4818001e0adcd723eed79cc99 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Unity.ML-Agents.Extensions.Tests.asmdef @@ -0,0 +1,12 @@ +{ + "name": "Unity.ML-Agents.Extensions.Tests", + "references": [ + "Unity.ML-Agents.Extensions", + "Unity.ML-Agents" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], + "excludePlatforms": [] +} diff --git a/com.unity.ml-agents.extensions/Tests/Runtime/Unity.ML-Agents.Extensions.Tests.asmdef.meta b/com.unity.ml-agents.extensions/Tests/Runtime/Unity.ML-Agents.Extensions.Tests.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..05ab872e43836d315f3df186294dd47afdbfb9e0 --- /dev/null +++ b/com.unity.ml-agents.extensions/Tests/Runtime/Unity.ML-Agents.Extensions.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 30cbc899aa9234b7c93bfcba45275b9c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents.extensions/package.json b/com.unity.ml-agents.extensions/package.json new file mode 100644 index 0000000000000000000000000000000000000000..26bea420d3090e8a414799815d27ddabe46a6e61 --- /dev/null +++ b/com.unity.ml-agents.extensions/package.json @@ -0,0 +1,11 @@ +{ + "name": "com.unity.ml-agents.extensions", + "displayName": "ML Agents Extensions", + "version": "0.6.1-preview", + "unity": "2022.3", + "description": "A source-only package for new features based on ML-Agents", + "dependencies": { + "com.unity.ml-agents": "2.3.0-exp.4", + "com.unity.modules.physics": "1.0.0" + } +} diff --git a/com.unity.ml-agents.extensions/package.json.meta b/com.unity.ml-agents.extensions/package.json.meta new file mode 100644 index 0000000000000000000000000000000000000000..375a7c7db086dda302fd07bff466a1d9a1e8ccda --- /dev/null +++ b/com.unity.ml-agents.extensions/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a12a065df9b6f44d0b9a8e85d08d1cef +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/.gitignore b/com.unity.ml-agents/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b40e78e61a6a1c835a4116528a96a615f72fd0f2 --- /dev/null +++ b/com.unity.ml-agents/.gitignore @@ -0,0 +1,30 @@ +artifacts/** +build/** +.build_script/** +node_modules/** +.DS_Store +.npmrc +!Documentation~ +!.Documentation +npm-debug.log +build.sh.meta +build.bat.meta +.idea/ +!Samples/*/*.unitypackage + +/[Ll]ibrary/ +/Logs/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/Assets/AssetStoreTools* +/Assets/Plugins* +/Assets/Demonstrations* +/csharp_timers.json + +# Visual Studio 2015 cache directory +/.vs/ + +*.api +*.api.meta diff --git a/com.unity.ml-agents/.npmignore b/com.unity.ml-agents/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..0f2d8d322c2f837b95765e290e6d2cea98e848d5 --- /dev/null +++ b/com.unity.ml-agents/.npmignore @@ -0,0 +1,20 @@ +artifacts/** +build/** +.build_script/** +node_modules/** +Documentation/ApiDocs/** +Documentation~/ApiDocs/** +.DS_Store +.npmrc +.npmignore +.gitignore +CONTRIBUTING.md +CONTRIBUTING.md.meta +QAReport.md +QAReport.md.meta +.gitlab-ci.yml +build.sh +build.sh.meta +build.bat +build.bat.meta +upm-ci.log diff --git a/com.unity.ml-agents/CHANGELOG.md b/com.unity.ml-agents/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..ca528f4d1200b7e057206edff9feb5b1f2072e07 --- /dev/null +++ b/com.unity.ml-agents/CHANGELOG.md @@ -0,0 +1,924 @@ +# Changelog + +All notable changes to this package will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to +[Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] +### Major Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The minimum supported Unity version was updated to 2022.3. (#) +- Added batched raycast sensor option. (#) + +#### ml-agents / ml-agents-envs + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Added DecisionStep parameter to DecisionRequester (#) + - This will allow the staggering of execution timing when using multi-agents, leading to more stable performance. + +#### ml-agents / ml-agents-envs +- Added training config feature to evenly distribute checkpoints throughout training. (#5842) +- Updated training area replicator to add a condition to only replicate training areas when running a build. (#5842) + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +#### ml-agents / ml-agents-envs + + +## [2.3.0-exp.3] - 2022-11-21 +### Major Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The minimum supported Unity version was updated to 2021.3. (#) + +#### ml-agents / ml-agents-envs +- Add your trainers to the package using Ml-Agents Custom Trainers plugin. (#) + - ML-Agents Custom Trainers plugin is an extensible plugin system to define new trainers based on the + High level trainer API, read more [here](../docs/Python-Custom-Trainer-Plugin.md). +- Refactored core modules to make ML-Agents internal classes more generalizable to various RL algorithms. (#) +- The minimum supported Python version for ML-agents has changed to 3.8.13. (#) +- The minimum supported version of PyTorch was changed to 1.8.0. (#) +- Add shared critic configurability for PPO. (#) +- We moved `UnityToGymWrapper` and `PettingZoo` API to `ml-agents-envs` package. All these environments will be +versioned under `ml-agents-envs` package in the future (#) + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Added switch to RayPerceptionSensor to allow rays to be ordered left to right. (#26) + - Current alternating order is still the default but will be deprecated. +- Added support for enabling/disabling camera object attached to camera sensor in order to improve performance. (#31) + +#### ml-agents / ml-agents-envs +- Renaming the path that shadows torch with "mlagents/trainers/torch_entities" and update respective imports (#) + + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +#### ml-agents / ml-agents-envs + + +## [2.3.0-exp.2] - 2022-03-28 +### Major Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +#### ml-agents / ml-agents-envs +- Refactored to support the new ML-Agents Pro package. +- The minimum supported Python version for ML-Agents-envs is changed to 3.7.2 (#) +- Added support for the PettingZoo multi-agent API (#) +- Refactored `gym-unity` into the `ml-agents-envs` package (#) + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Upgrade barracuda dependency to 3.0.0 (#) +#### ml-agents / ml-agents-envs +- Added the new unity_vec_env file to the ml-agents-envs module +- Extended support to python 3.9.10 + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +#### ml-agents / ml-agents-envs + +## [2.2.1-exp.1] - 2022-01-14 +### Major Changes + +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The minimum supported Unity version was updated to 2020.3. (#5673) +- Added a new feature to replicate training areas dynamically during runtime. (#5568) +- Update Barracuda to 2.3.1-preview (#5591) +- Update Input System to 1.3.0 (#5661) + +#### ml-agents / ml-agents-envs / gym-unity (Python) + +### Minor Changes + +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Added the capacity to initialize behaviors from any checkpoint and not just the latest one (#5525) +- Added the ability to get a read-only view of the stacked observations (#5523) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Set gym version in gym-unity to gym release 0.20.0 (#5540) +- Added support for having `beta`, `epsilon`, and `learning rate` on separate schedules (affects only PPO and POCA). (#5538) +- Changed default behavior to restart crashed Unity environments rather than exiting. (#5553) + - Rate & lifetime limits on this are configurable via 3 new yaml options + 1. env_params.max_lifetime_restarts (--max-lifetime-restarts) [default=10] + 2. env_params.restarts_rate_limit_n (--restarts-rate-limit-n) [default=1] + 3. env_params.restarts_rate_limit_period_s (--restarts-rate-limit-period-s) [default=60] +- Deterministic action selection is now supported during training and inference(#5619) + - Added a new `--deterministic` cli flag to deterministically select the most probable actions in policy. The same thing can + be achieved by adding `deterministic: true` under `network_settings` of the run options configuration.(#5597) + - Extra tensors are now serialized to support deterministic action selection in onnx. (#5593) + - Support inference with deterministic action selection in editor (#5599) +- Added minimal analytics collection to LL-API (#5511) +- Update Colab notebooks for GridWorld example with DQN illustrating the use of the Python API and how to export to ONNX (#5643) + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Update gRPC native lib to universal for arm64 and x86_64. This change should enable ml-agents usage on mac M1 (#5283, #5519) +- Fixed a bug where ml-agents code wouldn't compile on platforms that didn't support analytics (PS4/5, XBoxOne) (#5628) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed a bug where the critics were not being normalized during training. (#5595) +- Fixed the bug where curriculum learning would crash because of the incorrect run_options parsing. (#5586) +- Fixed a bug in multi-agent cooperative training where agents might not receive all of the states of +terminated teammates. (#5441) +- Fixed wrong attribute name in argparser for torch device option (#5433)(#5467) +- Fixed conflicting CLI and yaml options regarding resume & initialize_from (#5495) +- Fixed failing tests for gym-unity due to gym 0.20.0 release (#5540) +- Fixed a bug in VAIL where the variational bottleneck was not properly passing gradients (#5546) +- Harden user PII protection logic and extend TrainingAnalytics to expose detailed configuration parameters. (#5512) + +## [2.1.0-exp.1] - 2021-06-09 +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- update Barracuda to 2.0.0-pre.3. (#5385) +- Fixed NullReferenceException when adding Behavior Parameters with no Agent. (#5382) +- Add stacking option in Editor for `VectorSensorComponent`. (#5376) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Lock cattrs dependency version to 1.6. (#5397) +- Added a fully connected visual encoder for environments with very small image inputs. (#5351) +- Colab notebooks illustrating the use of the Python API are now part of the repository. (#5399) + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- RigidBodySensorComponent now displays a warning if it's used in a way that won't generate useful observations. (#5387) +- Update the documentation with a note saying that `GridSensor` does not work in 2D environments. (#5396) +- Fixed an error where sensors would not reset properly before collecting the last observation at the end of an +episode. (#5375) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The calculation of the target entropy of SAC with continuous actions was incorrect and has been fixed. (#5372) +- Fixed an issue where the histogram stats would not be reported correctly in TensorBoard. (#5410) +- Fixed error when importing models which use the ResNet encoder. (#5358) + + +## [2.0.0-exp.1] - 2021-04-22 +### Major Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The minimum supported Unity version was updated to 2019.4. (#5166) +- Several breaking interface changes were made. See the +[Migration Guide](https://github.com/Unity-Technologies/ml-agents/blob/release_17_docs/docs/Migrating.md) for more +details. +- Some methods previously marked as `Obsolete` have been removed. If you were using these methods, you need to replace them with their supported counterpart. +- The interface for disabling discrete actions in `IDiscreteActionMask` has changed. +`WriteMask(int branch, IEnumerable actionIndices)` was replaced with +`SetActionEnabled(int branch, int actionIndex, bool isEnabled)`. (#5060) +- IActuator now implements IHeuristicProvider. (#5110) +- `ISensor.GetObservationShape()` was removed, and `GetObservationSpec()` was added. The `ITypedSensor` +and `IDimensionPropertiesSensor` interfaces were removed. (#5127) +- `ISensor.GetCompressionType()` was removed, and `GetCompressionSpec()` was added. The `ISparseChannelSensor` +interface was removed. (#5164) +- The abstract method `SensorComponent.GetObservationShape()` was no longer being called, so it has been removed. (#5172) +- `SensorComponent.CreateSensor()` was replaced with `SensorComponent.CreateSensors()`, which returns an `ISensor[]`. (#5181) +- `Match3Sensor` was refactored to produce cell and special type observations separately, and `Match3SensorComponent` now +produces two `Match3Sensor`s (unless there are no special types). Previously trained models will have different observation +sizes and will need to be retrained. (#5181) +- The `AbstractBoard` class for integration with Match-3 games was changed to make it easier to support boards with +different sizes using the same model. For a summary of the interface changes, please see the Migration Guide. (##5189) +- Updated the Barracuda package to version `1.4.0-preview`(#5236) +- `GridSensor` has been refactored and moved to main package, with changes to both sensor interfaces and behaviors. +Exsisting GridSensor created by extension package will not work in newer version. Previously trained models will +need to be retrained. Please see the Migration Guide for more details. (#5256) +- Models trained with 1.x versions of ML-Agents will no longer work at inference if they were trained using recurrent neural networks (#5254) + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The `.onnx` models input names have changed. All input placeholders will now use the prefix `obs_` removing the distinction between visual and vector observations. In addition, the inputs and outputs of LSTM changed. Models created with this version will not be usable with previous versions of the package (#5080, #5236) +- The `.onnx` models discrete action output now contains the discrete actions values and not the logits. Models created with this version will not be usable with previous versions of the package (#5080) +- Added ML-Agents package settings. (#5027) +- Make com.unity.modules.unityanalytics an optional dependency. (#5109) +- Make com.unity.modules.physics and com.unity.modules.physics2d optional dependencies. (#5112) +- The default `InferenceDevice` is now `InferenceDevice.Default`, which is equivalent to `InferenceDevice.Burst`. If you +depend on the previous behavior, you can explicitly set the Agent's `InferenceDevice` to `InferenceDevice.CPU`. (#5175) +- Added support for `Goal Signal` as a type of observation. Trainers can now use HyperNetworks to process `Goal Signal`. Trainers with HyperNetworks are more effective at solving multiple tasks. (#5142, #5159, #5149) +- Modified the [GridWorld environment](https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Learning-Environment-Examples.md#gridworld) to use the new `Goal Signal` feature. (#5193) +- `DecisionRequester.ShouldRequestDecision()` and `ShouldRequestAction()`methods were added. These are used to +determine whether `Agent.RequestDecision()` and `Agent.RequestAction()` are called (respectively). (#5223) +- `RaycastPerceptionSensor` now caches its raycast results; they can be accessed via `RayPerceptionSensor.RayPerceptionOutput`. (#5222) +- `ActionBuffers` are now reset to zero before being passed to `Agent.Heuristic()` and +`IHeuristicProvider.Heuristic()`. (#5227) +- `Agent` will now call `IDisposable.Dispose()` on all `ISensor`s that implement the `IDisposable` interface. (#5233) +- `CameraSensor`, `RenderTextureSensor`, and `Match3Sensor` will now reuse their `Texture2D`s, reducing the +amount of memory that needs to be allocated during runtime. (#5233) +- Optimzed `ObservationWriter.WriteTexture()` so that it doesn't call `Texture2D.GetPixels32()` for `RGB24` textures. +This results in much less memory being allocated during inference with `CameraSensor` and `RenderTextureSensor`. (#5233) +- The Match-3 integration utilities were moved from `com.unity.ml-agents.extensions` to `com.unity.ml-agents`. (#5259) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Some console output have been moved from `info` to `debug` and will not be printed by default. If you want all messages to be printed, you can run `mlagents-learn` with the `--debug` option or add the line `debug: true` at the top of the yaml config file. (#5211) +- When using a configuration YAML, it is required to define all behaviors found in a Unity +executable in the trainer configuration YAML, or specify `default_settings`. (#5210) +- The embedding size of attention layers used when a BufferSensor is in the scene has been changed. It is now fixed to 128 units. It might be impossible to resume training from a checkpoint of a previous version. (#5272) + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Fixed a bug where sensors and actuators could get sorted inconsistently on different systems to different Culture +settings. Unfortunately, this may require retraining models if it changes the resulting order of the sensors +or actuators on your system. (#5194) +- Removed additional memory allocations that were occurring due to assert messages and iterating of DemonstrationRecorders. (#5246) +- Fixed a bug where agent trying to access unintialized fields when creating a new RayPerceptionSensorComponent on an agent. (#5261) +- Fixed a bug where the DemonstrationRecorder would throw a null reference exception if Num Steps To Record was > 0 and Record was turned off. (#5274) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed a bug where --results-dir has no effect. (#5269) +- Fixed a bug where old `.pt` checkpoints were not deleted during training. (#5271) +- The `UnityToGymWrapper` initializer now accepts an optional `action_space_seed` seed. If this is specified, it will +be used to set the random seed on the resulting action space. (#5303) + + +## [1.9.1-preview] - 2021-04-13 +### Major Changes +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The `--resume` flag now supports resuming experiments with additional reward providers or + loading partial models if the network architecture has changed. See + [here](https://github.com/Unity-Technologies/ml-agents/blob/release_16_docs/docs/Training-ML-Agents.md#loading-an-existing-model) + for more details. (#5213) + +### Bug Fixes +#### com.unity.ml-agents (C#) +- Fixed erroneous warnings when using the Demonstration Recorder. (#5216) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed an issue which was causing increased variance when using LSTMs. Also fixed an issue with LSTM when used with POCA and `sequence_length` < `time_horizon`. (#5206) +- Fixed a bug where the SAC replay buffer would not be saved out at the end of a run, even if `save_replay_buffer` was enabled. (#5205) +- ELO now correctly resumes when loading from a checkpoint. (#5202) +- In the Python API, fixed `validate_action` to expect the right dimensions when `set_action_single_agent` is called. (#5208) +- In the `GymToUnityWrapper`, raise an appropriate warning if `step()` is called after an environment is done. (#5204) +- Fixed an issue where using one of the `gym` wrappers would override user-set log levels. (#5201) +## [1.9.0-preview] - 2021-03-17 +### Major Changes +#### com.unity.ml-agents (C#) +- The `BufferSensor` and `BufferSensorComponent` have been added. They allow the Agent to observe variable number of entities. For an example, see the [Sorter environment](https://github.com/Unity-Technologies/ml-agents/blob/release_15_docs/docs/Learning-Environment-Examples.md#sorter). (#4909) +- The `SimpleMultiAgentGroup` class and `IMultiAgentGroup` interface have been added. These allow Agents to be given rewards and + end episodes in groups. For examples, see the [Cooperative Push Block](https://github.com/Unity-Technologies/ml-agents/blob/release_15_docs/docs/Learning-Environment-Examples.md#cooperative-push-block), [Dungeon Escape](https://github.com/Unity-Technologies/ml-agents/blob/release_15_docs/docs/Learning-Environment-Examples.md#dungeon-escape) and [Soccer](https://github.com/Unity-Technologies/ml-agents/blob/release_15_docs/docs/Learning-Environment-Examples.md#soccer-twos) environments. (#4923) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The MA-POCA trainer has been added. This is a new trainer that enables Agents to learn how to work together in groups. Configure + `poca` as the trainer in the configuration YAML after instantiating a `SimpleMultiAgentGroup` to use this feature. (#5005) + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Updated com.unity.barracuda to 1.3.2-preview. (#5084) +- Added 3D Ball to the `com.unity.ml-agents` samples. (#5077) +- Make com.unity.modules.unityanalytics an optional dependency. (#5109) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The `encoding_size` setting for RewardSignals has been deprecated. Please use `network_settings` instead. (#4982) +- Sensor names are now passed through to `ObservationSpec.name`. (#5036) + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- An issue that caused `GAIL` to fail for environments where agents can terminate episodes by self-sacrifice has been fixed. (#4971) +- Made the error message when observations of different shapes are sent to the trainer clearer. (#5030) +- An issue that prevented curriculums from incrementing with self-play has been fixed. (#5098) + +## [1.8.1-preview] - 2021-03-08 +### Minor Changes +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The `cattrs` version dependency was updated to allow `>=1.1.0` on Python 3.8 or higher. (#4821) + +### Bug Fixes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Fix an issue where queuing InputEvents overwrote data from previous events in the same frame. (#5034) + +## [1.8.0-preview] - 2021-02-17 +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- TensorFlow trainers have been removed, please use the Torch trainers instead. (#4707) +- A plugin system for `mlagents-learn` has been added. You can now define custom + `StatsWriter` implementations and register them to be called during training. + More types of plugins will be added in the future. (#4788) + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The `ActionSpec` constructor is now public. Previously, it was not possible to create an + ActionSpec with both continuous and discrete actions from code. (#4896) +- `StatAggregationMethod.Sum` can now be passed to `StatsRecorder.Add()`. This + will result in the values being summed (instead of averaged) when written to + TensorBoard. Thanks to @brccabral for the contribution! (#4816) +- The upper limit for the time scale (by setting the `--time-scale` paramater in mlagents-learn) was + removed when training with a player. The Editor still requires it to be clamped to 100. (#4867) +- Added the IHeuristicProvider interface to allow IActuators as well as Agent implement the Heuristic function to generate actions. + Updated the Basic example and the Match3 Example to use Actuators. + Changed the namespace and file names of classes in com.unity.ml-agents.extensions. (#4849) +- Added `VectorSensor.AddObservation(IList)`. `VectorSensor.AddObservation(IEnumerable)` + is deprecated. The `IList` version is recommended, as it does not generate any + additional memory allocations. (#4887) +- Added `ObservationWriter.AddList()` and deprecated `ObservationWriter.AddRange()`. + `AddList()` is recommended, as it does not generate any additional memory allocations. (#4887) +- The Barracuda dependency was upgraded to 1.3.0. (#4898) +- Added `ActuatorComponent.CreateActuators`, and deprecate `ActuatorComponent.CreateActuator`. The + default implementation will wrap `ActuatorComponent.CreateActuator` in an array and return that. (#4899) +- `InferenceDevice.Burst` was added, indicating that Agent's model will be run using Barracuda's Burst backend. + This is the default for new Agents, but existing ones that use `InferenceDevice.CPU` should update to + `InferenceDevice.Burst`. (#4925) +- Add an InputActuatorComponent to allow the generation of Agent action spaces from an InputActionAsset. + Projects wanting to use this feature will need to add the + [Input System Package](https://docs.unity3d.com/Packages/com.unity.inputsystem@1.1/manual/index.html) + at version 1.1.0-preview.3 or later. (#4881) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Tensorboard now logs the Environment Reward as both a scalar and a histogram. (#4878) +- Added a `--torch-device` commandline option to `mlagents-learn`, which sets the default + [`torch.device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.torch.device) used for training. (#4888) +- The `--cpu` commandline option had no effect and was removed. Use `--torch-device=cpu` to force CPU training. (#4888) +- The `mlagents_env` API has changed, `BehaviorSpec` now has a `observation_specs` property containing a list of `ObservationSpec`. For more information on `ObservationSpec` see [here](https://github.com/Unity-Technologies/ml-agents/blob/release_13_docs/docs/Python-API.md#behaviorspec). (#4763, #4825) + +### Bug Fixes +#### com.unity.ml-agents (C#) +- Fix a compile warning about using an obsolete enum in `GrpcExtensions.cs`. (#4812) +- CameraSensor now logs an error if the GraphicsDevice is null. (#4880) +- Removed unnecessary memory allocations in `ActuatorManager.UpdateActionArray()` (#4877) +- Removed unnecessary memory allocations in `SensorShapeValidator.ValidateSensors()` (#4879) +- Removed unnecessary memory allocations in `SideChannelManager.GetSideChannelMessage()` (#4886) +- Removed several memory allocations that happened during inference. On a test scene, this + reduced the amount of memory allocated by approximately 25%. (#4887) +- Removed several memory allocations that happened during inference with discrete actions. (#4922) +- Properly catch permission errors when writing timer files. (#4921) +- Unexpected exceptions during training initialization and shutdown are now logged. If you see + "noisy" logs, please let us know! (#4930, #4935) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed a bug that would cause an exception when `RunOptions` was deserialized via `pickle`. (#4842) +- Fixed a bug that can cause a crash if a behavior can appear during training in multi-environment training. (#4872) +- Fixed the computation of entropy for continuous actions. (#4869) +- Fixed a bug that would cause `UnityEnvironment` to wait the full timeout + period and report a misleading error message if the executable crashed + without closing the connection. It now periodically checks the process status + while waiting for a connection, and raises a better error message if it crashes. (#4880) +- Passing a `-logfile` option in the `--env-args` option to `mlagents-learn` is + no longer overwritten. (#4880) +- The `load_weights` function was being called unnecessarily often in the Ghost Trainer leading to training slowdowns. (#4934) + + +## [1.7.2-preview] - 2020-12-22 +### Bug Fixes +#### com.unity.ml-agents (C#) +- Add analytics package dependency to the package manifest. (#4794) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed the docker build process. (#4791) + + +## [1.7.0-preview] - 2020-12-21 +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- PyTorch trainers now support training agents with both continuous and discrete action spaces. (#4702) +The `.onnx` models generated by the trainers of this release are incompatible with versions of Barracuda before `1.2.1-preview`. If you upgrade the trainers, you must upgrade the version of the Barracuda package as well (which can be done by upgrading the `com.unity.ml-agents` package). +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- Agents with both continuous and discrete actions are now supported. You can specify +both continuous and discrete action sizes in Behavior Parameters. (#4702, #4718) +- In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics. +Please refer to "Information that is passively collected by Unity" in the +[Unity Privacy Policy](https://unity3d.com/legal/privacy-policy). (#4677) +- The FoodCollector example environment now uses continuous actions for moving and +discrete actions for shooting. (#4746) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- `ActionSpec.validate_action()` now enforces that `UnityEnvironment.set_action_for_agent()` receives a 1D `np.array`. (#4691) + +### Bug Fixes +#### com.unity.ml-agents (C#) +- Removed noisy warnings about API minor version mismatches in both the C# and python code. (#4688) +#### ml-agents / ml-agents-envs / gym-unity (Python) + + +## [1.6.0-preview] - 2020-11-18 +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) + - PyTorch trainers are now the default. See the + [installation docs](https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Installation.md) for + more information on installing PyTorch. For the time being, TensorFlow is still available; + you can use the TensorFlow backend by adding `--tensorflow` to the CLI, or + adding `framework: tensorflow` in the configuration YAML. (#4517) + +### Minor Changes +#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#) +- The Barracuda dependency was upgraded to 1.1.2 (#4571) +- Utilities were added to `com.unity.ml-agents.extensions` to make it easier to +integrate with match-3 games. See the [readme](https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/com.unity.ml-agents.extensions/Documentation~/Match3.md) +for more details. (#4515) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The `action_probs` node is no longer listed as an output in TensorFlow models (#4613). + +### Bug Fixes +#### com.unity.ml-agents (C#) +- `Agent.CollectObservations()` and `Agent.EndEpisode()` will now throw an exception +if they are called recursively (for example, if they call `Agent.EndEpisode()`). +Previously, this would result in an infinite loop and cause the editor to hang. (#4573) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed an issue where runs could not be resumed when using TensorFlow and Ghost Training. (#4593) +- Change the tensor type of step count from int32 to int64 to address the overflow issue when step +goes larger than 2^31. Previous Tensorflow checkpoints will become incompatible and cannot be loaded. (#4607) +- Remove extra period after "Training" in console log. (#4674) + + +## [1.5.0-preview] - 2020-10-14 +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) + - Added the Random Network Distillation (RND) intrinsic reward signal to the Pytorch + trainers. To use RND, add a `rnd` section to the `reward_signals` section of your + yaml configuration file. [More information here](https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Training-Configuration-File.md#rnd-intrinsic-reward) (#4473) +### Minor Changes +#### com.unity.ml-agents (C#) + - Stacking for compressed observations is now supported. An additional setting + option `Observation Stacks` is added in editor to sensor components that support + compressed observations. A new class `ISparseChannelSensor` with an + additional method `GetCompressedChannelMapping()`is added to generate a mapping + of the channels in compressed data to the actual channel after decompression, + for the python side to decompress correctly. (#4476) + - Added a new visual 3DBall environment. (#4513) +#### ml-agents / ml-agents-envs / gym-unity (Python) + - The Communication API was changed to 1.2.0 to indicate support for stacked + compressed observation. A new entry `compressed_channel_mapping` is added to the + proto to handle decompression correctly. Newer versions of the package that wish to + make use of this will also need a compatible version of the Python trainers. (#4476) + - In the `VisualFoodCollector` scene, a vector flag representing the frozen state of + the agent is added to the input observations in addition to the original first-person + camera frame. The scene is able to train with the provided default config file. (#4511) + - Added conversion to string for sampler classes to increase the verbosity of + the curriculum lesson changes. The lesson updates would now output the sampler + stats in addition to the lesson and parameter name to the console. (#4484) + - Localized documentation in Russian is added. Thanks to @SergeyMatrosov for + the contribution. (#4529) +### Bug Fixes +#### com.unity.ml-agents (C#) + - Fixed a bug where accessing the Academy outside of play mode would cause the + Academy to get stepped multiple times when in play mode. (#4532) +#### ml-agents / ml-agents-envs / gym-unity (Python) + + +## [1.4.0-preview] - 2020-09-16 +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) + +### Minor Changes +#### com.unity.ml-agents (C#) +- The `IActuator` interface and `ActuatorComponent` abstract class were added. +These are analogous to `ISensor` and `SensorComponent`, but for applying actions +for an Agent. They allow you to control the action space more programmatically +than defining the actions in the Agent's Behavior Parameters. See +[BasicActuatorComponent.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_7_docs/Project/Assets/ML-Agents/Examples/Basic/Scripts/BasicActuatorComponent.cs) + for an example of how to use them. (#4297, #4315) +- Update Barracuda to 1.1.1-preview (#4482) +- Enabled C# formatting using `dotnet-format`. (#4362) +- GridSensor was added to the `com.unity.ml-agents.extensions` package. Thank you +to Jaden Travnik from Eidos Montreal for the contribution! (#4399) +- Added `Agent.EpisodeInterrupted()`, which can be used to reset the agent when +it has reached a user-determined maximum number of steps. This behaves similarly +to `Agent.EndEpsiode()` but has a slightly different effect on training (#4453). +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Experimental PyTorch support has been added. Use `--torch` when running `mlagents-learn`, or add +`framework: pytorch` to your trainer configuration (under the behavior name) to enable it. +Note that PyTorch 1.6.0 or greater should be installed to use this feature; see +[the PyTorch website](https://pytorch.org/) for installation instructions and +[the relevant ML-Agents docs](https://github.com/Unity-Technologies/ml-agents/blob/release_7_docs/docs/Training-ML-Agents.md#using-pytorch-experimental) for usage. (#4335) +- The minimum supported version of TensorFlow was increased to 1.14.0. (#4411) +- Compressed visual observations with >3 channels are now supported. In +`ISensor.GetCompressedObservation()`, this can be done by writing 3 channels at a +time to a PNG and concatenating the resulting bytes. (#4399) +- The Communication API was changed to 1.1.0 to indicate support for concatenated PNGs +(see above). Newer versions of the package that wish to make use of this will also need +a compatible version of the trainer. (#4462) +- A CNN (`vis_encode_type: match3`) for smaller grids, e.g. board games, has been added. +(#4434) +- You can now again specify a default configuration for your behaviors. Specify `default_settings` in +your trainer configuration to do so. (#4448) +- Improved the executable detection logic for environments on Windows. (#4485) + +### Bug Fixes +#### com.unity.ml-agents (C#) +- Previously, `com.unity.ml-agents` was not declaring built-in packages as +dependencies in its package.json. The relevant dependencies are now listed. (#4384) +- Agents no longer try to send observations when they become disabled if the +Academy has been shut down. (#4489) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed the sample code in the custom SideChannel example. (#4466) +- A bug in the observation normalizer that would cause rewards to decrease +when using `--resume` was fixed. (#4463) +- Fixed a bug in exporting Pytorch models when using multiple discrete actions. (#4491) + +## [1.3.0-preview] - 2020-08-12 + +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The minimum supported Python version for ml-agents-envs was changed to 3.6.1. (#4244) +- The interaction between EnvManager and TrainerController was changed; EnvManager.advance() was split into to stages, +and TrainerController now uses the results from the first stage to handle new behavior names. This change speeds up +Python training by approximately 5-10%. (#4259) + +### Minor Changes +#### com.unity.ml-agents (C#) +- StatsSideChannel now stores multiple values per key. This means that multiple +calls to `StatsRecorder.Add()` with the same key in the same step will no +longer overwrite each other. (#4236) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The versions of `numpy` supported by ml-agents-envs were changed to disallow 1.19.0 or later. This was done to reflect +a similar change in TensorFlow's requirements. (#4274) +- Model checkpoints are now also saved as .nn files during training. (#4127) +- Model checkpoint info is saved in TrainingStatus.json after training is concluded (#4127) +- CSV statistics writer was removed (#4300). + +### Bug Fixes +#### com.unity.ml-agents (C#) +- Academy.EnvironmentStep() will now throw an exception if it is called +recursively (for example, by an Agent's CollectObservations method). +Previously, this would result in an infinite loop and cause the editor to hang. +(#4226) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The algorithm used to normalize observations was introducing NaNs if the initial observations were too large +due to incorrect initialization. The initialization was fixed and is now the observation means from the +first trajectory processed. (#4299) + +## [1.2.0-preview] - 2020-07-15 + +### Major Changes +#### ml-agents / ml-agents-envs / gym-unity (Python) +- The Parameter Randomization feature has been refactored to enable sampling of new parameters per episode to improve robustness. The + `resampling-interval` parameter has been removed and the config structure updated. More information [here](https://github.com/Unity-Technologies/ml-agents/blob/release_5_docs/docs/Training-ML-Agents.md). (#4065) +- The Parameter Randomization feature has been merged with the Curriculum feature. It is now possible to specify a sampler +in the lesson of a Curriculum. Curriculum has been refactored and is now specified at the level of the parameter, not the +behavior. More information +[here](https://github.com/Unity-Technologies/ml-agents/blob/release_5_docs/docs/Training-ML-Agents.md).(#4160) + +### Minor Changes +#### com.unity.ml-agents (C#) +- `SideChannelsManager` was renamed to `SideChannelManager`. The old name is still supported, but deprecated. (#4137) +- `RayPerceptionSensor.Perceive()` now additionally store the GameObject that was hit by the ray. (#4111) +- The Barracuda dependency was upgraded to 1.0.1 (#4188) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Added new Google Colab notebooks to show how to use `UnityEnvironment'. (#4117) + +### Bug Fixes +#### com.unity.ml-agents (C#) +- Fixed an issue where RayPerceptionSensor would raise an exception when the +list of tags was empty, or a tag in the list was invalid (unknown, null, or +empty string). (#4155) + +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Fixed an error when setting `initialize_from` in the trainer confiiguration YAML to +`null`. (#4175) +- Fixed issue with FoodCollector, Soccer, and WallJump when playing with keyboard. (#4147, #4174) +- Fixed a crash in StatsReporter when using threaded trainers with very frequent summary writes +(#4201) +- `mlagents-learn` will now raise an error immediately if `--num-envs` is greater than 1 without setting the `--env` +argument. (#4203) + +## [1.1.0-preview] - 2020-06-10 +### Major Changes +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Added new Walker environments. Improved ragdoll stability/performance. (#4037) +- `max_step` in the `TerminalStep` and `TerminalSteps` objects was renamed `interrupted`. +- `beta` and `epsilon` in `PPO` are no longer decayed by default but follow the same schedule as learning rate. (#3940) +- `get_behavior_names()` and `get_behavior_spec()` on UnityEnvironment were replaced by the `behavior_specs` property. (#3946) +- The first version of the Unity Environment Registry (Experimental) has been released. More information [here](https://github.com/Unity-Technologies/ml-agents/blob/release_5_docs/docs/Unity-Environment-Registry.md)(#3967) +- `use_visual` and `allow_multiple_visual_obs` in the `UnityToGymWrapper` constructor +were replaced by `allow_multiple_obs` which allows one or more visual observations and +vector observations to be used simultaneously. (#3981) Thank you @shakenes ! +- Curriculum and Parameter Randomization configurations have been merged + into the main training configuration file. Note that this means training + configuration files are now environment-specific. (#3791) +- The format for trainer configuration has changed, and the "default" behavior has been deprecated. + See the [Migration Guide](https://github.com/Unity-Technologies/ml-agents/blob/release_5_docs/docs/Migrating.md) for more details. (#3936) +- Training artifacts (trained models, summaries) are now found in the `results/` + directory. (#3829) +- When using Curriculum, the current lesson will resume if training is quit and resumed. As such, + the `--lesson` CLI option has been removed. (#4025) +### Minor Changes +#### com.unity.ml-agents (C#) +- `ObservableAttribute` was added. Adding the attribute to fields or properties on an Agent will allow it to generate + observations via reflection. (#3925, #4006) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- Unity Player logs are now written out to the results directory. (#3877) +- Run configuration YAML files are written out to the results directory at the end of the run. (#3815) +- The `--save-freq` CLI option has been removed, and replaced by a `checkpoint_interval` option in the trainer configuration YAML. (#4034) +- When trying to load/resume from a checkpoint created with an earlier verison of ML-Agents, + a warning will be thrown. (#4035) +### Bug Fixes +- Fixed an issue where SAC would perform too many model updates when resuming from a + checkpoint, and too few when using `buffer_init_steps`. (#4038) +- Fixed a bug in the onnx export that would cause constants needed for inference to not be visible to some versions of + the Barracuda importer. (#4073) +#### com.unity.ml-agents (C#) +#### ml-agents / ml-agents-envs / gym-unity (Python) + + +## [1.0.2-preview] - 2020-05-20 +### Bug Fixes +#### com.unity.ml-agents (C#) +- Fix missing .meta file + + +## [1.0.1-preview] - 2020-05-19 +### Bug Fixes +#### com.unity.ml-agents (C#) +- A bug that would cause the editor to go into a loop when a prefab was selected was fixed. (#3949) +- BrainParameters.ToProto() no longer throws an exception if none of the fields have been set. (#3930) +- The Barracuda dependency was upgraded to 0.7.1-preview. (#3977) +#### ml-agents / ml-agents-envs / gym-unity (Python) +- An issue was fixed where using `--initialize-from` would resume from the past step count. (#3962) +- The gym wrapper error for the wrong number of agents now fires more consistently, and more details + were added to the error message when the input dimension is wrong. (#3963) + + +## [1.0.0-preview] - 2020-04-30 +### Major Changes +#### com.unity.ml-agents (C#) + +- The `MLAgents` C# namespace was renamed to `Unity.MLAgents`, and other nested + namespaces were similarly renamed. (#3843) +- The offset logic was removed from DecisionRequester. (#3716) +- The signature of `Agent.Heuristic()` was changed to take a float array as a + parameter, instead of returning the array. This was done to prevent a common + source of error where users would return arrays of the wrong size. (#3765) +- The communication API version has been bumped up to 1.0.0 and will use + [Semantic Versioning](https://semver.org/) to do compatibility checks for + communication between Unity and the Python process. (#3760) +- The obsolete `Agent` methods `GiveModel`, `Done`, `InitializeAgent`, + `AgentAction` and `AgentReset` have been removed. (#3770) +- The SideChannel API has changed: + - Introduced the `SideChannelManager` to register, unregister and access side + channels. (#3807) + - `Academy.FloatProperties` was replaced by `Academy.EnvironmentParameters`. + See the [Migration Guide](https://github.com/Unity-Technologies/ml-agents/blob/release_1_docs/docs/Migrating.md) + for more details on upgrading. (#3807) + - `SideChannel.OnMessageReceived` is now a protected method (was public) + - SideChannel IncomingMessages methods now take an optional default argument, + which is used when trying to read more data than the message contains. (#3751) + - Added a feature to allow sending stats from C# environments to TensorBoard + (and other python StatsWriters). To do this from your code, use + `Academy.Instance.StatsRecorder.Add(key, value)`. (#3660) +- `CameraSensorComponent.m_Grayscale` and + `RenderTextureSensorComponent.m_Grayscale` were changed from `public` to + `private`. These can still be accessed via their corresponding properties. + (#3808) +- Public fields and properties on several classes were renamed to follow Unity's + C# style conventions. All public fields and properties now use "PascalCase" + instead of "camelCase"; for example, `Agent.maxStep` was renamed to + `Agent.MaxStep`. For a full list of changes, see the pull request. (#3828) +- `WriteAdapter` was renamed to `ObservationWriter`. If you have a custom + `ISensor` implementation, you will need to change the signature of its + `Write()` method. (#3834) +- The Barracuda dependency was upgraded to 0.7.0-preview (which has breaking + namespace and assembly name changes). (#3875) + +#### ml-agents / ml-agents-envs / gym-unity (Python) + +- The `--load` and `--train` command-line flags have been deprecated. Training + now happens by default, and use `--resume` to resume training instead of + `--load`. (#3705) +- The Jupyter notebooks have been removed from the repository. (#3704) +- The multi-agent gym option was removed from the gym wrapper. For multi-agent + scenarios, use the [Low Level Python API](https://github.com/Unity-Technologies/ml-agents/blob/release_1_docs/docs/Python-API.md). (#3681) +- The low level Python API has changed. You can look at the document + [Low Level Python API](https://github.com/Unity-Technologies/ml-agents/blob/release_1_docs/docs/Python-API.md) + documentation for more information. If you use `mlagents-learn` for training, this should be a + transparent change. (#3681) +- Added ability to start training (initialize model weights) from a previous run + ID. (#3710) +- The GhostTrainer has been extended to support asymmetric games and the + asymmetric example environment Strikers Vs. Goalie has been added. (#3653) +- The `UnityEnv` class from the `gym-unity` package was renamed + `UnityToGymWrapper` and no longer creates the `UnityEnvironment`. Instead, the + `UnityEnvironment` must be passed as input to the constructor of + `UnityToGymWrapper` (#3812) + +### Minor Changes + +#### com.unity.ml-agents (C#) + +- Added new 3-joint Worm ragdoll environment. (#3798) +- `StackingSensor` was changed from `internal` visibility to `public`. (#3701) +- The internal event `Academy.AgentSetStatus` was renamed to + `Academy.AgentPreStep` and made public. (#3716) +- Academy.InferenceSeed property was added. This is used to initialize the + random number generator in ModelRunner, and is incremented for each + ModelRunner. (#3823) +- `Agent.GetObservations()` was added, which returns a read-only view of the + observations added in `CollectObservations()`. (#3825) +- `UnityRLCapabilities` was added to help inform users when RL features are + mismatched between C# and Python packages. (#3831) + +#### ml-agents / ml-agents-envs / gym-unity (Python) + +- Format of console output has changed slightly and now matches the name of the + model/summary directory. (#3630, #3616) +- Renamed 'Generalization' feature to 'Environment Parameter Randomization'. + (#3646) +- Timer files now contain a dictionary of metadata, including things like the + package version numbers. (#3758) +- The way that UnityEnvironment decides the port was changed. If no port is + specified, the behavior will depend on the `file_name` parameter. If it is + `None`, 5004 (the editor port) will be used; otherwise 5005 (the base + environment port) will be used. (#3673) +- Running `mlagents-learn` with the same `--run-id` twice will no longer + overwrite the existing files. (#3705) +- Model updates can now happen asynchronously with environment steps for better + performance. (#3690) +- `num_updates` and `train_interval` for SAC were replaced with + `steps_per_update`. (#3690) +- The maximum compatible version of tensorflow was changed to allow tensorflow + 2.1 and 2.2. This will allow use with python 3.8 using tensorflow 2.2.0rc3. + (#3830) +- `mlagents-learn` will no longer set the width and height of the executable + window to 84x84 when no width nor height arguments are given. (#3867) + +### Bug Fixes + +#### com.unity.ml-agents (C#) + +- Fixed a display bug when viewing Demonstration files in the inspector. The + shapes of the observations in the file now display correctly. (#3771) + +#### ml-agents / ml-agents-envs / gym-unity (Python) + +- Fixed an issue where exceptions from environments provided a return code of 0. + (#3680) +- Self-Play team changes will now trigger a full environment reset. This + prevents trajectories in progress during a team change from getting into the + buffer. (#3870) + +## [0.15.1-preview] - 2020-03-30 + +### Bug Fixes + +- Raise the wall in CrawlerStatic scene to prevent Agent from falling off. + (#3650) +- Fixed an issue where specifying `vis_encode_type` was required only for SAC. + (#3677) +- Fixed the reported entropy values for continuous actions (#3684) +- Fixed an issue where switching models using `SetModel()` during training would + use an excessive amount of memory. (#3664) +- Environment subprocesses now close immediately on timeout or wrong API + version. (#3679) +- Fixed an issue in the gym wrapper that would raise an exception if an Agent + called EndEpisode multiple times in the same step. (#3700) +- Fixed an issue where logging output was not visible; logging levels are now + set consistently. (#3703) + +## [0.15.0-preview] - 2020-03-18 + +### Major Changes + +- `Agent.CollectObservations` now takes a VectorSensor argument. (#3352, #3389) +- Added `Agent.CollectDiscreteActionMasks` virtual method with a + `DiscreteActionMasker` argument to specify which discrete actions are + unavailable to the Agent. (#3525) +- Beta support for ONNX export was added. If the `tf2onnx` python package is + installed, models will be saved to `.onnx` as well as `.nn` format. Note that + Barracuda 0.6.0 or later is required to import the `.onnx` files properly +- Multi-GPU training and the `--multi-gpu` option has been removed temporarily. + (#3345) +- All Sensor related code has been moved to the namespace `MLAgents.Sensors`. +- All SideChannel related code has been moved to the namespace + `MLAgents.SideChannels`. +- `BrainParameters` and `SpaceType` have been removed from the public API +- `BehaviorParameters` have been removed from the public API. +- The following methods in the `Agent` class have been deprecated and will be + removed in a later release: + - `InitializeAgent()` was renamed to `Initialize()` + - `AgentAction()` was renamed to `OnActionReceived()` + - `AgentReset()` was renamed to `OnEpisodeBegin()` + - `Done()` was renamed to `EndEpisode()` + - `GiveModel()` was renamed to `SetModel()` + +### Minor Changes + +- Monitor.cs was moved to Examples. (#3372) +- Automatic stepping for Academy is now controlled from the + AutomaticSteppingEnabled property. (#3376) +- The GetEpisodeCount, GetStepCount, GetTotalStepCount and methods of Academy + were changed to EpisodeCount, StepCount, TotalStepCount properties + respectively. (#3376) +- Several classes were changed from public to internal visibility. (#3390) +- Academy.RegisterSideChannel and UnregisterSideChannel methods were added. + (#3391) +- A tutorial on adding custom SideChannels was added (#3391) +- The stepping logic for the Agent and the Academy has been simplified (#3448) +- Update Barracuda to 0.6.1-preview + +* The interface for `RayPerceptionSensor.PerceiveStatic()` was changed to take + an input class and write to an output class, and the method was renamed to + `Perceive()`. + +- The checkpoint file suffix was changed from `.cptk` to `.ckpt` (#3470) +- The command-line argument used to determine the port that an environment will + listen on was changed from `--port` to `--mlagents-port`. +- `DemonstrationRecorder` can now record observations outside of the editor. +- `DemonstrationRecorder` now has an optional path for the demonstrations. This + will default to `Application.dataPath` if not set. +- `DemonstrationStore` was changed to accept a `Stream` for its constructor, and + was renamed to `DemonstrationWriter` +- The method `GetStepCount()` on the Agent class has been replaced with the + property getter `StepCount` +- `RayPerceptionSensorComponent` and related classes now display the debug + gizmos whenever the Agent is selected (not just Play mode). +- Most fields on `RayPerceptionSensorComponent` can now be changed while the + editor is in Play mode. The exceptions to this are fields that affect the + number of observations. +- Most fields on `CameraSensorComponent` and `RenderTextureSensorComponent` were + changed to private and replaced by properties with the same name. +- Unused static methods from the `Utilities` class (ShiftLeft, ReplaceRange, + AddRangeNoAlloc, and GetSensorFloatObservationSize) were removed. +- The `Agent` class is no longer abstract. +- SensorBase was moved out of the package and into the Examples directory. +- `AgentInfo.actionMasks` has been renamed to `AgentInfo.discreteActionMasks`. +- `DecisionRequester` has been made internal (you can still use the + DecisionRequesterComponent from the inspector). `RepeatAction` was renamed + `TakeActionsBetweenDecisions` for clarity. (#3555) +- The `IFloatProperties` interface has been removed. +- Fix #3579. +- Improved inference performance for models with multiple action branches. + (#3598) +- Fixed an issue when using GAIL with less than `batch_size` number of + demonstrations. (#3591) +- The interfaces to the `SideChannel` classes (on C# and python) have changed to + use new `IncomingMessage` and `OutgoingMessage` classes. These should make + reading and writing data to the channel easier. (#3596) +- Updated the ExpertPyramid.demo example demonstration file (#3613) +- Updated project version for example environments to 2018.4.18f1. (#3618) +- Changed the Product Name in the example environments to remove spaces, so that + the default build executable file doesn't contain spaces. (#3612) + +## [0.14.1-preview] - 2020-02-25 + +### Bug Fixes + +- Fixed an issue which caused self-play training sessions to consume a lot of + memory. (#3451) +- Fixed an IndexError when using GAIL or behavioral cloning with demonstrations + recorded with 0.14.0 or later (#3464) +- Updated the `gail_config.yaml` to work with per-Agent steps (#3475) +- Fixed demonstration recording of experiences when the Agent is done. (#3463) +- Fixed a bug with the rewards of multiple Agents in the gym interface (#3471, + #3496) + +## [0.14.0-preview] - 2020-02-13 + +### Major Changes + +- A new self-play mechanism for training agents in adversarial scenarios was + added (#3194) +- Tennis and Soccer environments were refactored to enable training with + self-play (#3194, #3331) +- UnitySDK folder was split into a Unity Package (com.unity.ml-agents) and our + examples were moved to the Project folder (#3267) +- Academy is now a singleton and is no longer abstract (#3210, #3184) +- In order to reduce the size of the API, several classes and methods were + marked as internal or private. Some public fields on the Agent were trimmed + (#3342, #3353, #3269) +- Decision Period and on-demand decision checkboxes were removed from the Agent. + on-demand decision is now the default (#3243) +- Calling Done() on the Agent will reset it immediately and call the AgentReset + virtual method (#3291, #3242) +- The "Reset on Done" setting in AgentParameters was removed; this is now always + true. AgentOnDone virtual method on the Agent was removed (#3311, #3222) +- Trainer steps are now counted per-Agent, not per-environment as in previous + versions. For instance, if you have 10 Agents in the scene, 20 environment + steps now correspond to 200 steps as printed in the terminal and in + Tensorboard (#3113) + +### Minor Changes + +- Barracuda was updated to 0.5.0-preview (#3329) +- --num-runs option was removed from mlagents-learn (#3155) +- Curriculum config files are now YAML formatted and all curricula for a + training run are combined into a single file (#3186) +- ML-Agents components, such as BehaviorParameters and various Sensor + implementations, now appear in the Components menu (#3231) +- Exceptions are now raised in Unity (in debug mode only) if NaN observations or + rewards are passed (#3221) +- RayPerception MonoBehavior, which was previously deprecated, was removed + (#3304) +- Uncompressed visual (i.e. 3d float arrays) observations are now supported. + CameraSensorComponent and RenderTextureSensor now have an option to write + uncompressed observations (#3148) +- Agent’s handling of observations during training was improved so that an extra + copy of the observations is no longer maintained (#3229) +- Error message for missing trainer config files was improved to include the + absolute path (#3230) +- Support for 2017.4 LTS was dropped (#3121, #3168) +- Some documentation improvements were made (#3296, #3292, #3295, #3281) + +### Bug Fixes + +- Numpy warning when stats don’t exist (#3251) +- A bug that caused RayPerceptionSensor to behave inconsistently with transforms + that have non-1 scale was fixed (#3321) +- Some small bugfixes to tensorflow_to_barracuda.py were backported from the + barracuda release (#3341) +- Base port in the jupyter notebook example was updated to use the same port + that the editor uses (#3283) + +## [0.13.0-preview] - 2020-01-24 + +### This is the first release of _Unity Package ML-Agents_. + +_Short description of this release_ diff --git a/com.unity.ml-agents/CHANGELOG.md.meta b/com.unity.ml-agents/CHANGELOG.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..6331df01c1f4837e97f59ff0950dc409d32ca7f9 --- /dev/null +++ b/com.unity.ml-agents/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e19737407870a49abaaa1a90dae1a334 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/CODEOWNERS b/com.unity.ml-agents/CODEOWNERS new file mode 100644 index 0000000000000000000000000000000000000000..949fd41395c340b9ffdf7df932291b10f8dae6a2 --- /dev/null +++ b/com.unity.ml-agents/CODEOWNERS @@ -0,0 +1,2 @@ +# see https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners for more information +* @unity/behavior-authoring diff --git a/com.unity.ml-agents/CODEOWNERS.meta b/com.unity.ml-agents/CODEOWNERS.meta new file mode 100644 index 0000000000000000000000000000000000000000..f288a2353710343a8f9075e552610d957508a8f8 --- /dev/null +++ b/com.unity.ml-agents/CODEOWNERS.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5de323c2110f44676ba99dc49409363c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/CONTRIBUTING.md b/com.unity.ml-agents/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..65b01e775b96889d6d108ba400ac596bb626b05e --- /dev/null +++ b/com.unity.ml-agents/CONTRIBUTING.md @@ -0,0 +1,97 @@ +# Contribution Guidelines + +Thank you for your interest in contributing to the ML-Agents Toolkit! We are +incredibly excited to see how members of our community will use and extend the +ML-Agents Toolkit. To facilitate your contributions, we've outlined a brief set +of guidelines to ensure that your extensions can be easily integrated. + +## Communication + +First, please read through our +[code of conduct](https://github.com/Unity-Technologies/ml-agents/blob/main/CODE_OF_CONDUCT.md), +as we expect all our contributors to follow it. + +Second, before starting on a project that you intend to contribute to the +ML-Agents Toolkit (whether environments or modifications to the codebase), we +**strongly** recommend posting on our +[Issues page](https://github.com/Unity-Technologies/ml-agents/issues) and +briefly outlining the changes you plan to make. This will enable us to provide +some context that may be helpful for you. This could range from advice and +feedback on how to optimally perform your changes or reasons for not doing it. + +Lastly, if you're looking for input on what to contribute, feel free to reach +out to us directly at ml-agents@unity3d.com and/or browse the GitHub issues with +the `Requests` or `Bug` label. + +## Git Branches + +The main branch corresponds to the most recent version of the project. Note +that this may be newer that the +[latest release](https://github.com/Unity-Technologies/ml-agents/releases/tag/latest_release). + +When contributing to the project, please make sure that your Pull Request (PR) +contains the following: + +- Detailed description of the changes performed +- Corresponding changes to documentation, unit tests and sample environments (if + applicable) +- Summary of the tests performed to validate your changes +- Issue numbers that the PR resolves (if any) + +## Environments + +We are currently not accepting environment contributions directly into ML-Agents. +However, we believe community created enviornments have a lot of value to the +community. If you have an interesting enviornment and are willing to share, +feel free to showcase it and share any relevant files in the +[ML-Agents forum](https://forum.unity.com/forums/ml-agents.453/). + +## Continuous Integration (CI) + +We run continuous integration on all PRs; all tests must be passing before the PR is merged. + +Several static checks are run on the codebase using the +[pre-commit framework](https://pre-commit.com/) during CI. To execute the same +checks locally, run: +```bash +pip install pre-commit>=2.8.0 +pip install identify>==2.1.3 +pre-commit run --all-files +``` + +Some hooks (for example, `black`) will output the corrected version of the code; +others (like `mypy`) may require more effort to fix. You can optionally run +`pre-commit install` to install it as a git hook; after this it will run on all +commits that you make. + +### Code style + +All python code should be formatted with +[`black`](https://github.com/psf/black). + +C# code is formatted using [`dotnet-format`](https://github.com/dotnet/format). +You must have [dotnet](https://dotnet.microsoft.com/download) installed first +(but don't need to install `dotnet-format` - `pre-commit` will do that for you). + +### Python type annotations + +We use [`mypy`](http://mypy-lang.org/) to perform static type checking on python +code. Currently not all code is annotated but we will increase coverage over +time. If you are adding or refactoring code, please + +1. Add type annotations to the new or refactored code. +2. Make sure that code calling or called by the modified code also has type + annotations. + +The +[type hint cheat sheet](https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html) +provides a good introduction to adding type hints. + +## Contributor License Agreements + +When you open a pull request, you will be asked to acknolwedge our Contributor +License Agreement. We allow both individual contributions and contributions made +on behalf of companies. We use an open source tool called CLA assistant. If you +have any questions on our CLA, please +[submit an issue](https://github.com/Unity-Technologies/ml-agents/issues) or +email us at ml-agents@unity3d.com. diff --git a/com.unity.ml-agents/CONTRIBUTING.md.meta b/com.unity.ml-agents/CONTRIBUTING.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..acf109e975d1145943eec914a8f0ea464e0caa84 --- /dev/null +++ b/com.unity.ml-agents/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 60b8c21afae8d449ebcdd512e85e97ac +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Documentation~/com.unity.ml-agents.md b/com.unity.ml-agents/Documentation~/com.unity.ml-agents.md new file mode 100644 index 0000000000000000000000000000000000000000..461b854d6f75f23f25af78e1f59b2cf608f46635 --- /dev/null +++ b/com.unity.ml-agents/Documentation~/com.unity.ml-agents.md @@ -0,0 +1,163 @@ +# About ML-Agents package (`com.unity.ml-agents`) + +The _ML-Agents_ package contains the primary C# SDK for the [Unity ML-Agents +Toolkit]. + +The package allows you to convert any Unity scene into a learning environment +and train character behaviors using a variety of machine learning algorithms. +Additionally, it allows you to embed these trained behaviors back into Unity +scenes to control your characters. More specifically, the package provides the +following core functionalities: + +- Define Agents: entities, or characters, whose behavior will be learned. Agents + are entities that generate observations (through sensors), take actions, and + receive rewards from the environment. +- Define Behaviors: entities that specify how an agent should act. Multiple + agents can share the same Behavior and a scene may have multiple Behaviors. +- Record demonstrations of an agent within the Editor. You can use + demonstrations to help train a behavior for that agent. +- Embedding a trained behavior into the scene via the [Unity Inference Engine]. + Embedded behaviors allow you to switch an Agent between learning and + inference. + +Note that the _ML-Agents_ package does not contain the machine learning +algorithms for training behaviors. The _ML-Agents_ package only supports +instrumenting a Unity scene, setting it up for training, and then embedding the +trained model back into your Unity scene. The machine learning algorithms that +orchestrate training are part of the companion [Python package]. + +Note that we also provide an _ML-Agents Extensions_ package +(`com.unity.ml-agents.extensions`) that contains early/experimental features +that you may find useful. This package is only available from the [ML-Agents +GitHub repo]. + +## Package contents + +The following table describes the package folder structure: + +| **Location** | **Description** | +| ---------------------- | ----------------------------------------------------------------------- | +| _Documentation~_ | Contains the documentation for the Unity package. | +| _Editor_ | Contains utilities for Editor windows and drawers. | +| _Plugins_ | Contains third-party DLLs. | +| _Runtime_ | Contains core C# APIs for integrating ML-Agents into your Unity scene. | +| _Runtime/Integrations_ | Contains utilities for integrating ML-Agents into specific game genres. | +| _Tests_ | Contains the unit tests for the package. | + + + +## Installation + +To install this _ML-Agents_ package, follow the instructions in the [Package +Manager documentation]. + +To install the companion Python package to enable training behaviors, follow the +[installation instructions] on our [GitHub repository]. + +### Advanced Installation +With the changes to Unity Package Manager in 2021, experimental packages will not show up in the package list and have to be installed manually. There are two recommended ways to install the package manually: + +#### Github via Package Manager + +In Unity 2019.4 or later, open the Package Manager, hit the "+" button, and select "Add package from git URL". + +![Package Manager git URL](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/images/unity_package_manager_git_url.png) + +In the dialog that appears, enter + +``` +git+https://github.com/Unity-Technologies/ml-agents.git?path=com.unity.ml-agents#release_20 +``` + +You can also edit your project's `manifest.json` directly and add the following line to the `dependencies` +section: + +``` +"com.unity.ml-agents": "git+https://github.com/Unity-Technologies/ml-agents.git?path=com.unity.ml-agents#release_20", +``` + +See [Git dependencies](https://docs.unity3d.com/Manual/upm-git.html#subfolder) for more information. Note that this +may take several minutes to resolve the packages the first time that you add it. + +#### Local Installation for Development + +[Clone the repository](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/Installation.md#clone-the-ml-agents-toolkit-repository-optional) and follow the +[Local Installation for Development](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/Installation.md#advanced-local-installation-for-development-1) directions. + +## Requirements + +This version of the Unity ML-Agents package is compatible with the following +versions of the Unity Editor: + +- 2019.4 and later + +## Known Limitations + +### Training + +Training is limited to the Unity Editor and Standalone builds on Windows, MacOS, +and Linux with the Mono scripting backend. Currently, training does not work +with the IL2CPP scripting backend. Your environment will default to inference +mode if training is not supported or is not currently running. + +### Inference + +Inference is executed via the +[Unity Inference Engine](https://docs.unity3d.com/Packages/com.unity.barracuda@latest/index.html). + +**CPU** + +All platforms supported. + +**GPU** + +All platforms supported except: + +- WebGL and GLES 3/2 on Android / iPhone + +**NOTE:** Mobile platform support includes: + +- Vulkan for Android +- Metal for iOS. + +### Headless Mode + +If you enable Headless mode, you will not be able to collect visual observations +from your agents. + +### Rendering Speed and Synchronization + +Currently the speed of the game physics can only be increased to 100x real-time. +The Academy also moves in time with FixedUpdate() rather than Update(), so game +behavior implemented in Update() may be out of sync with the agent decision +making. See [Execution Order of Event Functions] for more information. + +You can control the frequency of Academy stepping by calling +`Academy.Instance.DisableAutomaticStepping()`, and then calling +`Academy.Instance.EnvironmentStep()` + +### Unity Inference Engine Models + +Currently, only models created with our trainers are supported for running +ML-Agents with a neural network behavior. + +## Helpful links + +If you are new to the Unity ML-Agents package, or have a question after reading +the documentation, you can checkout our [GitHub Repository], which also includes +a number of ways to [connect with us] including our [ML-Agents Forum]. + +In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics. +Please refer to "Information that is passively collected by Unity" in the +[Unity Privacy Policy](https://unity3d.com/legal/privacy-policy). + +[unity ML-Agents Toolkit]: https://github.com/Unity-Technologies/ml-agents +[unity inference engine]: https://docs.unity3d.com/Packages/com.unity.barracuda@latest/index.html +[package manager documentation]: https://docs.unity3d.com/Manual/upm-ui-install.html +[installation instructions]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Installation.md +[github repository]: https://github.com/Unity-Technologies/ml-agents +[python package]: https://github.com/Unity-Technologies/ml-agents +[execution order of event functions]: https://docs.unity3d.com/Manual/ExecutionOrder.html +[connect with us]: https://github.com/Unity-Technologies/ml-agents#community-and-feedback +[ml-agents forum]: https://forum.unity.com/forums/ml-agents.453/ +[ML-Agents GitHub repo]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/com.unity.ml-agents.extensions diff --git a/com.unity.ml-agents/Documentation~/filter.yml b/com.unity.ml-agents/Documentation~/filter.yml new file mode 100644 index 0000000000000000000000000000000000000000..ce144daf6111a750b20c003bcb99b4212ae81be7 --- /dev/null +++ b/com.unity.ml-agents/Documentation~/filter.yml @@ -0,0 +1,14 @@ +apiRules: +- exclude: + uidRegex: .*Test.* + type: Namespace +- exclude: + uidRegex: ^Unity.MLAgents\.CommunicatorObjects$ + type: Namespace +- exclude: + uidRegex: ^Unity.MLAgents\.Editor$ + type: Namespace +- exclude: + uidRegex: ^Unity.MLAgentsExamples$ + type: Namespace + diff --git a/com.unity.ml-agents/Editor.meta b/com.unity.ml-agents/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..89d980b08810f90e843d77e5e1b082b32719e3ce --- /dev/null +++ b/com.unity.ml-agents/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9de88a64ac5c4d2eb8955836199d61b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/AgentEditor.cs b/com.unity.ml-agents/Editor/AgentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..fdebf1cb15b60371a0405dc37897aa916698e580 --- /dev/null +++ b/com.unity.ml-agents/Editor/AgentEditor.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using UnityEditor; + +namespace Unity.MLAgents.Editor +{ + /* + This code is meant to modify the behavior of the inspector on Agent Components. + */ + [CustomEditor(typeof(Agent), true)] + [CanEditMultipleObjects] + internal class AgentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var serializedAgent = serializedObject; + serializedAgent.Update(); + + var maxSteps = serializedAgent.FindProperty("MaxStep"); + + EditorGUILayout.PropertyField( + maxSteps, + new GUIContent("Max Step", "The per-agent maximum number of steps.") + ); + + serializedAgent.ApplyModifiedProperties(); + + EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); + base.OnInspectorGUI(); + } + } +} diff --git a/com.unity.ml-agents/Editor/AgentEditor.cs.meta b/com.unity.ml-agents/Editor/AgentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..66bc325f8b1246764946727079303a939fd99a77 --- /dev/null +++ b/com.unity.ml-agents/Editor/AgentEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c3b291e1cd0c64781861652b579d0ac1 +timeCreated: 1503270350 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs b/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..a95b2846f3cf52a08fe134abc94505ed0e153025 --- /dev/null +++ b/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs @@ -0,0 +1,192 @@ +using System.Collections.Generic; +using UnityEditor; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; +using CheckTypeEnum = Unity.MLAgents.Inference.BarracudaModelParamLoader.FailedCheck.CheckTypeEnum; + +namespace Unity.MLAgents.Editor +{ + /* + This code is meant to modify the behavior of the inspector on Agent Components. + */ + [CustomEditor(typeof(BehaviorParameters))] + [CanEditMultipleObjects] + internal class BehaviorParametersEditor : UnityEditor.Editor + { + const float k_TimeBetweenModelReloads = 2f; + // Time since the last reload of the model + float m_TimeSinceModelReload; + // Whether or not the model needs to be reloaded + bool m_RequireReload; + const string k_BehaviorName = "m_BehaviorName"; + const string k_BrainParametersName = "m_BrainParameters"; + const string k_ModelName = "m_Model"; + const string k_InferenceDeviceName = "m_InferenceDevice"; + const string k_DeterministicInference = "m_DeterministicInference"; + const string k_BehaviorTypeName = "m_BehaviorType"; + const string k_TeamIdName = "TeamId"; + const string k_UseChildSensorsName = "m_UseChildSensors"; + const string k_ObservableAttributeHandlingName = "m_ObservableAttributeHandling"; + + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + bool needPolicyUpdate; // Whether the name, model, inference device, or BehaviorType changed. + + var behaviorParameters = (BehaviorParameters)target; + var agent = behaviorParameters.gameObject.GetComponent(); + if (agent == null) + { + EditorGUILayout.HelpBox( + "No Agent is associated with this Behavior Parameters. Attach an Agent to " + + "this GameObject to configure your Agent with these behavior parameters.", + MessageType.Warning); + } + + // Drawing the Behavior Parameters + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); // global + + EditorGUI.BeginChangeCheck(); + { + EditorGUILayout.PropertyField(so.FindProperty(k_BehaviorName)); + } + needPolicyUpdate = EditorGUI.EndChangeCheck(); + + EditorGUI.BeginChangeCheck(); + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty(k_BrainParametersName), true); + } + EditorGUI.EndDisabledGroup(); + + EditorGUI.BeginChangeCheck(); + { + EditorGUILayout.PropertyField(so.FindProperty(k_ModelName), true); + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(so.FindProperty(k_InferenceDeviceName), true); + EditorGUILayout.PropertyField(so.FindProperty(k_DeterministicInference), true); + EditorGUI.indentLevel--; + } + needPolicyUpdate = needPolicyUpdate || EditorGUI.EndChangeCheck(); + + EditorGUI.BeginChangeCheck(); + { + EditorGUILayout.PropertyField(so.FindProperty(k_BehaviorTypeName)); + } + needPolicyUpdate = needPolicyUpdate || EditorGUI.EndChangeCheck(); + + EditorGUILayout.PropertyField(so.FindProperty(k_TeamIdName)); + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty(k_UseChildSensorsName), true); + EditorGUILayout.PropertyField(so.FindProperty(k_ObservableAttributeHandlingName), true); + } + EditorGUI.EndDisabledGroup(); + + EditorGUI.indentLevel--; + m_RequireReload = EditorGUI.EndChangeCheck(); + DisplayFailedModelChecks(); + so.ApplyModifiedProperties(); + + if (needPolicyUpdate) + { + UpdateAgentPolicy(); + } + } + + /// + /// Must be called within OnEditorGUI() + /// + void DisplayFailedModelChecks() + { + if (m_RequireReload && m_TimeSinceModelReload > k_TimeBetweenModelReloads) + { + m_RequireReload = false; + m_TimeSinceModelReload = 0; + } + // Display all failed checks + D.logEnabled = false; + Model barracudaModel = null; + var model = (NNModel)serializedObject.FindProperty(k_ModelName).objectReferenceValue; + var behaviorParameters = (BehaviorParameters)target; + + // Grab the sensor components, since we need them to determine the observation sizes. + // TODO make these methods of BehaviorParameters + var agent = behaviorParameters.gameObject.GetComponent(); + if (agent == null) + { + return; + } + agent.sensors = new List(); + agent.InitializeSensors(); + var sensors = agent.sensors.ToArray(); + + ActuatorComponent[] actuatorComponents; + if (behaviorParameters.UseChildActuators) + { + actuatorComponents = behaviorParameters.GetComponentsInChildren(); + } + else + { + actuatorComponents = behaviorParameters.GetComponents(); + } + + // Get the total size of the sensors generated by ObservableAttributes. + // If there are any errors (e.g. unsupported type, write-only properties), display them too. + int observableAttributeSensorTotalSize = 0; + if (agent != null && behaviorParameters.ObservableAttributeHandling != ObservableAttributeOptions.Ignore) + { + List observableErrors = new List(); + observableAttributeSensorTotalSize = ObservableAttribute.GetTotalObservationSize(agent, false, observableErrors); + foreach (var check in observableErrors) + { + EditorGUILayout.HelpBox(check, MessageType.Warning); + } + } + + var brainParameters = behaviorParameters.BrainParameters; + if (model != null) + { + barracudaModel = ModelLoader.Load(model); + } + if (brainParameters != null) + { + var failedChecks = Inference.BarracudaModelParamLoader.CheckModel( + barracudaModel, brainParameters, sensors, actuatorComponents, + observableAttributeSensorTotalSize, behaviorParameters.BehaviorType, behaviorParameters.DeterministicInference + ); + foreach (var check in failedChecks) + { + if (check != null) + { + switch (check.CheckType) + { + case CheckTypeEnum.Info: + EditorGUILayout.HelpBox(check.Message, MessageType.Info); + break; + case CheckTypeEnum.Warning: + EditorGUILayout.HelpBox(check.Message, MessageType.Warning); + break; + case CheckTypeEnum.Error: + EditorGUILayout.HelpBox(check.Message, MessageType.Error); + break; + default: + break; + } + } + } + } + } + + void UpdateAgentPolicy() + { + var behaviorParameters = (BehaviorParameters)target; + behaviorParameters.UpdateAgentPolicy(); + } + } +} diff --git a/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs.meta b/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6eb612f3e33b967fbb9de97ad472f93c2557faba --- /dev/null +++ b/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72b0b21a2d4ee4bc2be0530fd134720d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/BrainParametersDrawer.cs b/com.unity.ml-agents/Editor/BrainParametersDrawer.cs new file mode 100644 index 0000000000000000000000000000000000000000..52f40e20d35b51aa2e7a3d27a14ff69327291131 --- /dev/null +++ b/com.unity.ml-agents/Editor/BrainParametersDrawer.cs @@ -0,0 +1,172 @@ +using UnityEngine; +using UnityEditor; +using Unity.MLAgents.Policies; + +namespace Unity.MLAgents.Editor +{ + /// + /// PropertyDrawer for BrainParameters. Defines how BrainParameters are displayed in the + /// Inspector. + /// + [CustomPropertyDrawer(typeof(BrainParameters))] + internal class BrainParametersDrawer : PropertyDrawer + { + // The height of a line in the Unity Inspectors + const float k_LineHeight = 17f; + const int k_VecObsNumLine = 3; + const string k_ActionSpecName = "m_ActionSpec"; + const string k_ContinuousActionSizeName = "m_NumContinuousActions"; + const string k_DiscreteBranchSizeName = "BranchSizes"; + const string k_ActionDescriptionPropName = "VectorActionDescriptions"; + const string k_VecObsPropName = "VectorObservationSize"; + const string k_NumVecObsPropName = "NumStackedVectorObservations"; + + /// + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return GetHeightDrawVectorObservation() + + GetHeightDrawVectorAction(property); + } + + /// + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + position.height = k_LineHeight; + EditorGUI.BeginProperty(position, label, property); + EditorGUI.indentLevel++; + + // Vector Observations + DrawVectorObservation(position, property); + position.y += GetHeightDrawVectorObservation(); + + // Vector Action + DrawVectorAction(position, property); + position.y += GetHeightDrawVectorAction(property); + + EditorGUI.EndProperty(); + EditorGUI.indentLevel = indent; + } + + /// + /// Draws the Vector Observations for the Brain Parameters + /// + /// Rectangle on the screen to use for the property GUI. + /// The SerializedProperty of the BrainParameters + /// to make the custom GUI for. + static void DrawVectorObservation(Rect position, SerializedProperty property) + { + EditorGUI.LabelField(position, "Vector Observation"); + position.y += k_LineHeight; + + EditorGUI.indentLevel++; + EditorGUI.PropertyField(position, + property.FindPropertyRelative(k_VecObsPropName), + new GUIContent("Space Size", + "Length of state " + + "vector for brain (In Continuous state space)." + + "Or number of possible values (in Discrete state space).")); + position.y += k_LineHeight; + + EditorGUI.PropertyField(position, + property.FindPropertyRelative(k_NumVecObsPropName), + new GUIContent("Stacked Vectors", + "Number of states that will be stacked before " + + "being fed to the neural network.")); + position.y += k_LineHeight; + EditorGUI.indentLevel--; + } + + /// + /// The Height required to draw the Vector Observations paramaters + /// + /// The height of the drawer of the Vector Observations + static float GetHeightDrawVectorObservation() + { + return k_VecObsNumLine * k_LineHeight; + } + + /// + /// Draws the Vector Actions parameters for the Brain Parameters + /// + /// Rectangle on the screen to use for the property GUI. + /// The SerializedProperty of the BrainParameters + /// to make the custom GUI for. + static void DrawVectorAction(Rect position, SerializedProperty property) + { + EditorGUI.LabelField(position, "Actions"); + position.y += k_LineHeight; + EditorGUI.indentLevel++; + var actionSpecProperty = property.FindPropertyRelative(k_ActionSpecName); + DrawContinuousVectorAction(position, actionSpecProperty); + position.y += k_LineHeight; + DrawDiscreteVectorAction(position, actionSpecProperty); + } + + /// + /// Draws the Continuous Vector Actions parameters for the Brain Parameters + /// + /// Rectangle on the screen to use for the property GUI. + /// The SerializedProperty of the BrainParameters + /// to make the custom GUI for. + static void DrawContinuousVectorAction(Rect position, SerializedProperty property) + { + var continuousActionSize = property.FindPropertyRelative(k_ContinuousActionSizeName); + EditorGUI.PropertyField( + position, + continuousActionSize, + new GUIContent("Continuous Actions", "Number of continuous actions.")); + } + + /// + /// Draws the Discrete Vector Actions parameters for the Brain Parameters + /// + /// Rectangle on the screen to use for the property GUI. + /// The SerializedProperty of the BrainParameters + /// to make the custom GUI for. + static void DrawDiscreteVectorAction(Rect position, SerializedProperty property) + { + var branchSizes = property.FindPropertyRelative(k_DiscreteBranchSizeName); + var newSize = EditorGUI.IntField( + position, "Discrete Branches", branchSizes.arraySize); + + // This check is here due to: + // https://fogbugz.unity3d.com/f/cases/1246524/ + // If this case has been resolved, please remove this if condition. + if (newSize != branchSizes.arraySize) + { + branchSizes.arraySize = newSize; + } + + position.y += k_LineHeight; + position.x += 20; + position.width -= 20; + for (var branchIndex = 0; + branchIndex < branchSizes.arraySize; + branchIndex++) + { + var branchActionSize = + branchSizes.GetArrayElementAtIndex(branchIndex); + + EditorGUI.PropertyField( + position, + branchActionSize, + new GUIContent("Branch " + branchIndex + " Size", + "Number of possible actions for the branch number " + branchIndex + ".")); + position.y += k_LineHeight; + } + } + + /// + /// The Height required to draw the Vector Action parameters. + /// + /// The height of the drawer of the Vector Action. + static float GetHeightDrawVectorAction(SerializedProperty property) + { + var actionSpecProperty = property.FindPropertyRelative(k_ActionSpecName); + var numActionLines = 3 + actionSpecProperty.FindPropertyRelative(k_DiscreteBranchSizeName).arraySize; + return numActionLines * k_LineHeight; + } + } +} diff --git a/com.unity.ml-agents/Editor/BrainParametersDrawer.cs.meta b/com.unity.ml-agents/Editor/BrainParametersDrawer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9379a5f0eb218302e162136554766b4e6d7e5a5d --- /dev/null +++ b/com.unity.ml-agents/Editor/BrainParametersDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b060ae8e687cf49bcae88b24db17bfa6 +timeCreated: 1517291065 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/BufferSensorComponentEditor.cs b/com.unity.ml-agents/Editor/BufferSensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..b4b478a35b93e0d3479a7614761422d1dad9c9dd --- /dev/null +++ b/com.unity.ml-agents/Editor/BufferSensorComponentEditor.cs @@ -0,0 +1,30 @@ +using UnityEditor; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(BufferSensorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class BufferSensorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + // Drawing the BufferSensorComponent + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + // These fields affect the sensor order or observation size, + // So can't be changed at runtime. + EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservableSize"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_MaxNumObservables"), true); + } + EditorGUI.EndDisabledGroup(); + + so.ApplyModifiedProperties(); + } + } +} diff --git a/com.unity.ml-agents/Editor/BufferSensorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/BufferSensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..62de961c7e294704f7bc64ee73001fa465f45eb0 --- /dev/null +++ b/com.unity.ml-agents/Editor/BufferSensorComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b042fe65027f94c1eb38a2ee1362d38d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/CameraSensorComponentEditor.cs b/com.unity.ml-agents/Editor/CameraSensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..1df66ee3c90a83399dfcb873a70b08764b26dd1d --- /dev/null +++ b/com.unity.ml-agents/Editor/CameraSensorComponentEditor.cs @@ -0,0 +1,49 @@ +using UnityEditor; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(CameraSensorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class CameraSensorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + // Drawing the CameraSensorComponent + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(so.FindProperty("m_Camera"), true); + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + // These fields affect the sensor order or observation size, + // So can't be changed at runtime. + EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_Width"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_Height"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_Grayscale"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationStacks"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationType"), true); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.PropertyField(so.FindProperty("m_RuntimeCameraEnable"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_Compression"), true); + + var requireSensorUpdate = EditorGUI.EndChangeCheck(); + so.ApplyModifiedProperties(); + + if (requireSensorUpdate) + { + UpdateSensor(); + } + } + + void UpdateSensor() + { + var sensorComponent = serializedObject.targetObject as CameraSensorComponent; + sensorComponent?.UpdateSensor(); + } + } +} diff --git a/com.unity.ml-agents/Editor/CameraSensorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/CameraSensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..70b1e314324fef09b16ee1d1eeb7bcf26a4e16e2 --- /dev/null +++ b/com.unity.ml-agents/Editor/CameraSensorComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdda773c024894cf0ae47d1b1396c38d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/DemonstrationDrawer.cs b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs new file mode 100644 index 0000000000000000000000000000000000000000..484e6b6a9a372dc45e8ead647764500c0b8c9ec8 --- /dev/null +++ b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs @@ -0,0 +1,136 @@ +using System.Collections.Generic; +using System.Text; +using UnityEditor; +using Unity.MLAgents.Demonstrations; + +namespace Unity.MLAgents.Editor +{ + /// + /// Renders a custom UI for DemonstrationSummary ScriptableObject. + /// + [CustomEditor(typeof(DemonstrationSummary))] + [CanEditMultipleObjects] + internal class DemonstrationEditor : UnityEditor.Editor + { + SerializedProperty m_BrainParameters; + SerializedProperty m_DemoMetaData; + SerializedProperty m_ObservationShapes; + const string k_BrainParametersName = "brainParameters"; + const string k_MetaDataName = "metaData"; + const string k_ObservationSummariesName = "observationSummaries"; + const string k_DemonstrationName = "demonstrationName"; + const string k_NumberStepsName = "numberSteps"; + const string k_NumberEpisodesName = "numberEpisodes"; + const string k_MeanRewardName = "meanReward"; + const string k_ActionSpecName = "m_ActionSpec"; + const string k_NumContinuousActionsName = "m_NumContinuousActions"; + const string k_NumDiscreteActionsName = "BranchSizes"; + const string k_ShapeName = "shape"; + + + void OnEnable() + { + m_BrainParameters = serializedObject.FindProperty(k_BrainParametersName); + m_DemoMetaData = serializedObject.FindProperty(k_MetaDataName); + m_ObservationShapes = serializedObject.FindProperty(k_ObservationSummariesName); + } + + /// + /// Renders Inspector UI for Demonstration metadata. + /// + void MakeMetaDataProperty(SerializedProperty property) + { + var nameProp = property.FindPropertyRelative(k_DemonstrationName); + var experiencesProp = property.FindPropertyRelative(k_NumberStepsName); + var episodesProp = property.FindPropertyRelative(k_NumberEpisodesName); + var rewardsProp = property.FindPropertyRelative(k_MeanRewardName); + + var nameLabel = nameProp.displayName + ": " + nameProp.stringValue; + var experiencesLabel = experiencesProp.displayName + ": " + experiencesProp.intValue; + var episodesLabel = episodesProp.displayName + ": " + episodesProp.intValue; + var rewardsLabel = rewardsProp.displayName + ": " + rewardsProp.floatValue; + + EditorGUILayout.LabelField(nameLabel); + EditorGUILayout.LabelField(experiencesLabel); + EditorGUILayout.LabelField(episodesLabel); + EditorGUILayout.LabelField(rewardsLabel); + } + + /// + /// Constructs label for a serialized integer array. + /// + static string BuildIntArrayLabel(SerializedProperty actionSizeProperty) + { + var actionSize = actionSizeProperty.arraySize; + var actionLabel = new StringBuilder("[ "); + for (var i = 0; i < actionSize; i++) + { + actionLabel.Append(actionSizeProperty.GetArrayElementAtIndex(i).intValue); + if (i < actionSize - 1) + { + actionLabel.Append(", "); + } + } + + actionLabel.Append(" ]"); + return actionLabel.ToString(); + } + + /// + /// Renders Inspector UI for BrainParameters of a DemonstrationSummary. + /// Only the Action size and type are used from the BrainParameters. + /// + void MakeActionsProperty(SerializedProperty property) + { + var actSpecProperty = property.FindPropertyRelative(k_ActionSpecName); + var continuousSizeProperty = actSpecProperty.FindPropertyRelative(k_NumContinuousActionsName); + var discreteSizeProperty = actSpecProperty.FindPropertyRelative(k_NumDiscreteActionsName); + var continuousSizeLabel = "Continuous Actions: " + continuousSizeProperty.intValue; + var discreteSizeLabel = "Discrete Action Branches: "; + discreteSizeLabel += discreteSizeProperty == null ? "[]" : BuildIntArrayLabel(discreteSizeProperty); + EditorGUILayout.LabelField(continuousSizeLabel); + EditorGUILayout.LabelField(discreteSizeLabel); + } + + /// + /// Render the observation shapes of a DemonstrationSummary. + /// + /// + void MakeObservationsProperty(SerializedProperty obsSummariesProperty) + { + var shapesLabels = new List(); + var numObservations = obsSummariesProperty.arraySize; + for (var i = 0; i < numObservations; i++) + { + var summary = obsSummariesProperty.GetArrayElementAtIndex(i); + var shapeProperty = summary.FindPropertyRelative(k_ShapeName); + shapesLabels.Add(BuildIntArrayLabel(shapeProperty)); + } + + var shapeLabel = $"Shapes: {string.Join(", ", shapesLabels)}"; + EditorGUILayout.LabelField(shapeLabel); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.LabelField("Meta Data", EditorStyles.boldLabel); + EditorGUI.indentLevel++; + MakeMetaDataProperty(m_DemoMetaData); + EditorGUI.indentLevel--; + + EditorGUILayout.LabelField("Observations", EditorStyles.boldLabel); + EditorGUI.indentLevel++; + MakeObservationsProperty(m_ObservationShapes); + EditorGUI.indentLevel--; + + EditorGUILayout.LabelField("Actions", EditorStyles.boldLabel); + EditorGUI.indentLevel++; + MakeActionsProperty(m_BrainParameters); + EditorGUI.indentLevel--; + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/com.unity.ml-agents/Editor/DemonstrationDrawer.cs.meta b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..57c06813027105b62752b929b18b68c9dd1e0d1b --- /dev/null +++ b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84f9cd83f56c74790a51444a6cfe4945 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/DemonstrationImporter.cs b/com.unity.ml-agents/Editor/DemonstrationImporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..767f5556f9613296115f002103fd3e42295c71de --- /dev/null +++ b/com.unity.ml-agents/Editor/DemonstrationImporter.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Unity.MLAgents.CommunicatorObjects; +using UnityEditor; +using UnityEngine; +#if UNITY_2020_2_OR_NEWER +using UnityEditor.AssetImporters; +#else +using UnityEditor.Experimental.AssetImporters; +#endif +using Unity.MLAgents.Demonstrations; + +namespace Unity.MLAgents.Editor +{ + /// + /// Asset Importer used to parse demonstration files. + /// + [ScriptedImporter(1, new[] { "demo" })] + internal class DemonstrationImporter : ScriptedImporter + { + const string k_IconPath = "Packages/com.unity.ml-agents/Editor/Icons/DemoIcon.png"; + + public override void OnImportAsset(AssetImportContext ctx) + { + var inputType = Path.GetExtension(ctx.assetPath); + if (inputType == null) + { + throw new Exception("Demonstration import error."); + } + + try + { + // Read first three proto objects containing metadata, brain parameters, and observations. + Stream reader = File.OpenRead(ctx.assetPath); + + var metaDataProto = DemonstrationMetaProto.Parser.ParseDelimitedFrom(reader); + var metaData = metaDataProto.ToDemonstrationMetaData(); + + reader.Seek(DemonstrationWriter.MetaDataBytes + 1, 0); + var brainParamsProto = BrainParametersProto.Parser.ParseDelimitedFrom(reader); + var brainParameters = brainParamsProto.ToBrainParameters(); + + // Read the first AgentInfoActionPair so that we can get the observation sizes. + List observationSummaries; + try + { + var agentInfoActionPairProto = AgentInfoActionPairProto.Parser.ParseDelimitedFrom(reader); + observationSummaries = agentInfoActionPairProto.GetObservationSummaries(); + } + catch + { + // Just in case there weren't any AgentInfoActionPair or they couldn't be read. + observationSummaries = new List(); + } + + reader.Close(); + + var demonstrationSummary = ScriptableObject.CreateInstance(); + demonstrationSummary.Initialize(brainParameters, metaData, observationSummaries); + userData = demonstrationSummary.ToString(); + + var texture = (Texture2D) + AssetDatabase.LoadAssetAtPath(k_IconPath, typeof(Texture2D)); + + ctx.AddObjectToAsset(ctx.assetPath, demonstrationSummary, texture); + ctx.SetMainObject(demonstrationSummary); + } + catch + { + // ignored + } + } + } +} diff --git a/com.unity.ml-agents/Editor/DemonstrationImporter.cs.meta b/com.unity.ml-agents/Editor/DemonstrationImporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bbdca977a3db4009852d960cd0aa5ea9e8f04d2d --- /dev/null +++ b/com.unity.ml-agents/Editor/DemonstrationImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bd65ce151aaa4a41a45312543c56be1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/EditorUtilities.cs b/com.unity.ml-agents/Editor/EditorUtilities.cs new file mode 100644 index 0000000000000000000000000000000000000000..8ef266f25986d288c186757b6d11378c7010bd99 --- /dev/null +++ b/com.unity.ml-agents/Editor/EditorUtilities.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace Unity.MLAgents.Editor +{ + /// + /// A static helper class for the Editor components of the ML-Agents SDK. + /// + public static class EditorUtilities + { + /// + /// Whether or not properties that affect the model can be updated at the current time. + /// + /// + public static bool CanUpdateModelProperties() + { + return !Application.isPlaying; + } + } +} diff --git a/com.unity.ml-agents/Editor/EditorUtilities.cs.meta b/com.unity.ml-agents/Editor/EditorUtilities.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2e58d7e8a3720805792d0ba8507086166a8bbc89 --- /dev/null +++ b/com.unity.ml-agents/Editor/EditorUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 840f5a76642c24b789ee312f0aa8e33b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/GridSensorComponentEditor.cs b/com.unity.ml-agents/Editor/GridSensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..9541d869b5b56fd82d19c5032fc228d497f678fc --- /dev/null +++ b/com.unity.ml-agents/Editor/GridSensorComponentEditor.cs @@ -0,0 +1,109 @@ +using UnityEditor; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(GridSensorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class GridSensorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { +#if !MLA_UNITY_PHYSICS_MODULE + EditorGUILayout.HelpBox("The Physics Module is not currently present. " + + "Please add it to your project in order to use the GridSensor APIs in the " + + $"{nameof(GridSensorComponent)}", MessageType.Warning); +#endif + + var so = serializedObject; + so.Update(); + + // Drawing the GridSensorComponent + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + // These fields affect the sensor order or observation size, + // So can't be changed at runtime. + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_SensorName)), true); + + EditorGUILayout.LabelField("Grid Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_CellScale)), true); + // We only supports 2D GridSensor now so lock gridSize.y to 1 + var gridSize = so.FindProperty(nameof(GridSensorComponent.m_GridSize)); + var gridSize2d = new Vector3Int(gridSize.vector3IntValue.x, 1, gridSize.vector3IntValue.z); + var newGridSize = EditorGUILayout.Vector3IntField("Grid Size", gridSize2d); + gridSize.vector3IntValue = new Vector3Int(newGridSize.x, 1, newGridSize.z); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_AgentGameObject)), true); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_RotateWithAgent)), true); + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + // detectable tags + var detectableTags = so.FindProperty(nameof(GridSensorComponent.m_DetectableTags)); + var newSize = EditorGUILayout.IntField("Detectable Tags", detectableTags.arraySize); + if (newSize != detectableTags.arraySize) + { + detectableTags.arraySize = newSize; + } + EditorGUI.indentLevel++; + for (var i = 0; i < detectableTags.arraySize; i++) + { + var objectTag = detectableTags.GetArrayElementAtIndex(i); + EditorGUILayout.PropertyField(objectTag, new GUIContent("Tag " + i), true); + } + EditorGUI.indentLevel--; + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_ColliderMask)), true); + EditorGUILayout.LabelField("Sensor Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_ObservationStacks)), true); + EditorGUI.EndDisabledGroup(); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_CompressionType)), true); + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.LabelField("Collider and Buffer", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_InitialColliderBufferSize)), true); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_MaxColliderBufferSize)), true); + } + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.LabelField("Debug Gizmo", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_ShowGizmos)), true); + EditorGUILayout.PropertyField(so.FindProperty(nameof(GridSensorComponent.m_GizmoYOffset)), true); + + // detectable objects + var debugColors = so.FindProperty(nameof(GridSensorComponent.m_DebugColors)); + var detectableObjectSize = so.FindProperty(nameof(GridSensorComponent.m_DetectableTags)).arraySize; + if (detectableObjectSize != debugColors.arraySize) + { + debugColors.arraySize = detectableObjectSize; + } + EditorGUILayout.LabelField("Debug Colors"); + EditorGUI.indentLevel++; + for (var i = 0; i < debugColors.arraySize; i++) + { + var debugColor = debugColors.GetArrayElementAtIndex(i); + EditorGUILayout.PropertyField(debugColor, new GUIContent("Tag " + i + " Color"), true); + } + EditorGUI.indentLevel--; + + var requireSensorUpdate = EditorGUI.EndChangeCheck(); + so.ApplyModifiedProperties(); + + if (requireSensorUpdate) + { + UpdateSensor(); + } + } + + void UpdateSensor() + { + var sensorComponent = serializedObject.targetObject as GridSensorComponent; + sensorComponent?.UpdateSensor(); + } + } +} diff --git a/com.unity.ml-agents/Editor/GridSensorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/GridSensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c27459abceac8410e7b829e65fcf5f355cd0db8e --- /dev/null +++ b/com.unity.ml-agents/Editor/GridSensorComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 584686b36fcb2435c8be47d70c332ed0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/Icons.meta b/com.unity.ml-agents/Editor/Icons.meta new file mode 100644 index 0000000000000000000000000000000000000000..6071205cd3514cc29e49774591630ad987a287fd --- /dev/null +++ b/com.unity.ml-agents/Editor/Icons.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e6f6d464e3884bf883137660dee8aebf +timeCreated: 1581721596 \ No newline at end of file diff --git a/com.unity.ml-agents/Editor/Icons/DemoIcon.png b/com.unity.ml-agents/Editor/Icons/DemoIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc91181bf3b559fb8af0a08b2da22b7fbb1126e Binary files /dev/null and b/com.unity.ml-agents/Editor/Icons/DemoIcon.png differ diff --git a/com.unity.ml-agents/Editor/Icons/DemoIcon.png.meta b/com.unity.ml-agents/Editor/Icons/DemoIcon.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..37831fb256c58b22f1207e19b43dc1cd71992789 --- /dev/null +++ b/com.unity.ml-agents/Editor/Icons/DemoIcon.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3352a0e8d253b4a4ea3782a6d7e09d9b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/MLAgentsSettingsBuildProvider.cs b/com.unity.ml-agents/Editor/MLAgentsSettingsBuildProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..223b67c4b27e243e41f8b257fbe75f8a581e6d5e --- /dev/null +++ b/com.unity.ml-agents/Editor/MLAgentsSettingsBuildProvider.cs @@ -0,0 +1,37 @@ +using System.Linq; +using UnityEngine; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; + + +namespace Unity.MLAgents.Editor +{ + internal class MLAgentsSettingsBuildProvider : IPreprocessBuildWithReport, IPostprocessBuildWithReport + { + public int callbackOrder => 0; + + public void OnPreprocessBuild(BuildReport report) + { + if (!EditorUtility.IsPersistent(MLAgentsSettingsManager.Settings)) + return; + + var preloadedAssets = PlayerSettings.GetPreloadedAssets().ToList(); + if (!preloadedAssets.Contains(MLAgentsSettingsManager.Settings)) + { + preloadedAssets.Add(MLAgentsSettingsManager.Settings); + PlayerSettings.SetPreloadedAssets(preloadedAssets.ToArray()); + } + } + + public void OnPostprocessBuild(BuildReport report) + { + var preloadedAssets = PlayerSettings.GetPreloadedAssets().ToList(); + if (preloadedAssets.Contains(MLAgentsSettingsManager.Settings)) + { + preloadedAssets.Remove(MLAgentsSettingsManager.Settings); + PlayerSettings.SetPreloadedAssets(preloadedAssets.ToArray()); + } + } + } +} diff --git a/com.unity.ml-agents/Editor/MLAgentsSettingsBuildProvider.cs.meta b/com.unity.ml-agents/Editor/MLAgentsSettingsBuildProvider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..214ea9863fb489001a7955e7f1d19909ab2aaf99 --- /dev/null +++ b/com.unity.ml-agents/Editor/MLAgentsSettingsBuildProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd59ff34305fa4259a2735e08afdb424 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/MLAgentsSettingsProvider.cs b/com.unity.ml-agents/Editor/MLAgentsSettingsProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..4077927a4e462bf523dc7e4ddbf4820ad1147b7a --- /dev/null +++ b/com.unity.ml-agents/Editor/MLAgentsSettingsProvider.cs @@ -0,0 +1,194 @@ +using System; +using System.Linq; +using System.IO; +using System.Runtime.CompilerServices; +using UnityEngine; +using UnityEditor; +using UnityEngine.UIElements; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.DevTests.Editor")] +namespace Unity.MLAgents.Editor +{ + internal class MLAgentsSettingsProvider : SettingsProvider, IDisposable + { + const string k_SettingsPath = "Project/ML-Agents"; + private static MLAgentsSettingsProvider s_Instance; + private string[] m_AvailableSettingsAssets; + private int m_CurrentSelectedSettingsAsset; + private SerializedObject m_SettingsObject; + [SerializeField] + private MLAgentsSettings m_Settings; + + + private MLAgentsSettingsProvider(string path, SettingsScope scope = SettingsScope.Project) + : base(path, scope) + { + s_Instance = this; + } + + [SettingsProvider] + public static SettingsProvider CreateMLAgentsSettingsProvider() + { + return new MLAgentsSettingsProvider(k_SettingsPath, SettingsScope.Project); + } + + public override void OnActivate(string searchContext, VisualElement rootElement) + { + base.OnActivate(searchContext, rootElement); + MLAgentsSettingsManager.OnSettingsChange += Reinitialize; + } + + public override void OnDeactivate() + { + base.OnDeactivate(); + MLAgentsSettingsManager.OnSettingsChange -= Reinitialize; + } + + public void Dispose() + { + m_SettingsObject?.Dispose(); + } + + public override void OnTitleBarGUI() + { + if (EditorGUILayout.DropdownButton(EditorGUIUtility.IconContent("_Popup"), FocusType.Passive, EditorStyles.label)) + { + var menu = new GenericMenu(); + for (var i = 0; i < m_AvailableSettingsAssets.Length; i++) + { + menu.AddItem(ExtractDisplayName(m_AvailableSettingsAssets[i]), m_CurrentSelectedSettingsAsset == i, (path) => + { + MLAgentsSettingsManager.Settings = AssetDatabase.LoadAssetAtPath((string)path); + }, m_AvailableSettingsAssets[i]); + } + menu.AddSeparator(""); + menu.AddItem(new GUIContent("New Settings Asset…"), false, CreateNewSettingsAsset); + menu.ShowAsContext(); + Event.current.Use(); + } + } + + private GUIContent ExtractDisplayName(string name) + { + if (name.StartsWith("Assets/")) + name = name.Substring("Assets/".Length); + if (name.EndsWith(".asset")) + name = name.Substring(0, name.Length - ".asset".Length); + if (name.EndsWith(".mlagents.settings")) + name = name.Substring(0, name.Length - ".mlagents.settings".Length); + + // Ugly hack: GenericMenu interprets "/" as a submenu path. But luckily, "/" is not the only slash we have in Unicode. + return new GUIContent(name.Replace("/", "\u29f8")); + } + + private void CreateNewSettingsAsset() + { + // Asset database always use forward slashes. Use forward slashes for all the paths. + var projectName = PlayerSettings.productName; + var path = EditorUtility.SaveFilePanel("Create ML-Agents Settings File", "Assets", + projectName + ".mlagents.settings", "asset"); + if (string.IsNullOrEmpty(path)) + { + return; + } + + path = path.Replace("\\", "/"); // Make sure we only get '/' separators. + var assetPath = Application.dataPath + "/"; + if (!path.StartsWith(assetPath, StringComparison.CurrentCultureIgnoreCase)) + { + Debug.LogError(string.Format( + "Settings must be stored in Assets folder of the project (got: '{0}')", path)); + return; + } + + var extension = Path.GetExtension(path); + if (string.Compare(extension, ".asset", StringComparison.InvariantCultureIgnoreCase) != 0) + { + path += ".asset"; + } + var relativePath = "Assets/" + path.Substring(assetPath.Length); + CreateNewSettingsAsset(relativePath); + } + + private static void CreateNewSettingsAsset(string relativePath) + { + var settings = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(settings, relativePath); + EditorGUIUtility.PingObject(settings); + // Install the settings. This will lead to an MLAgentsManager.OnSettingsChange event + // which in turn will cause this Provider to reinitialize + MLAgentsSettingsManager.Settings = settings; + } + + public override void OnGUI(string searchContext) + { + if (m_Settings == null) + { + InitializeWithCurrentSettings(); + } + + if (m_AvailableSettingsAssets.Length == 0) + { + EditorGUILayout.HelpBox( + "Click the button below to create a settings asset you can edit.", + MessageType.Info); + if (GUILayout.Button("Create settings asset", GUILayout.Height(30))) + CreateNewSettingsAsset(); + GUILayout.Space(20); + } + + using (new EditorGUI.DisabledScope(m_AvailableSettingsAssets.Length == 0)) + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.LabelField("Trainer Settings", EditorStyles.boldLabel); + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(m_SettingsObject.FindProperty("m_ConnectTrainer"), new GUIContent("Connect to Trainer")); + EditorGUILayout.PropertyField(m_SettingsObject.FindProperty("m_EditorPort"), new GUIContent("Editor Training Port")); + EditorGUI.indentLevel--; + if (EditorGUI.EndChangeCheck()) + m_SettingsObject.ApplyModifiedProperties(); + } + } + + internal void InitializeWithCurrentSettings() + { + m_AvailableSettingsAssets = FindSettingsInProject(); + + m_Settings = MLAgentsSettingsManager.Settings; + var currentSettingsPath = AssetDatabase.GetAssetPath(m_Settings); + if (string.IsNullOrEmpty(currentSettingsPath)) + { + if (m_AvailableSettingsAssets.Length > 0) + { + m_CurrentSelectedSettingsAsset = 0; + m_Settings = AssetDatabase.LoadAssetAtPath(m_AvailableSettingsAssets[0]); + MLAgentsSettingsManager.Settings = m_Settings; + } + } + else + { + var settingsList = m_AvailableSettingsAssets.ToList(); + m_CurrentSelectedSettingsAsset = settingsList.IndexOf(currentSettingsPath); + + EditorBuildSettings.AddConfigObject(MLAgentsSettingsManager.EditorBuildSettingsConfigKey, m_Settings, true); + } + + m_SettingsObject = new SerializedObject(m_Settings); + } + + private static string[] FindSettingsInProject() + { + var guids = AssetDatabase.FindAssets("t:MLAgentsSettings"); + return guids.Select(guid => AssetDatabase.GUIDToAssetPath(guid)).ToArray(); + } + + private void Reinitialize() + { + if (m_Settings != null && MLAgentsSettingsManager.Settings != m_Settings) + { + InitializeWithCurrentSettings(); + } + Repaint(); + } + } +} diff --git a/com.unity.ml-agents/Editor/MLAgentsSettingsProvider.cs.meta b/com.unity.ml-agents/Editor/MLAgentsSettingsProvider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..09eaa72b4e0e9444918b87c00633b34129448414 --- /dev/null +++ b/com.unity.ml-agents/Editor/MLAgentsSettingsProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 162489862d7f64a40990a0c06bb73bd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/Match3ActuatorComponentEditor.cs b/com.unity.ml-agents/Editor/Match3ActuatorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..0b072c5b52ea5eb6c44fcddccdfdd2f6e678057c --- /dev/null +++ b/com.unity.ml-agents/Editor/Match3ActuatorComponentEditor.cs @@ -0,0 +1,46 @@ +using UnityEditor; +using Unity.MLAgents.Integrations.Match3; +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(Match3ActuatorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class Match3ActuatorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + var component = (Match3ActuatorComponent)target; + var board = component.GetComponent(); + if (board == null) + { + EditorGUILayout.HelpBox("You must provide an implementation of an AbstractBoard.", MessageType.Warning); + return; + } + + // Drawing the RenderTextureComponent + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty("m_ActuatorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_RandomSeed"), true); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.PropertyField(so.FindProperty("m_ForceHeuristic"), true); + + var requireSensorUpdate = EditorGUI.EndChangeCheck(); + so.ApplyModifiedProperties(); + + if (requireSensorUpdate) + { + UpdateActuator(); + } + } + + void UpdateActuator() + { + } + } +} diff --git a/com.unity.ml-agents/Editor/Match3ActuatorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/Match3ActuatorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce515a12342062e53559cf867870a779f716a45e --- /dev/null +++ b/com.unity.ml-agents/Editor/Match3ActuatorComponentEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b545474cca77481bbc3c6c161dd6bbc3 +timeCreated: 1618441761 \ No newline at end of file diff --git a/com.unity.ml-agents/Editor/Match3SensorComponentEditor.cs b/com.unity.ml-agents/Editor/Match3SensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..857bedeee85d2ad0103118624ea94aefbea5fb68 --- /dev/null +++ b/com.unity.ml-agents/Editor/Match3SensorComponentEditor.cs @@ -0,0 +1,45 @@ +using UnityEditor; +using Unity.MLAgents.Integrations.Match3; +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(Match3SensorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class Match3SensorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + var component = (Match3SensorComponent)target; + var board = component.GetComponent(); + if (board == null) + { + EditorGUILayout.HelpBox("You must provide an implementation of an AbstractBoard.", MessageType.Warning); + return; + } + + // Drawing the RenderTextureComponent + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationType"), true); + } + EditorGUI.EndDisabledGroup(); + + var requireSensorUpdate = EditorGUI.EndChangeCheck(); + so.ApplyModifiedProperties(); + + if (requireSensorUpdate) + { + UpdateSensor(); + } + } + + void UpdateSensor() + { + } + } +} diff --git a/com.unity.ml-agents/Editor/Match3SensorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/Match3SensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..82a80140edcfb13a622b33519bc11311e323f1c1 --- /dev/null +++ b/com.unity.ml-agents/Editor/Match3SensorComponentEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab55bf118d03479bb797c0037989c308 +timeCreated: 1618440499 \ No newline at end of file diff --git a/com.unity.ml-agents/Editor/RayPerceptionSensorComponentBaseEditor.cs b/com.unity.ml-agents/Editor/RayPerceptionSensorComponentBaseEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..7fdfbc7c521bcbbf9756696dcdb1d7cd58e823a3 --- /dev/null +++ b/com.unity.ml-agents/Editor/RayPerceptionSensorComponentBaseEditor.cs @@ -0,0 +1,115 @@ +using UnityEngine; +using UnityEditor; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Editor +{ + internal class RayPerceptionSensorComponentBaseEditor : UnityEditor.Editor + { + bool m_RequireSensorUpdate; + + protected void OnRayPerceptionInspectorGUI(bool is3d) + { +#if !MLA_UNITY_PHYSICS_MODULE + if (is3d) + { + EditorGUILayout.HelpBox("The Physics Module is not currently present. " + + "Please add it to your project in order to use the Ray Perception APIs in the " + + $"{nameof(RayPerceptionSensorComponent3D)}", MessageType.Warning); + } +#endif +#if !MLA_UNITY_PHYSICS2D_MODULE + if (!is3d) + { + EditorGUILayout.HelpBox("The Physics2D Module is not currently present. " + + "Please add it to your project in order to use the Ray Perception APIs in the " + + $"{nameof(RayPerceptionSensorComponent3D)}", MessageType.Warning); + } +#endif + var so = serializedObject; + so.Update(); + + // Drawing the RayPerceptionSensorComponent + EditorGUI.BeginChangeCheck(); + EditorGUI.indentLevel++; + + // Don't allow certain fields to be modified during play mode. + // * SensorName affects the ordering of the Agent's observations + // * The number of tags and rays affects the size of the observations. + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_DetectableTags"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_RaysPerDirection"), true); + } + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.PropertyField(so.FindProperty("m_MaxRayDegrees"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_SphereCastRadius"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_RayLength"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_RayLayerMask"), true); + + // Because the number of observation stacks affects the observation shape, + // it is not editable during play mode. + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationStacks"), new GUIContent("Stacked Raycasts"), true); + } + EditorGUI.EndDisabledGroup(); + + if (is3d) + { + EditorGUILayout.PropertyField(so.FindProperty("m_StartVerticalOffset"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_EndVerticalOffset"), true); + } + + EditorGUILayout.PropertyField(so.FindProperty("m_AlternatingRayOrder"), true); + if (is3d) + { + EditorGUILayout.PropertyField(so.FindProperty("m_UseBatchedRaycasts"), true); + } + + EditorGUILayout.PropertyField(so.FindProperty("rayHitColor"), true); + EditorGUILayout.PropertyField(so.FindProperty("rayMissColor"), true); + + EditorGUI.indentLevel--; + if (EditorGUI.EndChangeCheck()) + { + m_RequireSensorUpdate = true; + } + + so.ApplyModifiedProperties(); + UpdateSensorIfDirty(); + } + + void UpdateSensorIfDirty() + { + if (m_RequireSensorUpdate) + { + var sensorComponent = serializedObject.targetObject as RayPerceptionSensorComponentBase; + sensorComponent?.UpdateSensor(); + m_RequireSensorUpdate = false; + } + } + } + + [CustomEditor(typeof(RayPerceptionSensorComponent2D), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class RayPerceptionSensorComponent2DEditor : RayPerceptionSensorComponentBaseEditor + { + public override void OnInspectorGUI() + { + OnRayPerceptionInspectorGUI(false); + } + } + + [CustomEditor(typeof(RayPerceptionSensorComponent3D), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class RayPerceptionSensorComponent3DEditor : RayPerceptionSensorComponentBaseEditor + { + public override void OnInspectorGUI() + { + OnRayPerceptionInspectorGUI(true); + } + } +} diff --git a/com.unity.ml-agents/Editor/RayPerceptionSensorComponentBaseEditor.cs.meta b/com.unity.ml-agents/Editor/RayPerceptionSensorComponentBaseEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c02a8ca2a9e7823121fbb5ed001e8226bf539115 --- /dev/null +++ b/com.unity.ml-agents/Editor/RayPerceptionSensorComponentBaseEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0182483e53c24d0e9f264f711ed89a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/RenderTextureSensorComponentEditor.cs b/com.unity.ml-agents/Editor/RenderTextureSensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e5fd892d3aab86452a57ee77939b236be0984fa --- /dev/null +++ b/com.unity.ml-agents/Editor/RenderTextureSensorComponentEditor.cs @@ -0,0 +1,43 @@ +using UnityEditor; +using Unity.MLAgents.Sensors; +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(RenderTextureSensorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class RenderTextureSensorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + // Drawing the RenderTextureComponent + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + EditorGUILayout.PropertyField(so.FindProperty("m_RenderTexture"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_Grayscale"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationStacks"), true); + } + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.PropertyField(so.FindProperty("m_Compression"), true); + + var requireSensorUpdate = EditorGUI.EndChangeCheck(); + so.ApplyModifiedProperties(); + + if (requireSensorUpdate) + { + UpdateSensor(); + } + } + + void UpdateSensor() + { + var sensorComponent = serializedObject.targetObject as RenderTextureSensorComponent; + sensorComponent?.UpdateSensor(); + } + } +} diff --git a/com.unity.ml-agents/Editor/RenderTextureSensorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/RenderTextureSensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fd7a57d05eded9deecc65943a399fedc14a7fac8 --- /dev/null +++ b/com.unity.ml-agents/Editor/RenderTextureSensorComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dab309e01d2964f0792de3ef914ca6b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/Unity.ML-Agents.Editor.asmdef b/com.unity.ml-agents/Editor/Unity.ML-Agents.Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..27f67d0d1cb6d25747b60b115515e7fa153aedb7 --- /dev/null +++ b/com.unity.ml-agents/Editor/Unity.ML-Agents.Editor.asmdef @@ -0,0 +1,30 @@ +{ + "name": "Unity.ML-Agents.Editor", + "references": [ + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.modules.physics", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS_MODULE" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS2D_MODULE" + } + ] +} diff --git a/com.unity.ml-agents/Editor/Unity.ML-Agents.Editor.asmdef.meta b/com.unity.ml-agents/Editor/Unity.ML-Agents.Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c031cb370114f361d57a9ec8ea8ae19316d4b80 --- /dev/null +++ b/com.unity.ml-agents/Editor/Unity.ML-Agents.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 42675ddec8c314cf08d17ee0f6f5e5a5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/UnityColors.colors b/com.unity.ml-agents/Editor/UnityColors.colors new file mode 100644 index 0000000000000000000000000000000000000000..af773637c7d60b3fda238f4ec59ff4e870098f7a --- /dev/null +++ b/com.unity.ml-agents/Editor/UnityColors.colors @@ -0,0 +1,64 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12323, guid: 0000000000000000e000000000000000, type: 0} + m_Name: UnityColors + m_EditorClassIdentifier: + m_Presets: + - m_Name: + m_Color: {r: 0.12941177, g: 0.5882353, b: 0.9529412, a: 1} + - m_Name: + m_Color: {r: 0, g: 0.34117648, b: 0.6039216, a: 1} + - m_Name: + m_Color: {r: 0.2627451, g: 0.7019608, b: 0.9019608, a: 1} + - m_Name: + m_Color: {r: 0.92156863, g: 0.25490198, b: 0.47843137, a: 1} + - m_Name: + m_Color: {r: 0.92941177, g: 0.3254902, b: 0.31764707, a: 1} + - m_Name: + m_Color: {r: 0.3647059, g: 0.41568628, b: 0.69411767, a: 1} + - m_Name: + m_Color: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1} + - m_Name: + m_Color: {r: 0.74509805, g: 0.7372549, b: 0.7411765, a: 1} + - m_Name: + m_Color: {r: 0.9254902, g: 0.9372549, b: 0.9411765, a: 1} + - m_Name: + m_Color: {r: 0.6039216, g: 0.31764707, b: 0.627451, a: 1} + - m_Name: + m_Color: {r: 0.2901961, g: 0.1764706, b: 0.5254902, a: 1} + - m_Name: + m_Color: {r: 0.4627451, g: 0.35686275, b: 0.654902, a: 1} + - m_Name: + m_Color: {r: 0.6039216, g: 0.31764707, b: 0.627451, a: 1} + - m_Name: + m_Color: {r: 0.20392157, g: 0.75686276, b: 0.8392157, a: 1} + - m_Name: + m_Color: {r: 0.1254902, g: 0.6509804, b: 0.60784316, a: 1} + - m_Name: + m_Color: {r: 0.39609292, g: 0.49962592, b: 0.6509434, a: 0} + - m_Name: + m_Color: {r: 0.40392157, g: 0.7372549, b: 0.41960785, a: 1} + - m_Name: + m_Color: {r: 0.60784316, g: 0.8039216, b: 0.39607844, a: 1} + - m_Name: + m_Color: {r: 0.8235294, g: 0.8784314, b: 0.34901962, a: 1} + - m_Name: + m_Color: {r: 1, g: 0.79607844, b: 0.15294118, a: 1} + - m_Name: + m_Color: {r: 1, g: 0.93333334, b: 0.34509805, a: 1} + - m_Name: + m_Color: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1} + - m_Name: + m_Color: {r: 0.9529412, g: 0.4392157, b: 0.27450982, a: 1} + - m_Name: + m_Color: {r: 0.74509805, g: 0.22745098, b: 0.15294118, a: 1} + - m_Name: + m_Color: {r: 0.9529412, g: 0.4392157, b: 0.27450982, a: 1} diff --git a/com.unity.ml-agents/Editor/UnityColors.colors.meta b/com.unity.ml-agents/Editor/UnityColors.colors.meta new file mode 100644 index 0000000000000000000000000000000000000000..34519c21cefbefbe352ddc1b2b7ca516114bd016 --- /dev/null +++ b/com.unity.ml-agents/Editor/UnityColors.colors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b20b0226063034686a6cf92ade284285 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Editor/VectorSensorComponentEditor.cs b/com.unity.ml-agents/Editor/VectorSensorComponentEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..aae6fd796f2746450f7eca5d30289b039738c3c9 --- /dev/null +++ b/com.unity.ml-agents/Editor/VectorSensorComponentEditor.cs @@ -0,0 +1,31 @@ +using UnityEditor; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Editor +{ + [CustomEditor(typeof(VectorSensorComponent), editorForChildClasses: true)] + [CanEditMultipleObjects] + internal class VectorSensorComponentEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var so = serializedObject; + so.Update(); + + // Drawing the VectorSensorComponent + + EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); + { + // These fields affect the sensor order or observation size, + // So can't be changed at runtime. + EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationSize"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationType"), true); + EditorGUILayout.PropertyField(so.FindProperty("m_ObservationStacks"), true); + } + EditorGUI.EndDisabledGroup(); + + so.ApplyModifiedProperties(); + } + } +} diff --git a/com.unity.ml-agents/Editor/VectorSensorComponentEditor.cs.meta b/com.unity.ml-agents/Editor/VectorSensorComponentEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9862a23944e0a904bd2c8091c33390457ba3b707 --- /dev/null +++ b/com.unity.ml-agents/Editor/VectorSensorComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa0230c3402f04921acdbbdb61f6ff00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/LICENSE.md b/com.unity.ml-agents/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..42863a2c9855393f093a6a8023f159f7de2c1c66 --- /dev/null +++ b/com.unity.ml-agents/LICENSE.md @@ -0,0 +1,202 @@ +com.unity.ml-agents copyright © 2017 Unity Technologies + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. diff --git a/com.unity.ml-agents/LICENSE.md.meta b/com.unity.ml-agents/LICENSE.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..0497eff44794adea7b8ded55f803bbfa9729936e --- /dev/null +++ b/com.unity.ml-agents/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3b008ccfd571c4bc08e5ae283e73db3f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins.meta b/com.unity.ml-agents/Plugins.meta new file mode 100644 index 0000000000000000000000000000000000000000..e4a9de128ac75d90e1608ff253fa3f1119644e7c --- /dev/null +++ b/com.unity.ml-agents/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 694794cb53c6c4bfc9b84ca5022f4ae2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/IL2CPP.DL.Stubs.c b/com.unity.ml-agents/Plugins/IL2CPP.DL.Stubs.c new file mode 100644 index 0000000000000000000000000000000000000000..42f1dfde7cc1ed45b05e8736b9149ddfed912066 --- /dev/null +++ b/com.unity.ml-agents/Plugins/IL2CPP.DL.Stubs.c @@ -0,0 +1,10 @@ +// These stubs fix an issue compiling GRPC on Windows with IL2CPP. +// For the moment, only Inference works. (training doesn't) + +void * dlopen(const char *filename, int flags) { + return 0; +} + +void * dlsym(void *handle, const char *symbol) { + return 0; +} diff --git a/com.unity.ml-agents/Plugins/IL2CPP.DL.Stubs.c.meta b/com.unity.ml-agents/Plugins/IL2CPP.DL.Stubs.c.meta new file mode 100644 index 0000000000000000000000000000000000000000..9f2b819fa0e7fe8e97971687d84fd220c0ea46f3 --- /dev/null +++ b/com.unity.ml-agents/Plugins/IL2CPP.DL.Stubs.c.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 3509a8908cf600c4f914a0705123a363 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 1 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 0 + Exclude Win64: 0 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer.meta b/com.unity.ml-agents/Plugins/ProtoBuffer.meta new file mode 100644 index 0000000000000000000000000000000000000000..af0fdcb10529a91dc7e9eed9cc547e094971304f --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e44343d7e31b04d47bd5f7329c918ffe +folderAsset: yes +timeCreated: 1521839636 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/Grpc.Core.dll b/com.unity.ml-agents/Plugins/ProtoBuffer/Grpc.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..601f87c27a3468cb0a802d0c7d9a3a2407ed605b Binary files /dev/null and b/com.unity.ml-agents/Plugins/ProtoBuffer/Grpc.Core.dll differ diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/Grpc.Core.dll.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/Grpc.Core.dll.meta new file mode 100644 index 0000000000000000000000000000000000000000..1e82ae4a51b22ce164653a667d4cc05602503cfa --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/Grpc.Core.dll.meta @@ -0,0 +1,118 @@ +fileFormatVersion: 2 +guid: cbf24ddeec4054edc9ad4c8295556878 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude CloudRendering: 1 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 0 + Exclude WebGL: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + CloudRendering: CloudRendering + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: {} + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/System.Interactive.Async.dll b/com.unity.ml-agents/Plugins/ProtoBuffer/System.Interactive.Async.dll new file mode 100644 index 0000000000000000000000000000000000000000..48efea419e4adf75762e1eefe80324a78f10f669 Binary files /dev/null and b/com.unity.ml-agents/Plugins/ProtoBuffer/System.Interactive.Async.dll differ diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/System.Interactive.Async.dll.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/System.Interactive.Async.dll.meta new file mode 100644 index 0000000000000000000000000000000000000000..eb7680bdae78e47e199073171c56483615e8133d --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/System.Interactive.Async.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 9502ce7e38c5947dba996570732b6e9f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 1 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/link.xml b/com.unity.ml-agents/Plugins/ProtoBuffer/link.xml new file mode 100644 index 0000000000000000000000000000000000000000..857dfdd0a4e3190ae8b28f6a909a46e20cc6c59c --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/link.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/link.xml.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/link.xml.meta new file mode 100644 index 0000000000000000000000000000000000000000..872460e0785dd1ec6529bc7e0b35f2dc849655b5 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/link.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f94355fa6eab94c2d8529747b92ca3e1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes.meta new file mode 100644 index 0000000000000000000000000000000000000000..6995400aec7039a2e71ba66f11d7f2ac227d3b25 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b8022add2e5264884a117894eeaf9809 +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux.meta new file mode 100644 index 0000000000000000000000000000000000000000..97848b12976623902bcbe84b323ba309c90e54c8 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 50c3602c6f6244621861928757e31463 +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native.meta new file mode 100644 index 0000000000000000000000000000000000000000..a8b33def018b475d21a7db899c63382f99528521 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ba192b1e561564e1583e0a87334f8682 +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so new file mode 100644 index 0000000000000000000000000000000000000000..11d688c9b4aaae35b681fdfd3c813f2b977ee8e6 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74d12da9c543cbfca6771fc0cd970792820a50d1d935c64809ec69b69580d4f0 +size 14040424 diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so.meta new file mode 100644 index 0000000000000000000000000000000000000000..cf508374c64fb3054324d7a2751150b347d32c66 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x64.so.meta @@ -0,0 +1,113 @@ +fileFormatVersion: 2 +guid: c9d901caf522f4dc5815786fa764a5da +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude CloudRendering: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + CloudRendering: CloudRendering + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Linux + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so new file mode 100644 index 0000000000000000000000000000000000000000..df4bba62677d1a1cd19fec02dd06fcac6269958b --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5bf256015fbb11a8dfa1eb78688b2796ba6c961a052de543b78ea458866c017 +size 11051776 diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so.meta new file mode 100644 index 0000000000000000000000000000000000000000..a3592911d6a0ad912303910a8498d4fbf7b04f88 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/linux/native/libgrpc_csharp_ext.x86.so.meta @@ -0,0 +1,113 @@ +fileFormatVersion: 2 +guid: 7dfb52431a6d941c89758cf0a217e3ab +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude CloudRendering: 1 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + CloudRendering: CloudRendering + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: Linux + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx.meta new file mode 100644 index 0000000000000000000000000000000000000000..69cbe8ef602150844f1afcf70d03a0e25dba8de0 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f43fa6e62fb4c4105b270be1ae7bbbfd +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native.meta new file mode 100644 index 0000000000000000000000000000000000000000..24fab959db67f06e98f028efac929bc7f6149408 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 55aee008fb6a3411aa96f2f9911f9207 +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle new file mode 100644 index 0000000000000000000000000000000000000000..5bbf083758681c3990b88b74552586d83492d09d --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0d4ee893434821340aceeb5c4aedd84b240f0e0ffb8a6329dc7d00e1e3982a2 +size 9741920 diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle.meta new file mode 100644 index 0000000000000000000000000000000000000000..2a1f0df2f55685952bb385e8dadd111f5b6fb9a0 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/osx/native/libgrpc_csharp_ext.x64.bundle.meta @@ -0,0 +1,137 @@ +fileFormatVersion: 2 +guid: 7eeb863bd08ba4388829c23da03a714f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude CloudRendering: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + : OSXIntel + second: + enabled: 1 + settings: {} + - first: + : OSXIntel64 + second: + enabled: 1 + settings: {} + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + CloudRendering: CloudRendering + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: OSX + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win.meta new file mode 100644 index 0000000000000000000000000000000000000000..b1e54c9a48ba2729258f522d53f9eaa648df1b86 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a961485c3484a4002ac4961a8481f6cc +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native.meta new file mode 100644 index 0000000000000000000000000000000000000000..42e4968ae56e2472aead4a160306adaff68d0518 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: af9f9f367bbc543b8ba41e58dcdd6e66 +folderAsset: yes +timeCreated: 1521595360 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..883ef055c86d2717aa7b564bec612e8e410b1b06 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae75c1c394a4df51c97a8d6b3939d89192d28866558e428be49abfad2dabeded +size 1782784 diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll.meta new file mode 100644 index 0000000000000000000000000000000000000000..56500dc9b60b8aefaf304158180f864f1f990265 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x64.dll.meta @@ -0,0 +1,105 @@ +fileFormatVersion: 2 +guid: f4d9429fe43154fbd9d158c129e0ff33 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 0 + Exclude Win: 1 + Exclude Win64: 0 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll new file mode 100644 index 0000000000000000000000000000000000000000..1508f384b01308db94165bc7d932022579e2cf12 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:335573b87da87108fb5401a5faf859ed079000f881d3947cdaaa29c8e7db965f +size 1455104 diff --git a/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll.meta b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll.meta new file mode 100644 index 0000000000000000000000000000000000000000..77354acf46ced9cdde91fd63e51d89575c48daf9 --- /dev/null +++ b/com.unity.ml-agents/Plugins/ProtoBuffer/runtimes/win/native/grpc_csharp_ext.x86.dll.meta @@ -0,0 +1,105 @@ +fileFormatVersion: 2 +guid: d74134114def74fb4ae781c015deaa95 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: Windows + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/System.IO.Abstractions.TestingHelpers.dll b/com.unity.ml-agents/Plugins/System.IO.Abstractions.TestingHelpers.dll new file mode 100644 index 0000000000000000000000000000000000000000..0d2b68f2e8c540d8a89a15800c78b72e43e6ee1f Binary files /dev/null and b/com.unity.ml-agents/Plugins/System.IO.Abstractions.TestingHelpers.dll differ diff --git a/com.unity.ml-agents/Plugins/System.IO.Abstractions.TestingHelpers.dll.meta b/com.unity.ml-agents/Plugins/System.IO.Abstractions.TestingHelpers.dll.meta new file mode 100644 index 0000000000000000000000000000000000000000..c6d910d8eeb8f41d6584e735bc288ef48dc855db --- /dev/null +++ b/com.unity.ml-agents/Plugins/System.IO.Abstractions.TestingHelpers.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2d7ba4e1037b64de5b860bcbe15755b3 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Plugins/System.IO.Abstractions.dll b/com.unity.ml-agents/Plugins/System.IO.Abstractions.dll new file mode 100644 index 0000000000000000000000000000000000000000..4fe6ccbf43a5aa3a7d4af6d0273fd20f3cb10dd9 Binary files /dev/null and b/com.unity.ml-agents/Plugins/System.IO.Abstractions.dll differ diff --git a/com.unity.ml-agents/Plugins/System.IO.Abstractions.dll.meta b/com.unity.ml-agents/Plugins/System.IO.Abstractions.dll.meta new file mode 100644 index 0000000000000000000000000000000000000000..5432c24e8a39b0aeb3dbb88dde0641c941ac00ef --- /dev/null +++ b/com.unity.ml-agents/Plugins/System.IO.Abstractions.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: b01205587773841ad95e8ceda347e8bd +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/README.md b/com.unity.ml-agents/README.md new file mode 100644 index 0000000000000000000000000000000000000000..cbcc9397e275d4ff4ae1a04f4eb7a3155a87e7b3 --- /dev/null +++ b/com.unity.ml-agents/README.md @@ -0,0 +1,15 @@ +# com.unity.ml-agents + +ML-Agents is a Unity package that allows users to use state-of-the-art machine learning to create intelligent character behaviors in any Unity environment (games, robotics, film, etc.). + +## Installation + +Please refer to the [ML-Agents github repo] for installation instructions. + +## Usage + +Please refer to the [ML-Agents documentation] page for usage guides. + + +[ML-Agents github repo]: https://github.com/Unity-Technologies/ml-agents +[ML-Agents documentation]: https://unity-technologies.github.io/ml-agents/ diff --git a/com.unity.ml-agents/README.md.meta b/com.unity.ml-agents/README.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..bbb2279ba2f3d742331d2b3abb4ec918deb8d97f --- /dev/null +++ b/com.unity.ml-agents/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 940521c5d10354cde82c2d572d170c97 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime.meta b/com.unity.ml-agents/Runtime.meta new file mode 100644 index 0000000000000000000000000000000000000000..b5ab5034ab9e187823f2364f1fdd48fa68dd27f3 --- /dev/null +++ b/com.unity.ml-agents/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3a287cfa95bf4bdcad4997f7d48153b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Academy.cs b/com.unity.ml-agents/Runtime/Academy.cs new file mode 100644 index 0000000000000000000000000000000000000000..f2aeaa57a8700b730414a3096bcdb620716d4b28 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Academy.cs @@ -0,0 +1,695 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +#if UNITY_EDITOR +using UnityEditor; +#endif +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Policies; +using Unity.MLAgents.SideChannels; +using Unity.Barracuda; + +/** + * Welcome to Unity Machine Learning Agents (ML-Agents). + * + * The ML-Agents toolkit contains four entities: Academy, Agent, Communicator and + * Python API. The academy and connected agents live within + * a learning environment (herein called Environment), while the communicator + * manages the communication between the learning environment and the Python + * API. For more information on each of these entities, in addition to how to + * set-up a learning environment and train the behavior of characters in a + * Unity scene, please browse our documentation pages on GitHub: + * https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/ + */ + +namespace Unity.MLAgents +{ + /// + /// Helper class to step the Academy during FixedUpdate phase. + /// + internal class AcademyFixedUpdateStepper : MonoBehaviour + { + void FixedUpdate() + { + // Check if the stepper belongs to the current Academy and destroy it if it's not. + // This is to prevent from having leaked stepper from previous runs. + if (!Academy.IsInitialized || !Academy.Instance.IsStepperOwner(this)) + { + Destroy(this.gameObject); + } + else + { + Academy.Instance.EnvironmentStep(); + } + } + } + + /// + /// The Academy singleton manages agent training and decision making. + /// + /// + /// Access the Academy singleton through the + /// property. The Academy instance is initialized the first time it is accessed (which will + /// typically be by the first initialized in a scene). + /// + /// At initialization, the Academy attempts to connect to the Python training process through + /// the external communicator. If successful, the training process can train + /// instances. When you set an agent's setting + /// to , the agent exchanges data with the training process + /// to make decisions. If no training process is available, agents with the default behavior + /// fall back to inference or heuristic decisions. (You can also set agents to always use + /// inference or heuristics.) + /// + [HelpURL("https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/" + + "docs/Learning-Environment-Design.md")] + public class Academy : IDisposable + { + /// + /// Communication protocol version. + /// When connecting to python, this must be compatible with UnityEnvironment.API_VERSION. + /// We follow semantic versioning on the communication version, so existing + /// functionality will work as long the major versions match. + /// This should be changed whenever a change is made to the communication protocol. + /// + /// + /// History: + /// + /// + /// 1.0.0 + /// Initial version + /// + /// + /// 1.1.0 + /// Support concatenated PNGs for compressed observations. + /// + /// + /// 1.2.0 + /// Support compression mapping for stacked compressed observations. + /// + /// + /// 1.3.0 + /// Support both continuous and discrete actions. + /// + /// + /// 1.4.0 + /// Support training analytics sent from python trainer to the editor. + /// + /// + /// 1.5.0 + /// Support variable length observation training and multi-agent groups. + /// + /// + /// + const string k_ApiVersion = "1.5.0"; + + /// + /// Unity package version of com.unity.ml-agents. + /// This must match the version string in package.json and is checked in a unit test. + /// + internal const string k_PackageVersion = "2.3.0-exp.4"; + + const int k_EditorTrainingPort = 5004; + + const string k_PortCommandLineFlag = "--mlagents-port"; + + // Lazy initializer pattern, see https://csharpindepth.com/articles/singleton#lazy + static Lazy s_Lazy = new Lazy(() => new Academy()); + + /// + ///Reports whether the Academy has been initialized yet. + /// + /// True if the Academy is initialized, false otherwise. + public static bool IsInitialized + { + get { return s_Lazy.IsValueCreated; } + } + + /// + /// The singleton Academy object. + /// + /// Getting the instance initializes the Academy, if necessary. + public static Academy Instance { get { return s_Lazy.Value; } } + + // Fields not provided in the Inspector. + + /// + /// Reports whether or not the communicator is on. + /// + /// + /// + /// True, if communicator is on, false otherwise. + /// + public bool IsCommunicatorOn + { + get { return Communicator != null; } + } + + /// The number of episodes completed by the environment. Incremented + /// each time the environment is reset. + int m_EpisodeCount; + + /// The number of steps completed within the current episode. Incremented + /// each time a step is taken in the environment. Is reset to 0 during + /// . + int m_StepCount; + + /// The number of total number of steps completed during the whole simulation. Incremented + /// each time a step is taken in the environment. + int m_TotalStepCount; + + /// Pointer to the communicator currently in use by the Academy. + internal ICommunicator Communicator; + + bool m_Initialized; + List m_ModelRunners = new List(); + + // Flag used to keep track of the first time the Academy is reset. + bool m_HadFirstReset; + + // Detect an Academy step called by user code that is also called by the Academy. + private RecursionChecker m_StepRecursionChecker = new RecursionChecker("EnvironmentStep"); + + // Random seed used for inference. + int m_InferenceSeed; + + /// + /// Set the random seed used for inference. This should be set before any Agents are added + /// to the scene. The seed is passed to the ModelRunner constructor, and incremented each + /// time a new ModelRunner is created. + /// + public int InferenceSeed + { + set { m_InferenceSeed = value; } + } + + int m_NumAreas; + + /// + /// Number of training areas to instantiate. + /// + public int NumAreas => m_NumAreas; + + /// + /// Returns the RLCapabilities of the python client that the unity process is connected to. + /// + internal UnityRLCapabilities TrainerCapabilities { get; set; } + + + // The Academy uses a series of events to communicate with agents + // to facilitate synchronization. More specifically, it ensures + // that all the agents perform their steps in a consistent order (i.e. no + // agent can act based on a decision before another agent has had a chance + // to request a decision). + + // Signals to all the Agents at each environment step so they can use + // their Policy to decide on their next action. + internal event Action DecideAction; + + // Signals to all the listeners that the academy is being destroyed + internal event Action DestroyAction; + + // Signals to the Agent that a new step is about to start. + // This will mark the Agent as Done if it has reached its maxSteps. + internal event Action AgentIncrementStep; + + + /// + /// Signals to all of the s that their step is about to begin. + /// This is a good time for an to decide if it would like to + /// call or + /// for this step. Any other pre-step setup could be done during this event as well. + /// + public event Action AgentPreStep; + + // Signals to all the agents at each environment step so they can send + // their state to their Policy if they have requested a decision. + internal event Action AgentSendState; + + // Signals to all the agents at each environment step so they can act if + // they have requested a decision. + internal event Action AgentAct; + + // Signals to all the agents each time the Academy force resets. + internal event Action AgentForceReset; + + /// + /// Signals that the Academy has been reset by the training process. + /// + public event Action OnEnvironmentReset; + + AcademyFixedUpdateStepper m_FixedUpdateStepper; + GameObject m_StepperObject; + + + /// + /// Private constructor called the first time the Academy is used. + /// Academy uses this time to initialize internal data + /// structures, initialize the environment and check for the existence + /// of a communicator. + /// + protected Academy() + { + Application.quitting += Dispose; +#if UNITY_EDITOR || UNITY_STANDALONE + if (!CommunicatorFactory.CommunicatorRegistered) + { + Debug.Log("Registered Communicator in Academy."); + CommunicatorFactory.Register(RpcCommunicator.Create); + } +#endif + LazyInitialize(); + +#if UNITY_EDITOR + EditorApplication.playModeStateChanged += HandleOnPlayModeChanged; +#endif + } + +#if UNITY_EDITOR + /// + /// Clean up the Academy when switching from edit mode to play mode + /// + /// State. + void HandleOnPlayModeChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingEditMode) + { + Dispose(); + } + } + +#endif + + /// + /// Initialize the Academy if it hasn't already been initialized. + /// This method is always safe to call; it will have no effect if the Academy is already + /// initialized. + /// + internal void LazyInitialize() + { + if (!m_Initialized) + { + InitializeEnvironment(); + m_Initialized = true; + } + } + + /// + /// Enable stepping of the Academy during the FixedUpdate phase. This is done by creating + /// a temporary GameObject with a MonoBehaviour that calls Academy.EnvironmentStep(). + /// + void EnableAutomaticStepping() + { + if (m_FixedUpdateStepper != null) + { + return; + } + + m_StepperObject = new GameObject("AcademyFixedUpdateStepper"); + // Don't show this object in the hierarchy + m_StepperObject.hideFlags = HideFlags.HideInHierarchy; + m_FixedUpdateStepper = m_StepperObject.AddComponent(); + try + { + // This try-catch is because DontDestroyOnLoad cannot be used in Editor Tests + GameObject.DontDestroyOnLoad(m_StepperObject); + } + catch { } + } + + /// + /// Disable stepping of the Academy during the FixedUpdate phase. If this is called, the Academy must be + /// stepped manually by the user by calling Academy.EnvironmentStep(). + /// + void DisableAutomaticStepping() + { + if (m_FixedUpdateStepper == null) + { + return; + } + + m_FixedUpdateStepper = null; + if (Application.isEditor) + { + UnityEngine.Object.DestroyImmediate(m_StepperObject); + } + else + { + UnityEngine.Object.Destroy(m_StepperObject); + } + + m_StepperObject = null; + } + + /// + /// Determines whether or not the Academy is automatically stepped during the FixedUpdate phase. + /// + /// Set true to enable automatic stepping; false to disable. + public bool AutomaticSteppingEnabled + { + get { return m_FixedUpdateStepper != null; } + set + { + if (value) + { + EnableAutomaticStepping(); + } + else + { + DisableAutomaticStepping(); + } + } + } + + // Used to read Python-provided environment parameters + static int ReadPortFromArgs() + { + var args = Environment.GetCommandLineArgs(); + var inputPort = ""; + for (var i = 0; i < args.Length; i++) + { + if (args[i] == k_PortCommandLineFlag) + { + inputPort = args[i + 1]; + } + } + + try + { + return int.Parse(inputPort); + } + catch + { + // No arg passed, or malformed port number. +#if UNITY_EDITOR + // Try connecting on the default editor port + return MLAgentsSettingsManager.Settings.ConnectTrainer ? MLAgentsSettingsManager.Settings.EditorPort : -1; +#else + // This is an executable, so we don't try to connect. + return -1; +#endif + } + } + + EnvironmentParameters m_EnvironmentParameters; + StatsRecorder m_StatsRecorder; + + /// + /// Returns the instance. If training + /// features such as Curriculum Learning or Environment Parameter Randomization are used, + /// then the values of the parameters generated from the training process can be + /// retrieved here. + /// + /// + public EnvironmentParameters EnvironmentParameters + { + get { return m_EnvironmentParameters; } + } + + /// + /// Returns the instance. This instance can be used + /// to record any statistics from the Unity environment. + /// + /// + public StatsRecorder StatsRecorder + { + get { return m_StatsRecorder; } + } + + /// + /// Initializes the environment, configures it and initializes the Academy. + /// + void InitializeEnvironment() + { + TimerStack.Instance.AddMetadata("communication_protocol_version", k_ApiVersion); + TimerStack.Instance.AddMetadata("com.unity.ml-agents_version", k_PackageVersion); + + EnableAutomaticStepping(); + + SideChannelManager.RegisterSideChannel(new EngineConfigurationChannel()); + SideChannelManager.RegisterSideChannel(new TrainingAnalyticsSideChannel()); + m_EnvironmentParameters = new EnvironmentParameters(); + m_StatsRecorder = new StatsRecorder(); + + // Try to launch the communicator by using the arguments passed at launch + var port = ReadPortFromArgs(); + if (port > 0) + { + Communicator = CommunicatorFactory.Create(); + } + + if (Communicator == null && CommunicatorFactory.Enabled && port > 0) + { + Debug.Log("Communicator failed to start!"); + } + + if (Communicator != null) + { + // We try to exchange the first message with Python. If this fails, it means + // no Python Process is ready to train the environment. In this case, the + // environment must use Inference. + bool initSuccessful = false; + var communicatorInitParams = new CommunicatorInitParameters + { + port = port, + unityCommunicationVersion = k_ApiVersion, + unityPackageVersion = k_PackageVersion, + name = "AcademySingleton", + CSharpCapabilities = new UnityRLCapabilities() + }; + + try + { + initSuccessful = Communicator.Initialize( + communicatorInitParams, + out var unityRlInitParameters + ); + if (initSuccessful) + { + UnityEngine.Random.InitState(unityRlInitParameters.seed); + // We might have inference-only Agents, so set the seed for them too. + m_InferenceSeed = unityRlInitParameters.seed; + m_NumAreas = unityRlInitParameters.numAreas; + TrainerCapabilities = unityRlInitParameters.TrainerCapabilities; + TrainerCapabilities.WarnOnPythonMissingBaseRLCapabilities(); + } + else + { + Debug.Log($"Couldn't connect to trainer on port {port} using API version {k_ApiVersion}. Will perform inference instead."); + Communicator = null; + } + } + catch (Exception ex) + { + Debug.Log($"Unexpected exception when trying to initialize communication: {ex}\nWill perform inference instead."); + Communicator = null; + } + } + + if (Communicator != null) + { + Communicator.QuitCommandReceived += OnQuitCommandReceived; + Communicator.ResetCommandReceived += OnResetCommand; + } + + // If a communicator is enabled/provided, then we assume we are in + // training mode. In the absence of a communicator, we assume we are + // in inference mode. + + ResetActions(); + } + + void ResetActions() + { + DecideAction = () => { }; + DestroyAction = () => { }; + AgentPreStep = i => { }; + AgentSendState = () => { }; + AgentAct = () => { }; + AgentForceReset = () => { }; + OnEnvironmentReset = () => { }; + } + + static void OnQuitCommandReceived() + { +#if UNITY_EDITOR + EditorApplication.isPlaying = false; +#endif + Application.Quit(); + } + + void OnResetCommand() + { + ForcedFullReset(); + } + + /// + /// The current episode count. + /// + /// + /// Current episode number. + /// + public int EpisodeCount + { + get { return m_EpisodeCount; } + } + + /// + /// The current step count (within the current episode). + /// + /// + /// Current step count. + /// + public int StepCount + { + get { return m_StepCount; } + } + + /// + /// Returns the total step count. + /// + /// + /// Total step count. + /// + public int TotalStepCount + { + get { return m_TotalStepCount; } + } + + /// + /// Forces the full reset. The done flags are not affected. Is either + /// called the first reset at inference and every external reset + /// at training. + /// + void ForcedFullReset() + { + EnvironmentReset(); + AgentForceReset?.Invoke(); + m_HadFirstReset = true; + } + + /// + /// Performs a single environment update of the Academy and Agent + /// objects within the environment. + /// + public void EnvironmentStep() + { + using (m_StepRecursionChecker.Start()) + { + if (!m_HadFirstReset) + { + ForcedFullReset(); + } + + AgentPreStep?.Invoke(m_StepCount); + + m_StepCount += 1; + m_TotalStepCount += 1; + AgentIncrementStep?.Invoke(); + + using (TimerStack.Instance.Scoped("AgentSendState")) + { + AgentSendState?.Invoke(); + } + + using (TimerStack.Instance.Scoped("DecideAction")) + { + DecideAction?.Invoke(); + } + + // If the communicator is not on, we need to clear the SideChannel sending queue + if (!IsCommunicatorOn) + { + SideChannelManager.GetSideChannelMessage(); + } + + using (TimerStack.Instance.Scoped("AgentAct")) + { + AgentAct?.Invoke(); + } + } + } + + /// + /// Resets the environment, including the Academy. + /// + void EnvironmentReset() + { + m_StepCount = 0; + m_EpisodeCount++; + OnEnvironmentReset?.Invoke(); + } + + /// + /// Creates or retrieves an existing ModelRunner that uses the same + /// NNModel and the InferenceDevice as provided. + /// + /// The NNModel the ModelRunner must use. + /// Description of the actions for the Agent. + /// + /// The inference device (CPU or GPU) the ModelRunner will use. + /// + /// Inference only: set to true if the action selection from model should be + /// Deterministic. + /// The ModelRunner compatible with the input settings. + internal ModelRunner GetOrCreateModelRunner( + NNModel model, ActionSpec actionSpec, InferenceDevice inferenceDevice, bool deterministicInference = false) + { + var modelRunner = m_ModelRunners.Find(x => x.HasModel(model, inferenceDevice)); + if (modelRunner == null) + { + modelRunner = new ModelRunner(model, actionSpec, inferenceDevice, m_InferenceSeed, deterministicInference); + m_ModelRunners.Add(modelRunner); + m_InferenceSeed++; + } + return modelRunner; + } + + /// + /// Shut down the Academy. + /// + public void Dispose() + { + DisableAutomaticStepping(); + + // Signal to listeners that the academy is being destroyed now + DestroyAction?.Invoke(); + + Communicator?.Dispose(); + Communicator = null; + + m_EnvironmentParameters.Dispose(); + m_StatsRecorder.Dispose(); + SideChannelManager.UnregisterAllSideChannels(); // unregister custom side channels + + if (m_ModelRunners != null) + { + foreach (var mr in m_ModelRunners) + { + mr.Dispose(); + } + + m_ModelRunners = null; + } + + // Clear out the actions so we're not keeping references to any old objects + ResetActions(); + + // TODO - Pass worker ID or some other identifier, + // so that multiple envs won't overwrite each others stats. + TimerStack.Instance.SaveJsonTimers(); + m_Initialized = false; + + // Reset the Lazy instance + s_Lazy = new Lazy(() => new Academy()); + } + + /// + /// Check if the input AcademyFixedUpdateStepper belongs to this Academy. + /// + internal bool IsStepperOwner(AcademyFixedUpdateStepper stepper) + { + return GameObject.ReferenceEquals(stepper.gameObject, Academy.Instance.m_StepperObject); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Academy.cs.meta b/com.unity.ml-agents/Runtime/Academy.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b0a5b6ffc4d033791f4fa6a195f9b30acc81571e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Academy.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b1fc0029fee784d9cb9854f8912bfd07 +timeCreated: 1503613254 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Actuators.meta b/com.unity.ml-agents/Runtime/Actuators.meta new file mode 100644 index 0000000000000000000000000000000000000000..96bbfb99b3a8aea380baa89b290a6a19754d81d9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26733e59183b6479e8f0e892a8bf09a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs b/com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs new file mode 100644 index 0000000000000000000000000000000000000000..b3026eac39879ec5429115d6f4701c5bb1025efc --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace Unity.MLAgents.Actuators +{ + /// + /// ActionSegment{T} is a data structure that allows access to a segment of an underlying array + /// in order to avoid the copying and allocation of sub-arrays. The segment is defined by + /// the offset into the original array, and an length. + /// + /// The type of object stored in the underlying + public readonly struct ActionSegment : IEnumerable, IEquatable> + where T : struct + { + /// + /// The zero-based offset into the original array at which this segment starts. + /// + public readonly int Offset; + + /// + /// The number of items this segment can access in the underlying array. + /// + public readonly int Length; + + /// + /// An Empty segment which has an offset of 0, a Length of 0, and it's underlying array + /// is also empty. + /// + public static ActionSegment Empty = new ActionSegment(System.Array.Empty(), 0, 0); + + static void CheckParameters(IReadOnlyCollection actionArray, int offset, int length) + { +#if DEBUG + if (offset + length > actionArray.Count) + { + throw new ArgumentOutOfRangeException(nameof(offset), + $"Arguments offset: {offset} and length: {length} " + + $"are out of bounds of actionArray: {actionArray.Count}."); + } +#endif + } + + /// + /// Construct an with just an actionArray. The will + /// be set to 0 and the will be set to `actionArray.Length`. + /// + /// The action array to use for the this segment. + public ActionSegment(T[] actionArray) + : this(actionArray ?? System.Array.Empty(), 0, actionArray?.Length ?? 0) { } + + /// + /// Construct an with an underlying array + /// and offset, and a length. + /// + /// The underlying array which this segment has a view into + /// The zero-based offset into the underlying array. + /// The length of the segment. + public ActionSegment(T[] actionArray, int offset, int length) + { +#if DEBUG + CheckParameters(actionArray ?? System.Array.Empty(), offset, length); +#endif + Array = actionArray ?? System.Array.Empty(); + Offset = offset; + Length = length; + } + + /// + /// Get the underlying of this segment. + /// + public T[] Array { get; } + + /// + /// Allows access to the underlying array using array syntax. + /// + /// The zero-based index of the segment. + /// Thrown when the index is less than 0 or + /// greater than or equal to + public T this[int index] + { + get + { + if (index < 0 || index > Length) + { + throw new IndexOutOfRangeException($"Index out of bounds, expected a number between 0 and {Length}"); + } + return Array[Offset + index]; + } + set + { + if (index < 0 || index > Length) + { + throw new IndexOutOfRangeException($"Index out of bounds, expected a number between 0 and {Length}"); + } + Array[Offset + index] = value; + } + } + + /// + /// Sets the segment of the backing array to all zeros. + /// + public void Clear() + { + System.Array.Clear(Array, Offset, Length); + } + + /// + /// Check if the segment is empty. + /// + /// Whether or not the segment is empty. + public bool IsEmpty() + { + return Array == null || Array.Length == 0; + } + + /// + /// Returns an enumerator that iterates through the ActionSegment. + /// + /// An IEnumerator object that can be used to iterate through the ActionSegment. + IEnumerator IEnumerable.GetEnumerator() + { + return new Enumerator(this); + } + + /// + /// Returns an enumerator that iterates through the ActionSegment. + /// + /// An IEnumerator object that can be used to iterate through the ActionSegment. + public IEnumerator GetEnumerator() + { + return new Enumerator(this); + } + + /// + /// Indicates whether the current ActionSegment is equal to another ActionSegment. + /// + /// An ActionSegment to compare with this ActionSegment. + /// true if the current ActionSegment is equal to the other parameter; otherwise, false. + public override bool Equals(object obj) + { + if (!(obj is ActionSegment)) + { + return false; + } + return Equals((ActionSegment)obj); + } + + /// + /// Indicates whether the current ActionSegment is equal to another ActionSegment. + /// + /// An ActionSegment to compare with this ActionSegment. + /// true if the current ActionSegment is equal to the other parameter; otherwise, false. + public bool Equals(ActionSegment other) + { + return Offset == other.Offset && Length == other.Length && Array.SequenceEqual(other.Array); + } + + /// + /// Computes the hash code of the ActionSegment. + /// + /// A hash code for the current ActionSegment. + public override int GetHashCode() + { + unchecked + { + var hashCode = Offset; + hashCode = (hashCode * 397) ^ Length; + hashCode = (hashCode * 397) ^ (Array != null ? Array.GetHashCode() : 0); + return hashCode; + } + } + + /// + /// A private for the value type which follows its + /// rules of being a view into an underlying . + /// + struct Enumerator : IEnumerator + { + readonly T[] m_Array; + readonly int m_Start; + readonly int m_End; // cache Offset + Count, since it's a little slow + int m_Current; + + internal Enumerator(ActionSegment arraySegment) + { + Debug.Assert(arraySegment.Array != null); + Debug.Assert(arraySegment.Offset >= 0); + Debug.Assert(arraySegment.Length >= 0); + Debug.Assert(arraySegment.Offset + arraySegment.Length <= arraySegment.Array.Length); + + m_Array = arraySegment.Array; + m_Start = arraySegment.Offset; + m_End = arraySegment.Offset + arraySegment.Length; + m_Current = arraySegment.Offset - 1; + } + + public bool MoveNext() + { + if (m_Current < m_End) + { + m_Current++; + return m_Current < m_End; + } + return false; + } + + public T Current + { + get + { + if (m_Current < m_Start) + throw new InvalidOperationException("Enumerator not started."); + if (m_Current >= m_End) + throw new InvalidOperationException("Enumerator has reached the end already."); + return m_Array[m_Current]; + } + } + + object IEnumerator.Current => Current; + + void IEnumerator.Reset() + { + m_Current = m_Start - 1; + } + + public void Dispose() + { + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs.meta b/com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8e08ed0a4a87a0c83070820b6fa363ad72c3cf08 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4fa1432c1ba3460caaa84303a9011ef2 +timeCreated: 1595869823 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs b/com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs new file mode 100644 index 0000000000000000000000000000000000000000..6b0a001a7d1441293b3be700517e00c65a16fac0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs @@ -0,0 +1,137 @@ +using System; +using System.Linq; +using UnityEngine; + +namespace Unity.MLAgents.Actuators +{ + /// + /// Defines the structure of the actions to be used by the Actuator system. + /// + [Serializable] + public struct ActionSpec + { + [SerializeField] + int m_NumContinuousActions; + + /// + /// An array of branch sizes for discrete actions. + /// + /// For an IActuator that uses discrete actions, the number of + /// branches is the Length of the Array and each index contains the branch size. + /// The cumulative sum of the total number of discrete actions can be retrieved + /// by the property. + /// + /// For an IActuator with a Continuous it will be null. + /// + public int[] BranchSizes; + + /// + /// The number of continuous actions that an Agent can take. + /// + public int NumContinuousActions { get { return m_NumContinuousActions; } set { m_NumContinuousActions = value; } } + + /// + /// The number of branches for discrete actions that an Agent can take. + /// + public int NumDiscreteActions { get { return BranchSizes == null ? 0 : BranchSizes.Length; } } + + /// + /// Get the total number of Discrete Actions that can be taken by calculating the Sum + /// of all of the Discrete Action branch sizes. + /// + public int SumOfDiscreteBranchSizes { get { return BranchSizes == null ? 0 : BranchSizes.Sum(); } } + + /// + /// Creates a Continuous with the number of actions available. + /// + /// The number of continuous actions available. + /// An Continuous ActionSpec initialized with the number of actions available. + public static ActionSpec MakeContinuous(int numActions) + { + var actuatorSpace = new ActionSpec(numActions, null); + return actuatorSpace; + } + + /// + /// Creates a Discrete with the array of branch sizes that + /// represents the action space. + /// + /// The array of branch sizes for the discrete actions. Each index + /// contains the number of actions available for that branch. + /// An Discrete ActionSpec initialized with the array of branch sizes. + public static ActionSpec MakeDiscrete(params int[] branchSizes) + { + var actuatorSpace = new ActionSpec(0, branchSizes); + return actuatorSpace; + } + + /// + /// Create an ActionSpec initialized with the specified action sizes. + /// + /// The number of continuous actions available. + /// The array of branch sizes for the discrete actions. Each index + /// contains the number of actions available for that branch. + public ActionSpec(int numContinuousActions = 0, int[] discreteBranchSizes = null) + { + m_NumContinuousActions = numContinuousActions; + BranchSizes = discreteBranchSizes ?? Array.Empty(); + } + + /// + /// Check that the ActionSpec uses either all continuous or all discrete actions. + /// This is only used when connecting to old versions of the trainer that don't support this. + /// + /// + internal void CheckAllContinuousOrDiscrete() + { + if (NumContinuousActions > 0 && NumDiscreteActions > 0) + { + throw new UnityAgentsException( + "Action spaces with both continuous and discrete actions are not supported by the trainer. " + + "ActionSpecs must be all continuous or all discrete." + ); + } + } + + /// + /// Combines a list of actions specs and allocates a new array of branch sizes if needed. + /// + /// The list of action specs to combine. + /// An ActionSpec which represents the aggregate of the ActionSpecs passed in. + public static ActionSpec Combine(params ActionSpec[] specs) + { + var numContinuous = 0; + var numDiscrete = 0; + for (var i = 0; i < specs.Length; i++) + { + var spec = specs[i]; + numContinuous += spec.NumContinuousActions; + numDiscrete += spec.NumDiscreteActions; + } + + if (numDiscrete <= 0) + { + return MakeContinuous(numContinuous); + } + + var branchSizes = new int[numDiscrete]; + var offset = 0; + for (var i = 0; i < specs.Length; i++) + { + var spec = specs[i]; + if (spec.BranchSizes.Length == 0) + { + continue; + } + var branchSizesLength = spec.BranchSizes.Length; + Array.Copy(spec.BranchSizes, + 0, + branchSizes, + offset, + branchSizesLength); + offset += branchSizesLength; + } + return new ActionSpec(numContinuous, branchSizes); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs.meta b/com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a442a91a5ee2f03a357feafeff6a37aff34c3f99 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ecdd6deefba1416ca149fe09d2a5afd8 +timeCreated: 1595892361 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorComponent.cs b/com.unity.ml-agents/Runtime/Actuators/ActuatorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..af34bef3a371298f6769a10948d7c40aa9a130f3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorComponent.cs @@ -0,0 +1,25 @@ +using UnityEngine; + +namespace Unity.MLAgents.Actuators +{ + /// + /// Editor components for creating Actuators. Generally an IActuator component should + /// have a corresponding ActuatorComponent. + /// + public abstract class ActuatorComponent : MonoBehaviour + { + /// + /// Create a collection of s. This is called by the during + /// initialization. + /// + /// A collection of s + public abstract IActuator[] CreateActuators(); + + /// + /// The specification of the possible actions for this ActuatorComponent. + /// This must produce the same results as the corresponding IActuator's ActionSpec. + /// + /// + public abstract ActionSpec ActionSpec { get; } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorComponent.cs.meta b/com.unity.ml-agents/Runtime/Actuators/ActuatorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1b7a643ed1637d77203b2a1120e4d0395b902f8e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 77cefae5f6d841be9ff80b41293d271b +timeCreated: 1593017318 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorDiscreteActionMask.cs b/com.unity.ml-agents/Runtime/Actuators/ActuatorDiscreteActionMask.cs new file mode 100644 index 0000000000000000000000000000000000000000..d44532b16faf51e67ec78b78c428cb0440bd45fd --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorDiscreteActionMask.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; + +namespace Unity.MLAgents.Actuators +{ + /// + /// Implementation of IDiscreteActionMask that allows writing to the action mask from an . + /// + internal class ActuatorDiscreteActionMask : IDiscreteActionMask + { + /// When using discrete control, is the starting indices of the actions + /// when all the branches are concatenated with each other. + int[] m_StartingActionIndices; + + int[] m_BranchSizes; + + bool[] m_CurrentMask; + + IList m_Actuators; + + readonly int m_SumOfDiscreteBranchSizes; + readonly int m_NumBranches; + + /// + /// The offset into the branches array that is used when actuators are writing to the action mask. + /// + public int CurrentBranchOffset { get; set; } + + internal ActuatorDiscreteActionMask(IList actuators, int sumOfDiscreteBranchSizes, int numBranches, int[] branchSizes = null) + { + m_Actuators = actuators; + m_SumOfDiscreteBranchSizes = sumOfDiscreteBranchSizes; + m_NumBranches = numBranches; + m_BranchSizes = branchSizes; + } + + /// + public void SetActionEnabled(int branch, int actionIndex, bool isEnabled) + { + LazyInitialize(); +#if DEBUG + if (branch >= m_NumBranches || actionIndex >= m_BranchSizes[CurrentBranchOffset + branch]) + { + throw new UnityAgentsException( + "Invalid Action Masking: Action Mask is too large for specified branch."); + } +#endif + m_CurrentMask[actionIndex + m_StartingActionIndices[CurrentBranchOffset + branch]] = !isEnabled; + } + + void LazyInitialize() + { + if (m_BranchSizes == null) + { + m_BranchSizes = new int[m_NumBranches]; + var start = 0; + for (var i = 0; i < m_Actuators.Count; i++) + { + var actuator = m_Actuators[i]; + var branchSizes = actuator.ActionSpec.BranchSizes; + Array.Copy(branchSizes, 0, m_BranchSizes, start, branchSizes.Length); + start += branchSizes.Length; + } + } + + // By default, the masks are null. If we want to specify a new mask, we initialize + // the actionMasks with trues. + if (m_CurrentMask == null) + { + m_CurrentMask = new bool[m_SumOfDiscreteBranchSizes]; + } + + // If this is the first time the masked actions are used, we generate the starting + // indices for each branch. + if (m_StartingActionIndices == null) + { + m_StartingActionIndices = Utilities.CumSum(m_BranchSizes); + } + } + + /// + /// Get the current mask for an agent. + /// + /// A mask for the agent. A boolean array of length equal to the total number of + /// actions. + internal bool[] GetMask() + { +#if DEBUG + if (m_CurrentMask != null) + { + AssertMask(); + } +#endif + return m_CurrentMask; + } + + /// + /// Makes sure that the current mask is usable. + /// + void AssertMask() + { +#if DEBUG + for (var branchIndex = 0; branchIndex < m_NumBranches; branchIndex++) + { + if (AreAllActionsMasked(branchIndex)) + { + throw new UnityAgentsException( + "Invalid Action Masking : All the actions of branch " + branchIndex + + " are masked."); + } + } +#endif + } + + /// + /// Resets the current mask for an agent. + /// + internal void ResetMask() + { + if (m_CurrentMask != null) + { + Array.Clear(m_CurrentMask, 0, m_CurrentMask.Length); + } + } + + /// + /// Checks if all the actions in the input branch are masked. + /// + /// The index of the branch to check. + /// True if all the actions of the branch are masked. + bool AreAllActionsMasked(int branch) + { + if (m_CurrentMask == null) + { + return false; + } + var start = m_StartingActionIndices[branch]; + var end = m_StartingActionIndices[branch + 1]; + for (var i = start; i < end; i++) + { + if (!m_CurrentMask[i]) + { + return false; + } + } + return true; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorDiscreteActionMask.cs.meta b/com.unity.ml-agents/Runtime/Actuators/ActuatorDiscreteActionMask.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..09aa4784b07fe5e0b596efd14111092c3c5d76d9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorDiscreteActionMask.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d2a19e2f43fd4637a38d42b2a5f989f3 +timeCreated: 1595459316 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs b/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..1ff35557d96970fd160fecabbff67238c21e9699 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs @@ -0,0 +1,500 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Profiling; + +namespace Unity.MLAgents.Actuators +{ + /// + /// A class that manages the delegation of events, action buffers, and action mask for a list of IActuators. + /// + internal class ActuatorManager : IList + { + // IActuators managed by this object. + List m_Actuators; + + // An implementation of IDiscreteActionMask that allows for writing to it based on an offset. + ActuatorDiscreteActionMask m_DiscreteActionMask; + + ActionSpec m_CombinedActionSpec; + + /// + /// Flag used to check if our IActuators are ready for execution. + /// + /// + bool m_ReadyForExecution; + + /// + /// The sum of all of the discrete branches for all of the s in this manager. + /// + internal int SumOfDiscreteBranchSizes { get; private set; } + + /// + /// The number of the discrete branches for all of the s in this manager. + /// + internal int NumDiscreteActions { get; private set; } + + /// + /// The number of continuous actions for all of the s in this manager. + /// + internal int NumContinuousActions { get; private set; } + + /// + /// Returns the total actions which is calculated by + . + /// + public int TotalNumberOfActions => NumContinuousActions + NumDiscreteActions; + + /// + /// Gets the managed by this object. + /// + public ActuatorDiscreteActionMask DiscreteActionMask => m_DiscreteActionMask; + + /// + /// The currently stored object for the s managed by this class. + /// + public ActionBuffers StoredActions { get; private set; } + + /// + /// Create an ActuatorList with a preset capacity. + /// + /// The capacity of the list to create. + public ActuatorManager(int capacity = 0) + { + m_Actuators = new List(capacity); + } + + /// + /// + /// + void ReadyActuatorsForExecution() + { + ReadyActuatorsForExecution(m_Actuators, NumContinuousActions, SumOfDiscreteBranchSizes, + NumDiscreteActions); + } + + /// + /// This method validates that all s have unique names + /// if the `DEBUG` preprocessor macro is defined, and allocates the appropriate buffers to manage the actions for + /// all of the s that may live on a particular object. + /// + /// The list of actuators to validate and allocate buffers for. + /// The total number of continuous actions for all of the actuators. + /// The total sum of the discrete branches for all of the actuators in order + /// to be able to allocate an . + /// The number of discrete branches for all of the actuators. + internal void ReadyActuatorsForExecution(IList actuators, int numContinuousActions, int sumOfDiscreteBranches, int numDiscreteBranches) + { + if (m_ReadyForExecution) + { + return; + } +#if DEBUG + // Make sure the names are actually unique + ValidateActuators(); +#endif + + // Sort the Actuators by name to ensure determinism + SortActuators(m_Actuators); + var continuousActions = numContinuousActions == 0 ? ActionSegment.Empty : + new ActionSegment(new float[numContinuousActions]); + var discreteActions = numDiscreteBranches == 0 ? ActionSegment.Empty : new ActionSegment(new int[numDiscreteBranches]); + + StoredActions = new ActionBuffers(continuousActions, discreteActions); + m_CombinedActionSpec = CombineActionSpecs(actuators); + m_DiscreteActionMask = new ActuatorDiscreteActionMask(actuators, sumOfDiscreteBranches, numDiscreteBranches, m_CombinedActionSpec.BranchSizes); + m_ReadyForExecution = true; + } + + internal static ActionSpec CombineActionSpecs(IList actuators) + { + int numContinuousActions = 0; + int numDiscreteActions = 0; + + foreach (var actuator in actuators) + { + numContinuousActions += actuator.ActionSpec.NumContinuousActions; + numDiscreteActions += actuator.ActionSpec.NumDiscreteActions; + } + + int[] combinedBranchSizes; + if (numDiscreteActions == 0) + { + combinedBranchSizes = Array.Empty(); + } + else + { + combinedBranchSizes = new int[numDiscreteActions]; + var start = 0; + for (var i = 0; i < actuators.Count; i++) + { + var branchSizes = actuators[i].ActionSpec.BranchSizes; + if (branchSizes != null) + { + Array.Copy(branchSizes, 0, combinedBranchSizes, start, branchSizes.Length); + start += branchSizes.Length; + } + } + } + + return new ActionSpec(numContinuousActions, combinedBranchSizes); + } + + /// + /// Returns an ActionSpec representing the concatenation of all IActuator's ActionSpecs + /// + /// + public ActionSpec GetCombinedActionSpec() + { + ReadyActuatorsForExecution(); + return m_CombinedActionSpec; + } + + /// + /// Updates the local action buffer with the action buffer passed in. If the buffer + /// passed in is null, the local action buffer will be cleared. + /// + /// The object which contains all of the + /// actions for the IActuators in this list. + public void UpdateActions(ActionBuffers actions) + { + Profiler.BeginSample("ActuatorManager.UpdateActions"); + ReadyActuatorsForExecution(); + UpdateActionArray(actions.ContinuousActions, StoredActions.ContinuousActions); + UpdateActionArray(actions.DiscreteActions, StoredActions.DiscreteActions); + Profiler.EndSample(); + } + + static void UpdateActionArray(ActionSegment sourceActionBuffer, ActionSegment destination) + where T : struct + { + if (sourceActionBuffer.Length <= 0) + { + destination.Clear(); + } + else + { + if (sourceActionBuffer.Length != destination.Length) + { + Debug.AssertFormat(sourceActionBuffer.Length == destination.Length, + "sourceActionBuffer: {0} is a different size than destination: {1}.", + sourceActionBuffer.Length, + destination.Length); + } + + Array.Copy(sourceActionBuffer.Array, + sourceActionBuffer.Offset, + destination.Array, + destination.Offset, + destination.Length); + } + } + + /// + /// This method will trigger the writing to the by all of the actuators + /// managed by this object. + /// + public void WriteActionMask() + { + ReadyActuatorsForExecution(); + m_DiscreteActionMask.ResetMask(); + var offset = 0; + for (var i = 0; i < m_Actuators.Count; i++) + { + var actuator = m_Actuators[i]; + if (actuator.ActionSpec.NumDiscreteActions > 0) + { + m_DiscreteActionMask.CurrentBranchOffset = offset; + actuator.WriteDiscreteActionMask(m_DiscreteActionMask); + offset += actuator.ActionSpec.NumDiscreteActions; + } + } + } + + /// + /// Iterates through all of the IActuators in this list and calls their + /// method on them, if implemented, with the appropriate + /// s depending on their . + /// + public void ApplyHeuristic(in ActionBuffers actionBuffersOut) + { + Profiler.BeginSample("ActuatorManager.ApplyHeuristic"); + var continuousStart = 0; + var discreteStart = 0; + for (var i = 0; i < m_Actuators.Count; i++) + { + var actuator = m_Actuators[i]; + var numContinuousActions = actuator.ActionSpec.NumContinuousActions; + var numDiscreteActions = actuator.ActionSpec.NumDiscreteActions; + + if (numContinuousActions == 0 && numDiscreteActions == 0) + { + continue; + } + + var continuousActions = ActionSegment.Empty; + if (numContinuousActions > 0) + { + continuousActions = new ActionSegment(actionBuffersOut.ContinuousActions.Array, + continuousStart, + numContinuousActions); + } + + var discreteActions = ActionSegment.Empty; + if (numDiscreteActions > 0) + { + discreteActions = new ActionSegment(actionBuffersOut.DiscreteActions.Array, + discreteStart, + numDiscreteActions); + } + actuator.Heuristic(new ActionBuffers(continuousActions, discreteActions)); + continuousStart += numContinuousActions; + discreteStart += numDiscreteActions; + } + Profiler.EndSample(); + } + + /// + /// Iterates through all of the IActuators in this list and calls their + /// method on them with the appropriate + /// s depending on their . + /// + public void ExecuteActions() + { + Profiler.BeginSample("ActuatorManager.ExecuteActions"); + ReadyActuatorsForExecution(); + var continuousStart = 0; + var discreteStart = 0; + for (var i = 0; i < m_Actuators.Count; i++) + { + var actuator = m_Actuators[i]; + var numContinuousActions = actuator.ActionSpec.NumContinuousActions; + var numDiscreteActions = actuator.ActionSpec.NumDiscreteActions; + + if (numContinuousActions == 0 && numDiscreteActions == 0) + { + continue; + } + + var continuousActions = ActionSegment.Empty; + if (numContinuousActions > 0) + { + continuousActions = new ActionSegment(StoredActions.ContinuousActions.Array, + continuousStart, + numContinuousActions); + } + + var discreteActions = ActionSegment.Empty; + if (numDiscreteActions > 0) + { + discreteActions = new ActionSegment(StoredActions.DiscreteActions.Array, + discreteStart, + numDiscreteActions); + } + + actuator.OnActionReceived(new ActionBuffers(continuousActions, discreteActions)); + continuousStart += numContinuousActions; + discreteStart += numDiscreteActions; + } + Profiler.EndSample(); + } + + /// + /// Resets the to be all + /// zeros and calls on each managed by this object. + /// + public void ResetData() + { + if (!m_ReadyForExecution) + { + return; + } + StoredActions.Clear(); + for (var i = 0; i < m_Actuators.Count; i++) + { + m_Actuators[i].ResetData(); + } + m_DiscreteActionMask.ResetMask(); + } + + /// + /// Sorts the s according to their value. + /// + internal static void SortActuators(List actuators) + { + actuators.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.InvariantCulture)); + } + + /// + /// Validates that the IActuators managed by this object have unique names. + /// Each Actuator needs to have a unique name in order for this object to ensure that the storage of action + /// buffers, and execution of Actuators remains deterministic across different sessions of running. + /// + void ValidateActuators() + { + for (var i = 0; i < m_Actuators.Count - 1; i++) + { + Debug.Assert( + !m_Actuators[i].Name.Equals(m_Actuators[i + 1].Name), + "Actuator names must be unique."); + } + } + + /// + /// Helper method to update bookkeeping items around buffer management for actuators added to this object. + /// + /// The IActuator to keep bookkeeping for. + void AddToBufferSizes(IActuator actuatorItem) + { + if (actuatorItem == null) + { + return; + } + + NumContinuousActions += actuatorItem.ActionSpec.NumContinuousActions; + NumDiscreteActions += actuatorItem.ActionSpec.NumDiscreteActions; + SumOfDiscreteBranchSizes += actuatorItem.ActionSpec.SumOfDiscreteBranchSizes; + } + + /// + /// Helper method to update bookkeeping items around buffer management for actuators removed from this object. + /// + /// The IActuator to keep bookkeeping for. + void SubtractFromBufferSize(IActuator actuatorItem) + { + if (actuatorItem == null) + { + return; + } + + NumContinuousActions -= actuatorItem.ActionSpec.NumContinuousActions; + NumDiscreteActions -= actuatorItem.ActionSpec.NumDiscreteActions; + SumOfDiscreteBranchSizes -= actuatorItem.ActionSpec.SumOfDiscreteBranchSizes; + } + + /// + /// Sets all of the bookkeeping items back to 0. + /// + void ClearBufferSizes() + { + NumContinuousActions = NumDiscreteActions = SumOfDiscreteBranchSizes = 0; + } + + /// + /// Add an array of s at once. + /// + /// The array of s to add. + public void AddActuators(IActuator[] actuators) + { + for (var i = 0; i < actuators.Length; i++) + { + Add(actuators[i]); + } + } + + /********************************************************************************* + * IList implementation that delegates to m_Actuators List. * + *********************************************************************************/ + + /// + public IEnumerator GetEnumerator() + { + return m_Actuators.GetEnumerator(); + } + + /// + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)m_Actuators).GetEnumerator(); + } + + /// + public void Add(IActuator item) + { + Debug.Assert(m_ReadyForExecution == false, + "Cannot add to the ActuatorManager after its buffers have been initialized"); + m_Actuators.Add(item); + AddToBufferSizes(item); + } + + /// + public void Clear() + { + Debug.Assert(m_ReadyForExecution == false, + "Cannot clear the ActuatorManager after its buffers have been initialized"); + m_Actuators.Clear(); + ClearBufferSizes(); + } + + /// + public bool Contains(IActuator item) + { + return m_Actuators.Contains(item); + } + + /// + public void CopyTo(IActuator[] array, int arrayIndex) + { + m_Actuators.CopyTo(array, arrayIndex); + } + + /// + public bool Remove(IActuator item) + { + Debug.Assert(m_ReadyForExecution == false, + "Cannot remove from the ActuatorManager after its buffers have been initialized"); + if (m_Actuators.Remove(item)) + { + SubtractFromBufferSize(item); + return true; + } + return false; + } + + /// + public int Count => m_Actuators.Count; + + /// + public bool IsReadOnly => false; + + /// + public int IndexOf(IActuator item) + { + return m_Actuators.IndexOf(item); + } + + /// + public void Insert(int index, IActuator item) + { + Debug.Assert(m_ReadyForExecution == false, + "Cannot insert into the ActuatorManager after its buffers have been initialized"); + m_Actuators.Insert(index, item); + AddToBufferSizes(item); + } + + /// + public void RemoveAt(int index) + { + Debug.Assert(m_ReadyForExecution == false, + "Cannot remove from the ActuatorManager after its buffers have been initialized"); + var actuator = m_Actuators[index]; + SubtractFromBufferSize(actuator); + m_Actuators.RemoveAt(index); + } + + /// + public IActuator this[int index] + { + get => m_Actuators[index]; + set + { + Debug.Assert(m_ReadyForExecution == false, + "Cannot modify the ActuatorManager after its buffers have been initialized"); + var old = m_Actuators[index]; + SubtractFromBufferSize(old); + m_Actuators[index] = value; + AddToBufferSizes(value); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs.meta b/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa56b5ca9fba4ee4ed47e8825763280801890169 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7bb5b1e3779d4342a8e70f6e3c1d67cc +timeCreated: 1593031463 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs b/com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs new file mode 100644 index 0000000000000000000000000000000000000000..fbdb398ed1b4d231c599083e009e58e1cc24f861 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs @@ -0,0 +1,192 @@ +using System; +using System.Linq; +using UnityEngine; + +namespace Unity.MLAgents.Actuators +{ + /// + /// A structure that wraps the s for a particular and is + /// used when is called. + /// + public readonly struct ActionBuffers + { + /// + /// An empty action buffer. + /// + public static ActionBuffers Empty = new ActionBuffers(ActionSegment.Empty, ActionSegment.Empty); + + /// + /// Holds the Continuous to be used by an . + /// + public ActionSegment ContinuousActions { get; } + + /// + /// Holds the Discrete to be used by an . + /// + public ActionSegment DiscreteActions { get; } + + /// + /// Create an instance with discrete actions stored as a float array. This exists + /// to achieve backward compatibility with the former Agent methods which used a float array for both continuous + /// and discrete actions. + /// + /// The float array of discrete actions. + /// An instance initialized with a + /// initialized from a float array. + public static ActionBuffers FromDiscreteActions(float[] discreteActions) + { + return new ActionBuffers(ActionSegment.Empty, discreteActions == null ? ActionSegment.Empty + : new ActionSegment(Array.ConvertAll(discreteActions, + x => (int)x))); + } + + /// + /// Construct an instance with the continuous and discrete actions that will + /// be used. + /// /// + /// The continuous actions to send to an . + /// The discrete actions to send to an . + public ActionBuffers(float[] continuousActions, int[] discreteActions) + : this(new ActionSegment(continuousActions), new ActionSegment(discreteActions)) { } + + /// + /// Construct an instance with the continuous and discrete actions that will + /// be used. + /// + /// The continuous actions to send to an . + /// The discrete actions to send to an . + public ActionBuffers(ActionSegment continuousActions, ActionSegment discreteActions) + { + ContinuousActions = continuousActions; + DiscreteActions = discreteActions; + } + + /// + /// Construct an instance with . All values are initialized to zeros. + /// /// + /// The to send to an . + public ActionBuffers(ActionSpec actionSpec) + : this(new ActionSegment(new float[actionSpec.NumContinuousActions]), + new ActionSegment(new int[actionSpec.NumDiscreteActions])) + { } + + /// + /// Create an instance with ActionSpec and all actions stored as a float array. + /// + /// of the + /// The float array of all actions, including discrete and continuous actions. + /// An instance initialized with a and a float array. + internal static ActionBuffers FromActionSpec(ActionSpec actionSpec, float[] actions) + { + if (actions == null) + { + return ActionBuffers.Empty; + } + + Debug.Assert(actions.Length == actionSpec.NumContinuousActions + actionSpec.NumDiscreteActions, + $"The length of '{nameof(actions)}' does not match the total size of ActionSpec.\n" + + $"{nameof(actions)}.Length: {actions.Length}\n" + + $"{nameof(actionSpec)}: {actionSpec.NumContinuousActions + actionSpec.NumDiscreteActions}"); + + ActionSegment continuousActionSegment = ActionSegment.Empty; + ActionSegment discreteActionSegment = ActionSegment.Empty; + int offset = 0; + if (actionSpec.NumContinuousActions > 0) + { + continuousActionSegment = new ActionSegment(actions, 0, actionSpec.NumContinuousActions); + offset += actionSpec.NumContinuousActions; + } + if (actionSpec.NumDiscreteActions > 0) + { + int[] discreteActions = new int[actionSpec.NumDiscreteActions]; + for (var i = 0; i < actionSpec.NumDiscreteActions; i++) + { + discreteActions[i] = (int)actions[i + offset]; + } + discreteActionSegment = new ActionSegment(discreteActions); + } + + return new ActionBuffers(continuousActionSegment, discreteActionSegment); + } + + /// + /// Clear the and segments to be all zeros. + /// + public void Clear() + { + ContinuousActions.Clear(); + DiscreteActions.Clear(); + } + + /// + /// Check if the is empty. + /// + /// Whether the buffers are empty. + public bool IsEmpty() + { + return ContinuousActions.IsEmpty() && DiscreteActions.IsEmpty(); + } + + /// + /// Indicates whether the current ActionBuffers is equal to another ActionBuffers. + /// + /// An ActionBuffers to compare with this ActionBuffers. + /// true if the current ActionBuffers is equal to the other parameter; otherwise, false. + public override bool Equals(object obj) + { + if (!(obj is ActionBuffers)) + { + return false; + } + + var ab = (ActionBuffers)obj; + return ab.ContinuousActions.SequenceEqual(ContinuousActions) && + ab.DiscreteActions.SequenceEqual(DiscreteActions); + } + + /// + /// Computes the hash code of the ActionBuffers. + /// + /// A hash code for the current ActionBuffers. + public override int GetHashCode() + { + unchecked + { + return (ContinuousActions.GetHashCode() * 397) ^ DiscreteActions.GetHashCode(); + } + } + } + + /// + /// An interface that describes an object that can receive actions from a Reinforcement Learning network. + /// + public interface IActionReceiver + { + /// + /// Method called in order too allow object to execute actions based on the + /// contents. The structure of the contents in the + /// are defined by the . + /// + /// The data structure containing the action buffers for this object. + void OnActionReceived(ActionBuffers actionBuffers); + + /// + /// Implement `WriteDiscreteActionMask()` to modify the masks for discrete + /// actions. When using discrete actions, the agent will not perform the masked + /// action. + /// + /// + /// The action mask for the agent. + /// + /// + /// When using Discrete Control, you can prevent the Agent from using a certain + /// action by masking it with . + /// + /// See [Agents - Actions] for more information on masking actions. + /// + /// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#actions + /// + /// + void WriteDiscreteActionMask(IDiscreteActionMask actionMask); + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs.meta b/com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b14a69d21c1b1a31e4868a693840581063968f71 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b25a5b3027c9476ea1a310241be0f10f +timeCreated: 1594756775 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/IActuator.cs b/com.unity.ml-agents/Runtime/Actuators/IActuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..aa2675905a5e34ac70c0bdb197db5746b6b448ea --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IActuator.cs @@ -0,0 +1,42 @@ +namespace Unity.MLAgents.Actuators +{ + /// + /// Abstraction that facilitates the execution of actions. + /// + public interface IActuator : IActionReceiver, IHeuristicProvider + { + /// + /// The specification of the actions for this IActuator. + /// + /// + ActionSpec ActionSpec { get; } + + /// + /// Gets the name of this IActuator which will be used to sort it. + /// + /// + string Name { get; } + + /// + /// Resets the internal state of the actuator. This is called at the end of an Agent's episode. + /// Most implementations can leave this empty. + /// + void ResetData(); + } + + /// + /// Helper methods to be shared by all classes that implement . + /// + public static class IActuatorExtensions + { + /// + /// Returns the number of discrete branches + the number of continuous actions. + /// + /// + /// + public static int TotalNumberOfActions(this IActuator actuator) + { + return actuator.ActionSpec.NumContinuousActions + actuator.ActionSpec.NumDiscreteActions; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/IActuator.cs.meta b/com.unity.ml-agents/Runtime/Actuators/IActuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4fd0d172cafd5607cee6c8893c283828bd72c948 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IActuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 780d7f0a675f44bfa784b370025b51c3 +timeCreated: 1592848317 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/IBuiltInActuator.cs b/com.unity.ml-agents/Runtime/Actuators/IBuiltInActuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..8b77672d178c546127e24f30d4275e37d14770b4 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IBuiltInActuator.cs @@ -0,0 +1,49 @@ +namespace Unity.MLAgents.Actuators +{ + /// + /// Identifiers for "built in" actuator types. + /// These are only used for analytics, and should not be used for any runtime decisions. + /// + /// NOTE: Do not renumber these, since the values are used for analytics. Renaming is allowed though. + /// + public enum BuiltInActuatorType + { + /// + /// Default Sensor type if it cannot be determined. + /// + Unknown = 0, + + /// + /// VectorActuator used by the Agent + /// + AgentVectorActuator = 1, + + /// + /// Corresponds to + /// + VectorActuator = 2, + + /// + /// Corresponds to the Match3Actuator in com.unity.ml-agents.extensions. + /// + Match3Actuator = 3, + + /// + /// Corresponds to the InputActionActuator in com.unity.ml-agents.extensions. + /// + InputActionActuator = 4, + } + + /// + /// Interface for actuators that are provided as part of ML-Agents. + /// User-implemented actuators don't need to use this interface. + /// + internal interface IBuiltInActuator + { + /// + /// Return the corresponding BuiltInActuatorType for the actuator. + /// + /// A BuiltInActuatorType corresponding to the actuator. + BuiltInActuatorType GetBuiltInActuatorType(); + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/IBuiltInActuator.cs.meta b/com.unity.ml-agents/Runtime/Actuators/IBuiltInActuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..da1d96f271cd7d00412156c95bfe17cf5625143a --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IBuiltInActuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e3d7ef9a9a5043549cc5c0bbee520810 +timeCreated: 1613514041 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs b/com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs new file mode 100644 index 0000000000000000000000000000000000000000..713f000f8de20d1450fea6fe4958dfd711240597 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs @@ -0,0 +1,26 @@ +namespace Unity.MLAgents.Actuators +{ + /// + /// Interface for writing a mask to disable discrete actions for agents for the next decision. + /// + public interface IDiscreteActionMask + { + /// + /// Set whether or not the action index for the given branch is allowed. + /// + /// + /// By default, all discrete actions are allowed. + /// If isEnabled is false, the agent will not be able to perform the actions passed as argument + /// at the next decision for the specified action branch. The actionIndex corresponds + /// to the action options the agent will be unable to perform. + /// + /// See [Agents - Actions] for more information on masking actions. + /// + /// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#masking-discrete-actions + /// + /// The branch for which the actions will be masked. + /// Index of the action. + /// Whether the action is allowed or not. + void SetActionEnabled(int branch, int actionIndex, bool isEnabled); + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs.meta b/com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebfa10158fcb789feb1ecb814a487f42da026176 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1bc4e4b71bf4470789488fab2ee65388 +timeCreated: 1595369065 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/IHeuristicProvider.cs b/com.unity.ml-agents/Runtime/Actuators/IHeuristicProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..b992361c8387498bdc18ca8c40346ff4c450391a --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IHeuristicProvider.cs @@ -0,0 +1,18 @@ +namespace Unity.MLAgents.Actuators +{ + /// + /// Interface that allows objects to fill out an data structure for controlling + /// behavior of Agents or Actuators. + /// + public interface IHeuristicProvider + { + /// + /// Method called on objects which are expected to fill out the data structure. + /// Object that implement this interface should be careful to be consistent in the placement of their actions + /// in the data structure. + /// + /// The data structure to be filled by the + /// object implementing this interface. + void Heuristic(in ActionBuffers actionBuffersOut); + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/IHeuristicProvider.cs.meta b/com.unity.ml-agents/Runtime/Actuators/IHeuristicProvider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ca8338a0720edf0ca39e417fb9bae44e55c6c874 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/IHeuristicProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be90ffb28f39444a8fb02dfd4a82870c +timeCreated: 1610057456 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs b/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..586058aad39da30e516dd174f97839e6f165e67c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs @@ -0,0 +1,105 @@ +using UnityEngine.Profiling; + +namespace Unity.MLAgents.Actuators +{ + /// + /// IActuator implementation that forwards calls to an and an . + /// + internal class VectorActuator : IActuator, IBuiltInActuator + { + IActionReceiver m_ActionReceiver; + IHeuristicProvider m_HeuristicProvider; + + ActionBuffers m_ActionBuffers; + internal ActionBuffers ActionBuffers + { + get => m_ActionBuffers; + private set => m_ActionBuffers = value; + } + + /// + /// Create a VectorActuator that forwards to the provided IActionReceiver. + /// + /// The used for OnActionReceived and WriteDiscreteActionMask. + /// If this parameter also implements it will be cast and used to forward calls to + /// . + /// + /// + public VectorActuator(IActionReceiver actionReceiver, + ActionSpec actionSpec, + string name = "VectorActuator") + : this(actionReceiver, actionReceiver as IHeuristicProvider, actionSpec, name) { } + + /// + /// Create a VectorActuator that forwards to the provided IActionReceiver. + /// + /// The used for OnActionReceived and WriteDiscreteActionMask. + /// The used to fill the + /// for Heuristic Policies. + /// + /// + public VectorActuator(IActionReceiver actionReceiver, + IHeuristicProvider heuristicProvider, + ActionSpec actionSpec, + string name = "VectorActuator") + { + m_ActionReceiver = actionReceiver; + m_HeuristicProvider = heuristicProvider; + ActionSpec = actionSpec; + string suffix; + if (actionSpec.NumContinuousActions == 0) + { + suffix = "-Discrete"; + } + else if (actionSpec.NumDiscreteActions == 0) + { + suffix = "-Continuous"; + } + else + { + suffix = $"-Continuous-{actionSpec.NumContinuousActions}-Discrete-{actionSpec.NumDiscreteActions}"; + } + Name = name + suffix; + } + + /// + public void ResetData() + { + m_ActionBuffers = ActionBuffers.Empty; + } + + /// + public void OnActionReceived(ActionBuffers actionBuffers) + { + Profiler.BeginSample("VectorActuator.OnActionReceived"); + m_ActionBuffers = actionBuffers; + m_ActionReceiver.OnActionReceived(m_ActionBuffers); + Profiler.EndSample(); + } + + public void Heuristic(in ActionBuffers actionBuffersOut) + { + Profiler.BeginSample("VectorActuator.Heuristic"); + m_HeuristicProvider?.Heuristic(actionBuffersOut); + Profiler.EndSample(); + } + + /// + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + m_ActionReceiver.WriteDiscreteActionMask(actionMask); + } + + /// + public ActionSpec ActionSpec { get; } + + /// + public string Name { get; } + + /// + public virtual BuiltInActuatorType GetBuiltInActuatorType() + { + return BuiltInActuatorType.VectorActuator; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs.meta b/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6e9f68b913b55433c4b25338c5bd8d732581ce1f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ff7a3292c0b24b23b3f1c0eeb690ec4c +timeCreated: 1593023833 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Agent.cs b/com.unity.ml-agents/Runtime/Agent.cs new file mode 100644 index 0000000000000000000000000000000000000000..7af3631e827f228ec243ca91987e1bb519663c91 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Agent.cs @@ -0,0 +1,1427 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; +using Unity.MLAgents.Demonstrations; +using Unity.MLAgents.Policies; +using UnityEngine.Serialization; + +namespace Unity.MLAgents +{ + /// + /// Struct that contains all the information for an Agent, including its + /// observations, actions and current status. + /// + public struct AgentInfo + { + /// + /// Keeps track of the last actions taken by the Brain. + /// + public ActionBuffers storedActions; + + /// + /// For discrete control, specifies the actions that the agent cannot take. + /// An element of the mask array is true if the action is prohibited. + /// + public bool[] discreteActionMasks; + + /// + /// The current agent reward. + /// + public float reward; + + /// + /// The current group reward received by the agent. + /// + public float groupReward; + + /// + /// Whether the agent is done or not. + /// + public bool done; + + /// + /// Whether the agent has reached its max step count for this episode. + /// + public bool maxStepReached; + + /// + /// Episode identifier each agent receives at every reset. It is used + /// to separate between different agents in the environment. + /// + public int episodeId; + + /// + /// MultiAgentGroup identifier. + /// + public int groupId; + + public void ClearActions() + { + storedActions.Clear(); + } + + public void CopyActions(ActionBuffers actionBuffers) + { + var continuousActions = storedActions.ContinuousActions; + for (var i = 0; i < actionBuffers.ContinuousActions.Length; i++) + { + continuousActions[i] = actionBuffers.ContinuousActions[i]; + } + var discreteActions = storedActions.DiscreteActions; + for (var i = 0; i < actionBuffers.DiscreteActions.Length; i++) + { + discreteActions[i] = actionBuffers.DiscreteActions[i]; + } + } + } + + /// + /// Simple wrapper around VectorActuator that overrides GetBuiltInActuatorType + /// so that it can be distinguished from a standard VectorActuator. + /// + internal class AgentVectorActuator : VectorActuator + { + public AgentVectorActuator(IActionReceiver actionReceiver, + IHeuristicProvider heuristicProvider, + ActionSpec actionSpec, + string name = "VectorActuator" + ) : base(actionReceiver, heuristicProvider, actionSpec, name) + { } + + public override BuiltInActuatorType GetBuiltInActuatorType() + { + return BuiltInActuatorType.AgentVectorActuator; + } + } + + /// + /// An agent is an actor that can observe its environment, decide on the + /// best course of action using those observations, and execute those actions + /// within the environment. + /// + /// + /// Use the Agent class as the subclass for implementing your own agents. Add + /// your Agent implementation to a [GameObject] in the [Unity scene] that serves + /// as the agent's environment. + /// + /// Agents in an environment operate in *steps*. At each step, an agent collects observations, + /// passes them to its decision-making policy, and receives an action vector in response. + /// + /// Agents make observations using implementations. The ML-Agents + /// API provides implementations for visual observations () + /// raycast observations (), and arbitrary + /// data observations (). You can add the + /// and or + /// components to an agent's [GameObject] to use + /// those sensor types. You can implement the + /// function in your Agent subclass to use a vector observation. The Agent class calls this + /// function before it uses the observation vector to make a decision. (If you only use + /// visual or raycast observations, you do not need to implement + /// .) + /// + /// Assign a decision making policy to an agent using a + /// component attached to the agent's [GameObject]. The setting + /// determines how decisions are made: + /// + /// * : decisions are made by the external process, + /// when connected. Otherwise, decisions are made using inference. If no inference model + /// is specified in the BehaviorParameters component, then heuristic decision + /// making is used. + /// * : decisions are always made using the trained + /// model specified in the component. + /// * : when a decision is needed, the agent's + /// function is called. Your implementation is responsible for + /// providing the appropriate action. + /// + /// To trigger an agent decision automatically, you can attach a + /// component to the Agent game object. You can also call the agent's + /// function manually. You only need to call when the agent is + /// in a position to act upon the decision. In many cases, this will be every [FixedUpdate] + /// callback, but could be less frequent. For example, an agent that hops around its environment + /// can only take an action when it touches the ground, so several frames might elapse between + /// one decision and the need for the next. + /// + /// Use the function to implement the actions your agent can take, + /// such as moving to reach a goal or interacting with its environment. + /// + /// When you call on an agent or the agent reaches its count, + /// its current episode ends. You can reset the agent -- or remove it from the + /// environment -- by implementing the function. An agent also + /// becomes done when the resets the environment, which only happens when + /// the receives a reset signal from an external process via the + /// . + /// + /// The Agent class extends the Unity [MonoBehaviour] class. You can implement the + /// standard [MonoBehaviour] functions as needed for your agent. Since an agent's + /// observations and actions typically take place during the [FixedUpdate] phase, you should + /// only use the [MonoBehaviour.Update] function for cosmetic purposes. If you override the [MonoBehaviour] + /// methods, [OnEnable()] or [OnDisable()], always call the base Agent class implementations. + /// + /// You can implement the function to specify agent actions using + /// your own heuristic algorithm. Implementing a heuristic function can be useful + /// for debugging. For example, you can use keyboard input to select agent actions in + /// order to manually control an agent's behavior. + /// + /// Note that you can change the inference model assigned to an agent at any step + /// by calling . + /// + /// See [Agents] and [Reinforcement Learning in Unity] in the [Unity ML-Agents Toolkit manual] for + /// more information on creating and training agents. + /// + /// For sample implementations of agent behavior, see the examples available in the + /// [Unity ML-Agents Toolkit] on Github. + /// + /// [MonoBehaviour]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.html + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// [Unity scene]: https://docs.unity3d.com/Manual/CreatingScenes.html + /// [FixedUpdate]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html + /// [MonoBehaviour.Update]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html + /// [OnEnable()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnEnable.html + /// [OnDisable()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDisable.html] + /// [OnBeforeSerialize()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnBeforeSerialize.html + /// [OnAfterSerialize()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnAfterSerialize.html + /// [Agents]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md + /// [Reinforcement Learning in Unity]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design.md + /// [Unity ML-Agents Toolkit]: https://github.com/Unity-Technologies/ml-agents + /// [Unity ML-Agents Toolkit manual]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Readme.md + /// + /// + [HelpURL("https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/" + + "docs/Learning-Environment-Design-Agents.md")] + [Serializable] + [RequireComponent(typeof(BehaviorParameters))] + [DefaultExecutionOrder(-50)] + public partial class Agent : MonoBehaviour, ISerializationCallbackReceiver, IActionReceiver, IHeuristicProvider + { + IPolicy m_Brain; + BehaviorParameters m_PolicyFactory; + + /// This code is here to make the upgrade path for users using MaxStep + /// easier. We will hook into the Serialization code and make sure that + /// agentParameters.maxStep and this.maxStep are in sync. + [Serializable] + internal struct AgentParameters + { + public int maxStep; + } + + [SerializeField] + [HideInInspector] + internal AgentParameters agentParameters; + [SerializeField] + [HideInInspector] + internal bool hasUpgradedFromAgentParameters; + + /// + /// The maximum number of steps the agent takes before being done. + /// + /// The maximum steps for an agent to take before it resets; or 0 for + /// unlimited steps. + /// + /// The max step value determines the maximum length of an agent's episodes. + /// Set to a positive integer to limit the episode length to that many steps. + /// Set to 0 for unlimited episode length. + /// + /// When an episode ends and a new one begins, the Agent object's + /// function is called. You can implement + /// to reset the agent or remove it from the + /// environment. An agent's episode can also end if you call its + /// method or an external process resets the environment through the . + /// + /// Consider limiting the number of steps in an episode to avoid wasting time during + /// training. If you set the max step value to a reasonable estimate of the time it should + /// take to complete a task, then agents that haven’t succeeded in that time frame will + /// reset and start a new training episode rather than continue to fail. + /// + /// + /// To use a step limit when training while allowing agents to run without resetting + /// outside of training, you can set the max step to 0 in + /// if the is not connected to an external process. + /// + /// using Unity.MLAgents; + /// + /// public class MyAgent : Agent + /// { + /// public override void Initialize() + /// { + /// if (!Academy.Instance.IsCommunicatorOn) + /// { + /// this.MaxStep = 0; + /// } + /// } + /// } + /// + /// **Note:** in general, you should limit the differences between the code you execute + /// during training and the code you run during inference. + /// + [FormerlySerializedAs("maxStep")] + [HideInInspector] public int MaxStep; + + /// Current Agent information (message sent to Brain). + AgentInfo m_Info; + + /// Represents the reward the agent accumulated during the current step. + /// It is reset to 0 at the beginning of every step. + /// Should be set to a positive value when the agent performs a "good" + /// action that we wish to reinforce/reward, and set to a negative value + /// when the agent performs a "bad" action that we wish to punish/deter. + /// Additionally, the magnitude of the reward should not exceed 1.0 + float m_Reward; + + /// Represents the group reward the agent accumulated during the current step. + float m_GroupReward; + + /// Keeps track of the cumulative reward in this episode. + float m_CumulativeReward; + + /// Whether or not the agent requests an action. + bool m_RequestAction; + + /// Whether or not the agent requests a decision. + bool m_RequestDecision; + + /// Keeps track of the number of steps taken by the agent in this episode. + /// Note that this value is different for each agent, and may not overlap + /// with the step counter in the Academy, since agents reset based on + /// their own experience. + int m_StepCount; + + /// Number of times the Agent has completed an episode. + int m_CompletedEpisodes; + + /// Episode identifier each agent receives. It is used + /// to separate between different agents in the environment. + /// This Id will be changed every time the Agent resets. + int m_EpisodeId; + + /// Whether or not the Agent has been initialized already + bool m_Initialized; + + /// + /// Set of DemonstrationWriters that the Agent will write its step information to. + /// If you use a DemonstrationRecorder component, this will automatically register its DemonstrationWriter. + /// You can also add your own DemonstrationWriter by calling + /// DemonstrationRecorder.AddDemonstrationWriterToAgent() + /// + internal ISet DemonstrationWriters = new HashSet(); + + /// + /// List of sensors used to generate observations. + /// Currently generated from attached SensorComponents, and a legacy VectorSensor + /// + internal List sensors; + + /// + /// VectorSensor which is written to by AddVectorObs + /// + internal VectorSensor collectObservationsSensor; + + /// + /// StackingSensor which is written to by AddVectorObs + /// + internal StackingSensor stackedCollectObservationsSensor; + + private RecursionChecker m_CollectObservationsChecker = new RecursionChecker("CollectObservations"); + private RecursionChecker m_OnEpisodeBeginChecker = new RecursionChecker("OnEpisodeBegin"); + + /// + /// List of IActuators that this Agent will delegate actions to if any exist. + /// + ActuatorManager m_ActuatorManager; + + /// + /// VectorActuator which is used by default if no other sensors exist on this Agent. This VectorSensor will + /// delegate its actions to by default in order to keep backward compatibility + /// with the current behavior of Agent. + /// + IActuator m_VectorActuator; + + /// Currect MultiAgentGroup ID. Default to 0 (meaning no group) + int m_GroupId; + + /// Delegate for the agent to unregister itself from the MultiAgentGroup without cyclic reference + /// between agent and the group + internal event Action OnAgentDisabled; + + /// + /// Called when the Agent is being loaded (before OnEnable()). + /// + /// + /// This function registers the RpcCommunicator delegate if no delegate has been registered with CommunicatorFactory. + /// Always call the base Agent class version of this function if you implement `Awake()` in your + /// own Agent subclasses. + /// + /// + /// + /// protected override void Awake() + /// { + /// base.Awake(); + /// // additional Awake logic... + /// } + /// + /// + protected internal virtual void Awake() + { +#if UNITY_EDITOR || UNITY_STANDALONE + if (!CommunicatorFactory.CommunicatorRegistered) + { + Debug.Log("Registered Communicator in Agent."); + CommunicatorFactory.Register(RpcCommunicator.Create); + } +#endif + } + + /// + /// Called when the attached [GameObject] becomes enabled and active. + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + /// + /// This function initializes the Agent instance, if it hasn't been initialized yet. + /// Always call the base Agent class version of this function if you implement `OnEnable()` + /// in your own Agent subclasses. + /// + /// + /// + /// protected override void OnEnable() + /// { + /// base.OnEnable(); + /// // additional OnEnable logic... + /// } + /// + /// + protected virtual void OnEnable() + { + LazyInitialize(); + } + + /// + /// Called by Unity immediately before serializing this object. + /// + /// + /// The Agent class uses OnBeforeSerialize() for internal housekeeping. Call the + /// base class implementation if you need your own custom serialization logic. + /// + /// See [OnBeforeSerialize] for more information. + /// + /// [OnBeforeSerialize]: https://docs.unity3d.com/ScriptReference/ISerializationCallbackReceiver.OnAfterDeserialize.html + /// + /// + /// + /// public new void OnBeforeSerialize() + /// { + /// base.OnBeforeSerialize(); + /// // additional serialization logic... + /// } + /// + /// + public void OnBeforeSerialize() + { + // Manages a serialization upgrade issue from v0.13 to v0.14 where MaxStep moved + // from AgentParameters (since removed) to Agent + if (MaxStep == 0 && MaxStep != agentParameters.maxStep && !hasUpgradedFromAgentParameters) + { + MaxStep = agentParameters.maxStep; + } + hasUpgradedFromAgentParameters = true; + } + + /// + /// Called by Unity immediately after deserializing this object. + /// + /// + /// The Agent class uses OnAfterDeserialize() for internal housekeeping. Call the + /// base class implementation if you need your own custom deserialization logic. + /// + /// See [OnAfterDeserialize] for more information. + /// + /// [OnAfterDeserialize]: https://docs.unity3d.com/ScriptReference/ISerializationCallbackReceiver.OnAfterDeserialize.html + /// + /// + /// + /// public new void OnAfterDeserialize() + /// { + /// base.OnAfterDeserialize(); + /// // additional deserialization logic... + /// } + /// + /// + public void OnAfterDeserialize() + { + // Manages a serialization upgrade issue from v0.13 to v0.14 where MaxStep moved + // from AgentParameters (since removed) to Agent + if (MaxStep == 0 && MaxStep != agentParameters.maxStep && !hasUpgradedFromAgentParameters) + { + MaxStep = agentParameters.maxStep; + } + hasUpgradedFromAgentParameters = true; + } + + /// + /// Initializes the agent. Can be safely called multiple times. + /// + /// + /// This function calls your implementation, if one exists. + /// + public void LazyInitialize() + { + if (m_Initialized) + { + return; + } + m_Initialized = true; + + // Grab the "static" properties for the Agent. + m_EpisodeId = EpisodeIdCounter.GetEpisodeId(); + m_PolicyFactory = GetComponent(); + + m_Info = new AgentInfo(); + sensors = new List(); + + Academy.Instance.AgentIncrementStep += AgentIncrementStep; + Academy.Instance.AgentSendState += SendInfo; + Academy.Instance.DecideAction += DecideAction; + Academy.Instance.AgentAct += AgentStep; + Academy.Instance.AgentForceReset += _AgentReset; + + using (TimerStack.Instance.Scoped("InitializeActuators")) + { + InitializeActuators(); + } + + m_Brain = m_PolicyFactory.GeneratePolicy(m_ActuatorManager.GetCombinedActionSpec(), m_ActuatorManager); + ResetData(); + Initialize(); + + using (TimerStack.Instance.Scoped("InitializeSensors")) + { + InitializeSensors(); + } + + m_Info.storedActions = new ActionBuffers( + new float[m_ActuatorManager.NumContinuousActions], + new int[m_ActuatorManager.NumDiscreteActions] + ); + + m_Info.groupId = m_GroupId; + + // The first time the Academy resets, all Agents in the scene will be + // forced to reset through the event. + // To avoid the Agent resetting twice, the Agents will not begin their + // episode when initializing until after the Academy had its first reset. + if (Academy.Instance.TotalStepCount != 0) + { + using (m_OnEpisodeBeginChecker.Start()) + { + OnEpisodeBegin(); + } + } + } + + /// + /// The reason that the Agent has been set to "done". + /// + enum DoneReason + { + /// + /// The episode was ended manually by calling . + /// + DoneCalled, + + /// + /// The max steps for the Agent were reached. + /// + MaxStepReached, + + /// + /// The Agent was disabled. + /// + Disabled, + } + + /// + /// Called when the attached [GameObject] becomes disabled and inactive. + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + /// + /// Always call the base Agent class version of this function if you implement `OnDisable()` + /// in your own Agent subclasses. + /// + /// + /// + /// protected override void OnDisable() + /// { + /// base.OnDisable(); + /// // additional OnDisable logic... + /// } + /// + /// + /// + protected virtual void OnDisable() + { + DemonstrationWriters.Clear(); + + // If Academy.Dispose has already been called, we don't need to unregister with it. + // We don't want to even try, because this will lazily create a new Academy! + if (Academy.IsInitialized) + { + Academy.Instance.AgentIncrementStep -= AgentIncrementStep; + Academy.Instance.AgentSendState -= SendInfo; + Academy.Instance.DecideAction -= DecideAction; + Academy.Instance.AgentAct -= AgentStep; + Academy.Instance.AgentForceReset -= _AgentReset; + NotifyAgentDone(DoneReason.Disabled); + } + + CleanupSensors(); + m_Brain?.Dispose(); + OnAgentDisabled?.Invoke(this); + m_Initialized = false; + } + + void NotifyAgentDone(DoneReason doneReason) + { + if (m_Info.done) + { + // The Agent was already marked as Done and should not be notified again + return; + } + m_Info.episodeId = m_EpisodeId; + m_Info.reward = m_Reward; + m_Info.groupReward = m_GroupReward; + m_Info.done = true; + m_Info.maxStepReached = doneReason == DoneReason.MaxStepReached; + m_Info.groupId = m_GroupId; + UpdateSensors(); + // Make sure the latest observations are being passed to training. + using (m_CollectObservationsChecker.Start()) + { + CollectObservations(collectObservationsSensor); + } + // Request the last decision with no callbacks + // We request a decision so Python knows the Agent is done immediately + m_Brain?.RequestDecision(m_Info, sensors); + + // We also have to write any to any DemonstationStores so that they get the "done" flag. + if (DemonstrationWriters.Count != 0) + { + foreach (var demoWriter in DemonstrationWriters) + { + demoWriter.Record(m_Info, sensors); + } + } + + ResetSensors(); + + if (doneReason != DoneReason.Disabled) + { + // We don't want to update the reward stats when the Agent is disabled, because this will make + // the rewards look lower than they actually are during shutdown. + m_CompletedEpisodes++; + UpdateRewardStats(); + } + + m_Reward = 0f; + m_GroupReward = 0f; + m_CumulativeReward = 0f; + m_RequestAction = false; + m_RequestDecision = false; + m_Info.storedActions.Clear(); + } + + /// + /// Updates the Model assigned to this Agent instance. + /// + /// + /// If the agent already has an assigned model, that model is replaced with the + /// the provided one. However, if you call this function with arguments that are + /// identical to the current parameters of the agent, then no changes are made. + /// + /// **Note:** the parameter is ignored when not training. + /// The and parameters + /// are ignored when not using inference. + /// + /// The identifier of the behavior. This + /// will categorize the agent when training. + /// + /// The model to use for inference. + /// Define the device on which the model + /// will be run. + public void SetModel( + string behaviorName, + NNModel model, + InferenceDevice inferenceDevice = InferenceDevice.Default) + { + if (behaviorName == m_PolicyFactory.BehaviorName && + model == m_PolicyFactory.Model && + inferenceDevice == m_PolicyFactory.InferenceDevice) + { + // If everything is the same, don't make any changes. + return; + } + NotifyAgentDone(DoneReason.Disabled); + m_PolicyFactory.Model = model; + m_PolicyFactory.InferenceDevice = inferenceDevice; + m_PolicyFactory.BehaviorName = behaviorName; + ReloadPolicy(); + } + + internal void ReloadPolicy() + { + if (!m_Initialized) + { + // If we haven't initialized yet, no need to make any changes now; they'll + // happen in LazyInitialize later. + return; + } + m_Brain?.Dispose(); + m_Brain = m_PolicyFactory.GeneratePolicy(m_ActuatorManager.GetCombinedActionSpec(), m_ActuatorManager); + } + + /// + /// Returns the current step counter (within the current episode). + /// + /// + /// Current step count. + /// + public int StepCount + { + get { return m_StepCount; } + } + + /// + /// Returns the number of episodes that the Agent has completed (either + /// was called, or maxSteps was reached). + /// + /// + /// Current episode count. + /// + public int CompletedEpisodes + { + get { return m_CompletedEpisodes; } + } + + /// + /// Overrides the current step reward of the agent and updates the episode + /// reward accordingly. + /// + /// + /// This function replaces any rewards given to the agent during the current step. + /// Use to incrementally change the reward rather than + /// overriding it. + /// + /// Typically, you assign rewards in the Agent subclass's + /// implementation after carrying out the received action and evaluating its success. + /// + /// Rewards are used during reinforcement learning; they are ignored during inference. + /// + /// See [Agents - Rewards] for general advice on implementing rewards and [Reward Signals] + /// for information about mixing reward signals from curiosity and Generative Adversarial + /// Imitation Learning (GAIL) with rewards supplied through this method. + /// + /// [Agents - Rewards]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#rewards + /// [Reward Signals]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/ML-Agents-Overview.md#a-quick-note-on-reward-signals + /// + /// The new value of the reward. + public void SetReward(float reward) + { + Utilities.DebugCheckNanAndInfinity(reward, nameof(reward), nameof(SetReward)); + m_CumulativeReward += (reward - m_Reward); + m_Reward = reward; + } + + /// + /// Increments the step and episode rewards by the provided value. + /// + /// Use a positive reward to reinforce desired behavior. You can use a + /// negative reward to penalize mistakes. Use to + /// set the reward assigned to the current step with a specific value rather than + /// increasing or decreasing it. + /// + /// Typically, you assign rewards in the Agent subclass's + /// implementation after carrying out the received action and evaluating its success. + /// + /// Rewards are used during reinforcement learning; they are ignored during inference. + /// + /// See [Agents - Rewards] for general advice on implementing rewards and [Reward Signals] + /// for information about mixing reward signals from curiosity and Generative Adversarial + /// Imitation Learning (GAIL) with rewards supplied through this method. + /// + /// [Agents - Rewards]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#rewards + /// [Reward Signals]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/ML-Agents-Overview.md#a-quick-note-on-reward-signals + /// + /// Incremental reward value. + public void AddReward(float increment) + { + Utilities.DebugCheckNanAndInfinity(increment, nameof(increment), nameof(AddReward)); + m_Reward += increment; + m_CumulativeReward += increment; + } + + internal void SetGroupReward(float reward) + { + Utilities.DebugCheckNanAndInfinity(reward, nameof(reward), nameof(SetGroupReward)); + m_GroupReward = reward; + } + + internal void AddGroupReward(float increment) + { + Utilities.DebugCheckNanAndInfinity(increment, nameof(increment), nameof(AddGroupReward)); + m_GroupReward += increment; + } + + /// + /// Retrieves the episode reward for the Agent. + /// + /// The episode reward. + public float GetCumulativeReward() + { + return m_CumulativeReward; + } + + void UpdateRewardStats() + { + var gaugeName = $"{m_PolicyFactory.BehaviorName}.CumulativeReward"; + TimerStack.Instance.SetGauge(gaugeName, GetCumulativeReward()); + } + + /// + /// Sets the done flag to true and resets the agent. + /// + /// + /// This should be used when the episode can no longer continue, such as when the Agent + /// reaches the goal or fails at the task. + /// + /// + /// + public void EndEpisode() + { + EndEpisodeAndReset(DoneReason.DoneCalled); + } + + /// + /// Indicate that the episode is over but not due to the "fault" of the Agent. + /// This has the same end result as calling , but has a + /// slightly different effect on training. + /// + /// + /// This should be used when the episode could continue, but has gone on for + /// a sufficient number of steps. + /// + /// + /// + public void EpisodeInterrupted() + { + EndEpisodeAndReset(DoneReason.MaxStepReached); + } + + /// + /// Internal method to end the episode and reset the Agent. + /// + /// + void EndEpisodeAndReset(DoneReason reason) + { + NotifyAgentDone(reason); + _AgentReset(); + } + + /// + /// Requests a new decision for this agent. + /// + /// + /// Call `RequestDecision()` whenever an agent needs a decision. You often + /// want to request a decision every environment step. However, if an agent + /// cannot use the decision every step, then you can request a decision less + /// frequently. + /// + /// You can add a component to the agent's + /// [GameObject] to drive the agent's decision making. When you use this component, + /// do not call `RequestDecision()` separately. + /// + /// Note that this function calls ; you do not need to + /// call both functions at the same time. + /// + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + public void RequestDecision() + { + m_RequestDecision = true; + RequestAction(); + } + + /// + /// Requests an action for this agent. + /// + /// + /// Call `RequestAction()` to repeat the previous action returned by the agent's + /// most recent decision. A new decision is not requested. When you call this function, + /// the Agent instance invokes with the + /// existing action vector. + /// + /// You can use `RequestAction()` in situations where an agent must take an action + /// every update, but doesn't need to make a decision as often. For example, an + /// agent that moves through its environment might need to apply an action to keep + /// moving, but only needs to make a decision to change course or speed occasionally. + /// + /// You can add a component to the agent's + /// [GameObject] to drive the agent's decision making and action frequency. When you + /// use this component, do not call `RequestAction()` separately. + /// + /// Note that calls `RequestAction()`; you do not need to + /// call both functions at the same time. + /// + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + public void RequestAction() + { + m_RequestAction = true; + } + + /// Helper function that resets all the data structures associated with + /// the agent. Typically used when the agent is being initialized or reset + /// at the end of an episode. + void ResetData() + { + m_ActuatorManager?.ResetData(); + } + + /// + /// Implement `Initialize()` to perform one-time initialization or set up of the + /// Agent instance. + /// + /// + /// `Initialize()` is called once when the agent is first enabled. If, for example, + /// the Agent object needs references to other [GameObjects] in the scene, you + /// can collect and store those references here. + /// + /// Note that is called at the start of each of + /// the agent's "episodes". You can use that function for items that need to be reset + /// for each episode. + /// + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + public virtual void Initialize() { } + + /// + /// Implement to choose an action for this agent using a custom heuristic. + /// + /// + /// Implement this function to provide custom decision making logic or to support manual + /// control of an agent using keyboard, mouse, game controller input, or a script. + /// + /// Your heuristic implementation can use any decision making logic you specify. Assign decision + /// values to the and + /// arrays , passed to your function as a parameter. + /// The same array will be reused between steps. It is up to the user to initialize + /// the values on each call, for example by calling `Array.Clear(actionsOut, 0, actionsOut.Length);`. + /// Add values to the array at the same indexes as they are used in your + /// function, which receives this array and + /// implements the corresponding agent behavior. See [Actions] for more information + /// about agent actions. + /// Note : Do not create a new float array of action in the `Heuristic()` method, + /// as this will prevent writing floats to the original action array. + /// + /// An agent calls this `Heuristic()` function to make a decision when you set its behavior + /// type to . The agent also calls this function if + /// you set its behavior type to when the + /// is not connected to an external training process and you do not + /// assign a trained model to the agent. + /// + /// To perform imitation learning, implement manual control of the agent in the `Heuristic()` + /// function so that you can record the demonstrations required for the imitation learning + /// algorithms. (Attach a [Demonstration Recorder] component to the agent's [GameObject] to + /// record the demonstration session to a file.) + /// + /// Even when you don’t plan to use heuristic decisions for an agent or imitation learning, + /// implementing a simple heuristic function can aid in debugging agent actions and interactions + /// with its environment. + /// + /// [Demonstration Recorder]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#recording-demonstrations + /// [Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#actions + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + /// + /// The following example illustrates a `Heuristic()` function that provides WASD-style + /// keyboard control for an agent that can move in two dimensions as well as jump. See + /// [Input Manager] for more information about the built-in Unity input functions. + /// You can also use the [Input System package], which provides a more flexible and + /// configurable input system. + /// + /// public override void Heuristic(in ActionBuffers actionsOut) + /// { + /// var continuousActionsOut = actionsOut.ContinuousActions; + /// continuousActionsOut[0] = Input.GetAxis("Horizontal"); + /// continuousActionsOut[1] = Input.GetKey(KeyCode.Space) ? 1.0f : 0.0f; + /// continuousActionsOut[2] = Input.GetAxis("Vertical"); + /// } + /// + /// [Input Manager]: https://docs.unity3d.com/Manual/class-InputManager.html + /// [Input System package]: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/index.html + /// + /// The which contain the continuous and + /// discrete action buffers to write to. + /// + public virtual void Heuristic(in ActionBuffers actionsOut) + { + Debug.LogWarning("Heuristic method called but not implemented. Returning placeholder actions."); + } + + /// + /// Set up the list of ISensors on the Agent. By default, this will select any + /// SensorComponent's attached to the Agent. + /// + internal void InitializeSensors() + { + if (m_PolicyFactory == null) + { + m_PolicyFactory = GetComponent(); + } + if (m_PolicyFactory.ObservableAttributeHandling != ObservableAttributeOptions.Ignore) + { + var excludeInherited = + m_PolicyFactory.ObservableAttributeHandling == ObservableAttributeOptions.ExcludeInherited; + using (TimerStack.Instance.Scoped("CreateObservableSensors")) + { + var observableSensors = ObservableAttribute.CreateObservableSensors(this, excludeInherited); + sensors.AddRange(observableSensors); + } + } + + // Get all attached sensor components + SensorComponent[] attachedSensorComponents; + if (m_PolicyFactory.UseChildSensors) + { + attachedSensorComponents = GetComponentsInChildren(); + } + else + { + attachedSensorComponents = GetComponents(); + } + + sensors.Capacity += attachedSensorComponents.Length; + foreach (var component in attachedSensorComponents) + { + sensors.AddRange(component.CreateSensors()); + } + + // Support legacy CollectObservations + var param = m_PolicyFactory.BrainParameters; + if (param.VectorObservationSize > 0) + { + collectObservationsSensor = new VectorSensor(param.VectorObservationSize); + if (param.NumStackedVectorObservations > 1) + { + stackedCollectObservationsSensor = new StackingSensor( + collectObservationsSensor, param.NumStackedVectorObservations); + sensors.Add(stackedCollectObservationsSensor); + } + else + { + sensors.Add(collectObservationsSensor); + } + } + + // Sort the Sensors by name to ensure determinism + SensorUtils.SortSensors(sensors); + +#if DEBUG + // Make sure the names are actually unique + + for (var i = 0; i < sensors.Count - 1; i++) + { + Debug.Assert( + !sensors[i].GetName().Equals(sensors[i + 1].GetName()), + "Sensor names must be unique."); + } +#endif + } + + void CleanupSensors() + { + // Dispose all attached sensor + for (var i = 0; i < sensors.Count; i++) + { + var sensor = sensors[i]; + if (sensor is IDisposable disposableSensor) + { + disposableSensor.Dispose(); + } + } + } + + void InitializeActuators() + { + ActuatorComponent[] attachedActuators; + if (m_PolicyFactory.UseChildActuators) + { + attachedActuators = GetComponentsInChildren(); + } + else + { + attachedActuators = GetComponents(); + } + + // Support legacy OnActionReceived + // TODO don't set this up if the sizes are 0? + var param = m_PolicyFactory.BrainParameters; + m_VectorActuator = new AgentVectorActuator(this, this, param.ActionSpec); + m_ActuatorManager = new ActuatorManager(attachedActuators.Length + 1); + + m_ActuatorManager.Add(m_VectorActuator); + + foreach (var actuatorComponent in attachedActuators) + { + m_ActuatorManager.AddActuators(actuatorComponent.CreateActuators()); + } + } + + /// + /// Sends the Agent info to the linked Brain. + /// + void SendInfoToBrain() + { + if (!m_Initialized) + { + throw new UnityAgentsException("Call to SendInfoToBrain when Agent hasn't been initialized." + + "Please ensure that you are calling 'base.OnEnable()' if you have overridden OnEnable."); + } + + if (m_Brain == null) + { + return; + } + + if (m_Info.done) + { + m_Info.ClearActions(); + } + else + { + m_Info.CopyActions(m_ActuatorManager.StoredActions); + } + + UpdateSensors(); + using (TimerStack.Instance.Scoped("CollectObservations")) + { + using (m_CollectObservationsChecker.Start()) + { + CollectObservations(collectObservationsSensor); + } + } + using (TimerStack.Instance.Scoped("WriteActionMask")) + { + m_ActuatorManager.WriteActionMask(); + } + + m_Info.discreteActionMasks = m_ActuatorManager.DiscreteActionMask?.GetMask(); + m_Info.reward = m_Reward; + m_Info.groupReward = m_GroupReward; + m_Info.done = false; + m_Info.maxStepReached = false; + m_Info.episodeId = m_EpisodeId; + m_Info.groupId = m_GroupId; + + using (TimerStack.Instance.Scoped("RequestDecision")) + { + m_Brain.RequestDecision(m_Info, sensors); + } + + // If we have any DemonstrationWriters, write the AgentInfo and sensors to them. + if (DemonstrationWriters.Count != 0) + { + foreach (var demoWriter in DemonstrationWriters) + { + demoWriter.Record(m_Info, sensors); + } + } + } + + void UpdateSensors() + { + foreach (var sensor in sensors) + { + sensor.Update(); + } + } + + void ResetSensors() + { + foreach (var sensor in sensors) + { + sensor.Reset(); + } + } + + /// + /// Implement `CollectObservations()` to collect the vector observations of + /// the agent for the step. The agent observation describes the current + /// environment from the perspective of the agent. + /// + /// + /// The vector observations for the agent. + /// + /// + /// An agent's observation is any environment information that helps + /// the agent achieve its goal. For example, for a fighting agent, its + /// observation could include distances to friends or enemies, or the + /// current level of ammunition at its disposal. + /// + /// You can use a combination of vector, visual, and raycast observations for an + /// agent. If you only use visual or raycast observations, you do not need to + /// implement a `CollectObservations()` function. + /// + /// Add vector observations to the parameter passed to + /// this method by calling the helper methods: + /// - + /// - + /// - + /// - + /// - + /// - + /// - + /// - + /// + /// You can use any combination of these helper functions to build the agent's + /// vector of observations. You must build the vector in the same order + /// each time `CollectObservations()` is called and the length of the vector + /// must always be the same. In addition, the length of the observation must + /// match the + /// attribute of the linked Brain, which is set in the Editor on the + /// **Behavior Parameters** component attached to the agent's [GameObject]. + /// + /// For more information about observations, see [Observations and Sensors]. + /// + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// [Observations and Sensors]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#observations-and-sensors + /// + public virtual void CollectObservations(VectorSensor sensor) + { + } + + /// + /// Returns a read-only view of the observations that were generated in + /// . This is mainly useful inside of a + /// method to avoid recomputing the observations. + /// + /// A read-only view of the observations list. + public ReadOnlyCollection GetObservations() + { + return collectObservationsSensor.GetObservations(); + } + + /// + /// Returns a read-only view of the stacked observations that were generated in + /// . This is mainly useful inside of a + /// method to avoid recomputing the observations. + /// + /// A read-only view of the stacked observations list. + public ReadOnlyCollection GetStackedObservations() + { + return stackedCollectObservationsSensor.GetStackedObservations(); + } + + /// + /// Implement `WriteDiscreteActionMask()` to collects the masks for discrete + /// actions. When using discrete actions, the agent will not perform the masked + /// action. + /// + /// + /// The action mask for the agent. + /// + /// + /// When using Discrete Control, you can prevent the Agent from using a certain + /// action by masking it with . + /// + /// See [Agents - Actions] for more information on masking actions. + /// + /// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#actions + /// + /// + public virtual void WriteDiscreteActionMask(IDiscreteActionMask actionMask) { } + + /// + /// Implement `OnActionReceived()` to specify agent behavior at every step, based + /// on the provided action. + /// + /// + /// An action is passed to this function in the form of an . + /// Your implementation must use the array to direct the agent's behavior for the + /// current step. + /// + /// You decide how many elements you need in the ActionBuffers to control your + /// agent and what each element means. For example, if you want to apply a + /// force to move an agent around the environment, you can arbitrarily pick + /// three values in ActionBuffers.ContinuousActions array to use as the force components. + /// During training, the agent's policy learns to set those particular elements of + /// the array to maximize the training rewards the agent receives. (Of course, + /// if you implement a function, it must use the same + /// elements of the action array for the same purpose since there is no learning + /// involved.) + /// + /// An Agent can use continuous and/or discrete actions. Configure this along with the size + /// of the action array, in the of the agent's associated + /// component. + /// + /// When an agent uses continuous actions, the values in the ActionBuffers.ContinuousActions + /// array are floating point numbers. You should clamp the values to the range, + /// -1..1, to increase numerical stability during training. + /// + /// When an agent uses discrete actions, the values in the ActionBuffers.DiscreteActions array + /// are integers that each represent a specific, discrete action. For example, + /// you could define a set of discrete actions such as: + /// + /// + /// 0 = Do nothing + /// 1 = Move one space left + /// 2 = Move one space right + /// 3 = Move one space up + /// 4 = Move one space down + /// + /// + /// When making a decision, the agent picks one of the five actions and puts the + /// corresponding integer value in the ActionBuffers.DiscreteActions array. For example, if the agent + /// decided to move left, the ActionBuffers.DiscreteActions parameter would be an array with + /// a single element with the value 1. + /// + /// You can define multiple sets, or branches, of discrete actions to allow an + /// agent to perform simultaneous, independent actions. For example, you could + /// use one branch for movement and another branch for throwing a ball left, right, + /// up, or down, to allow the agent to do both in the same step. + /// + /// The ActionBuffers.DiscreteActions array of an agent with discrete actions contains one + /// element for each branch. The value of each element is the integer representing the + /// chosen action for that branch. The agent always chooses one action for each branch. + /// + /// When you use the discrete actions, you can prevent the training process + /// or the neural network model from choosing specific actions in a step by + /// implementing the + /// method. For example, if your agent is next to a wall, you could mask out any + /// actions that would result in the agent trying to move into the wall. + /// + /// For more information about implementing agent actions see [Agents - Actions]. + /// + /// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Design-Agents.md#actions + /// + /// + /// Struct containing the buffers of actions to be executed at this step. + /// + public virtual void OnActionReceived(ActionBuffers actions) { } + + /// + /// Implement `OnEpisodeBegin()` to set up an Agent instance at the beginning + /// of an episode. + /// + /// + /// + public virtual void OnEpisodeBegin() { } + + /// + /// Gets the most recent ActionBuffer for this agent. + /// + /// The most recent ActionBuffer for this agent + public ActionBuffers GetStoredActionBuffers() + { + return m_ActuatorManager.StoredActions; + } + + /// + /// An internal reset method that updates internal data structures in + /// addition to calling . + /// + void _AgentReset() + { + ResetData(); + m_StepCount = 0; + using (m_OnEpisodeBeginChecker.Start()) + { + OnEpisodeBegin(); + } + } + + /// + /// Scales continuous action from [-1, 1] to arbitrary range. + /// + /// The input action value. + /// The minimum output value. + /// The maximum output value. + /// The scaled from [-1,1] to + /// [, ]. + protected static float ScaleAction(float rawAction, float min, float max) + { + var middle = (min + max) / 2; + var range = (max - min) / 2; + return rawAction * range + middle; + } + + /// + /// Signals the agent that it must send its decision to the brain. + /// + void SendInfo() + { + // If the Agent is done, it has just reset and thus requires a new decision + if (m_RequestDecision) + { + SendInfoToBrain(); + m_Reward = 0f; + m_GroupReward = 0f; + m_RequestDecision = false; + } + } + + void AgentIncrementStep() + { + m_StepCount += 1; + } + + /// Used by the brain to make the agent perform a step. + void AgentStep() + { + if ((m_RequestAction) && (m_Brain != null)) + { + m_RequestAction = false; + m_ActuatorManager.ExecuteActions(); + } + + if ((m_StepCount >= MaxStep) && (MaxStep > 0)) + { + NotifyAgentDone(DoneReason.MaxStepReached); + _AgentReset(); + } + } + + void DecideAction() + { + if (m_ActuatorManager.StoredActions.ContinuousActions.Array == null) + { + ResetData(); + } + var actions = m_Brain?.DecideAction() ?? new ActionBuffers(); + m_Info.CopyActions(actions); + m_ActuatorManager.UpdateActions(actions); + } + + internal void SetMultiAgentGroup(IMultiAgentGroup multiAgentGroup) + { + if (multiAgentGroup == null) + { + m_GroupId = 0; + } + else + { + var newGroupId = multiAgentGroup.GetId(); + if (m_GroupId == 0 || m_GroupId == newGroupId) + { + m_GroupId = newGroupId; + } + else + { + throw new UnityAgentsException("Agent is already registered with a group. Unregister it first."); + } + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Agent.cs.meta b/com.unity.ml-agents/Runtime/Agent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5463d244fb33540d5f7dfa8b9fada005a763c721 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Agent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88b6042bc9a5d4aa58d931eae49442e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Analytics.meta b/com.unity.ml-agents/Runtime/Analytics.meta new file mode 100644 index 0000000000000000000000000000000000000000..260b85a9b3a13afb47fb6a4a786a6d82663e37e1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8b12ac54c5224758af88c67e2af4a01e +timeCreated: 1604359666 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs b/com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs new file mode 100644 index 0000000000000000000000000000000000000000..f0fcdbba191ede69a28a66cb38dab6d8e5dc1fe6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs @@ -0,0 +1,65 @@ +using System; +using System.Text; +using System.Security.Cryptography; +using UnityEngine; + +namespace Unity.MLAgents.Analytics +{ + internal static class AnalyticsUtils + { + /// + /// Conversion function from byte array to hex string + /// + /// + /// A byte array to be hex encoded. + private static string ToHexString(byte[] array) + { + StringBuilder hex = new StringBuilder(array.Length * 2); + foreach (byte b in array) + { + hex.AppendFormat("{0:x2}", b); + } + return hex.ToString(); + } + + /// + /// Hash a string to remove PII or secret info before sending to analytics + /// + /// + /// A string containing the key to be used for HMAC encoding. + /// + /// A string containing the value to be encoded. + public static string Hash(string key, string value) + { + string hash; + UTF8Encoding encoder = new UTF8Encoding(); + using (HMACSHA256 hmac = new HMACSHA256(encoder.GetBytes(key))) + { + Byte[] hmBytes = hmac.ComputeHash(encoder.GetBytes(value)); + hash = ToHexString(hmBytes); + } + return hash; + } + + internal static bool s_SendEditorAnalytics = true; + + /// + /// Helper class to temporarily disable sending analytics from unit tests. + /// + internal class DisableAnalyticsSending : IDisposable + { + private bool m_PreviousSendEditorAnalytics; + + public DisableAnalyticsSending() + { + m_PreviousSendEditorAnalytics = s_SendEditorAnalytics; + s_SendEditorAnalytics = false; + } + + public void Dispose() + { + s_SendEditorAnalytics = m_PreviousSendEditorAnalytics; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs.meta b/com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b00fab1c903ddd31d5c901b779be1b043107cd4b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: af1ef3e70f1242938d7b39284b1a892b +timeCreated: 1610575760 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Analytics/Events.cs b/com.unity.ml-agents/Runtime/Analytics/Events.cs new file mode 100644 index 0000000000000000000000000000000000000000..4a34273c049ddc74b2eb04308e52aa60cf339518 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/Events.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Analytics +{ + internal struct InferenceEvent + { + /// + /// Hash of the BehaviorName. + /// + public string BehaviorName; + public string BarracudaModelSource; + public string BarracudaModelVersion; + public string BarracudaModelProducer; + public string BarracudaPackageVersion; + /// + /// Whether inference is performed on CPU (0) or GPU (1). + /// + public int InferenceDevice; + public List ObservationSpecs; + public EventActionSpec ActionSpec; + public List ActuatorInfos; + public int MemorySize; + public long TotalWeightSizeBytes; + public string ModelHash; + } + + /// + /// Simplified version of ActionSpec struct for use in analytics + /// + [Serializable] + internal struct EventActionSpec + { + public int NumContinuousActions; + public int NumDiscreteActions; + public int[] BranchSizes; + + public static EventActionSpec FromActionSpec(ActionSpec actionSpec) + { + var branchSizes = actionSpec.BranchSizes ?? Array.Empty(); + return new EventActionSpec + { + NumContinuousActions = actionSpec.NumContinuousActions, + NumDiscreteActions = actionSpec.NumDiscreteActions, + BranchSizes = branchSizes, + }; + } + } + + /// + /// Information about an actuator. + /// + [Serializable] + internal struct EventActuatorInfo + { + public int BuiltInActuatorType; + public int NumContinuousActions; + public int NumDiscreteActions; + + public static EventActuatorInfo FromActuator(IActuator actuator) + { + BuiltInActuatorType builtInActuatorType = Actuators.BuiltInActuatorType.Unknown; + if (actuator is IBuiltInActuator builtInActuator) + { + builtInActuatorType = builtInActuator.GetBuiltInActuatorType(); + } + + var actionSpec = actuator.ActionSpec; + + return new EventActuatorInfo + { + BuiltInActuatorType = (int)builtInActuatorType, + NumContinuousActions = actionSpec.NumContinuousActions, + NumDiscreteActions = actionSpec.NumDiscreteActions + }; + } + } + + /// + /// Information about one dimension of an observation. + /// + [Serializable] + internal struct EventObservationDimensionInfo + { + public int Size; + public int Flags; + } + + /// + /// Simplified summary of Agent observations for use in analytics + /// + [Serializable] + internal struct EventObservationSpec + { + public string SensorName; + public string CompressionType; + public int BuiltInSensorType; + public int ObservationType; + public EventObservationDimensionInfo[] DimensionInfos; + + public static EventObservationSpec FromSensor(ISensor sensor) + { + var obsSpec = sensor.GetObservationSpec(); + var shape = obsSpec.Shape; + var dimProps = obsSpec.DimensionProperties; + var dimInfos = new EventObservationDimensionInfo[shape.Length]; + for (var i = 0; i < shape.Length; i++) + { + dimInfos[i].Size = shape[i]; + dimInfos[i].Flags = (int)dimProps[i]; + } + + var builtInSensorType = + (sensor as IBuiltInSensor)?.GetBuiltInSensorType() ?? Sensors.BuiltInSensorType.Unknown; + + return new EventObservationSpec + { + SensorName = sensor.GetName(), + CompressionType = sensor.GetCompressionSpec().SensorCompressionType.ToString(), + BuiltInSensorType = (int)builtInSensorType, + ObservationType = (int)obsSpec.ObservationType, + DimensionInfos = dimInfos, + }; + } + } + + internal struct RemotePolicyInitializedEvent + { + public string TrainingSessionGuid; + /// + /// Hash of the BehaviorName. + /// + public string BehaviorName; + public List ObservationSpecs; + public EventActionSpec ActionSpec; + public List ActuatorInfos; + + /// + /// This will be the same as TrainingEnvironmentInitializedEvent if available, but + /// TrainingEnvironmentInitializedEvent maybe not always be available with older trainers. + /// + public string MLAgentsEnvsVersion; + public string TrainerCommunicationVersion; + } + + internal struct TrainingEnvironmentInitializedEvent + { + public string TrainingSessionGuid; + + public string TrainerPythonVersion; + public string MLAgentsVersion; + public string MLAgentsEnvsVersion; + public string TorchVersion; + public string TorchDeviceType; + public int NumEnvironments; + public int NumEnvironmentParameters; + public string RunOptions; + } + + [Flags] + internal enum RewardSignals + { + Extrinsic = 1 << 0, + Gail = 1 << 1, + Curiosity = 1 << 2, + Rnd = 1 << 3, + } + + [Flags] + internal enum TrainingFeatures + { + BehavioralCloning = 1 << 0, + Recurrent = 1 << 1, + Threaded = 1 << 2, + SelfPlay = 1 << 3, + Curriculum = 1 << 4, + } + + internal struct TrainingBehaviorInitializedEvent + { + public string TrainingSessionGuid; + + public string BehaviorName; + public string TrainerType; + public RewardSignals RewardSignalFlags; + public TrainingFeatures TrainingFeatureFlags; + public string VisualEncoder; + public int NumNetworkLayers; + public int NumNetworkHiddenUnits; + public string Config; + } +} diff --git a/com.unity.ml-agents/Runtime/Analytics/Events.cs.meta b/com.unity.ml-agents/Runtime/Analytics/Events.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..347eebcd518c4c2b65417d1c08cb73f11eb5217b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/Events.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0a0d7cda6d74425a80775769a9283ba6 +timeCreated: 1604359798 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs b/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs new file mode 100644 index 0000000000000000000000000000000000000000..b7b466155a12a48e2692284e14ea41bc99647ed4 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs @@ -0,0 +1,283 @@ +using System.Collections.Generic; +using System.Diagnostics; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; +using UnityEngine; + +#if MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS +using UnityEngine.Analytics; +#endif + + +#if UNITY_EDITOR +using UnityEditor; +#if MLA_UNITY_ANALYTICS_MODULE +using UnityEditor.Analytics; +#endif // MLA_UNITY_ANALYTICS_MODULE +#endif // UNITY_EDITOR + + +namespace Unity.MLAgents.Analytics +{ + internal class InferenceAnalytics + { + const string k_VendorKey = "unity.ml-agents"; + const string k_EventName = "ml_agents_inferencemodelset"; + const int k_EventVersion = 1; + + /// + /// Whether or not we've registered this particular event yet + /// + static bool s_EventRegistered; + + /// + /// Hourly limit for this event name + /// + const int k_MaxEventsPerHour = 1000; + + /// + /// Maximum number of items in this event. + /// + const int k_MaxNumberOfElements = 1000; + + +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + /// + /// Models that we've already sent events for. + /// + private static HashSet s_SentModels; +#endif + + static bool EnableAnalytics() + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + if (s_EventRegistered) + { + return true; + } + + AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey, k_EventVersion); + if (result == AnalyticsResult.Ok) + { + s_EventRegistered = true; + } + if (s_EventRegistered && s_SentModels == null) + { + s_SentModels = new HashSet(); + } + +#else // no editor, no analytics + s_EventRegistered = false; +#endif + return s_EventRegistered; + } + + public static bool IsAnalyticsEnabled() + { +#if UNITY_EDITOR + return EditorAnalytics.enabled; +#else + return false; +#endif + } + + /// + /// Send an analytics event for the NNModel when it is set up for inference. + /// No events will be sent if analytics are disabled, and at most one event + /// will be sent per model instance. + /// + /// The NNModel being used for inference. + /// The BehaviorName of the Agent using the model + /// Whether inference is being performed on the CPU or GPU + /// List of ISensors for the Agent. Used to generate information about the observation space. + /// ActionSpec for the Agent. Used to generate information about the action space. + /// List of IActuators for the Agent. Used to generate information about the action space. + /// + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + public static void InferenceModelSet( + NNModel nnModel, + string behaviorName, + InferenceDevice inferenceDevice, + IList sensors, + ActionSpec actionSpec, + IList actuators + ) + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + // The event shouldn't be able to report if this is disabled but if we know we're not going to report + // Lets early out and not waste time gathering all the data + if (!IsAnalyticsEnabled()) + return; + + if (!EnableAnalytics()) + return; + + var added = s_SentModels.Add(nnModel); + + if (!added) + { + // We previously added this model. Exit so we don't resend. + return; + } + + var data = GetEventForModel(nnModel, behaviorName, inferenceDevice, sensors, actionSpec, actuators); + // Note - to debug, use JsonUtility.ToJson on the event. + // Debug.Log(JsonUtility.ToJson(data, true)); + if (AnalyticsUtils.s_SendEditorAnalytics) + { + EditorAnalytics.SendEventWithLimit(k_EventName, data, k_EventVersion); + } +#endif + } + + /// + /// Generate an InferenceEvent for the model. + /// + /// + /// + /// + /// + /// + /// + /// + internal static InferenceEvent GetEventForModel( + NNModel nnModel, + string behaviorName, + InferenceDevice inferenceDevice, + IList sensors, + ActionSpec actionSpec, + IList actuators + ) + { + var barracudaModel = ModelLoader.Load(nnModel); + var inferenceEvent = new InferenceEvent(); + + // Hash the behavior name so that there's no concern about PII or "secret" data being leaked. + inferenceEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, behaviorName); + + inferenceEvent.BarracudaModelSource = barracudaModel.IrSource; + inferenceEvent.BarracudaModelVersion = barracudaModel.IrVersion; + inferenceEvent.BarracudaModelProducer = barracudaModel.ProducerName; + inferenceEvent.MemorySize = (int)barracudaModel.GetTensorByName(TensorNames.MemorySize)[0]; + inferenceEvent.InferenceDevice = (int)inferenceDevice; + + if (barracudaModel.ProducerName == "Script") + { + // .nn files don't have these fields set correctly. Assign some placeholder values. + inferenceEvent.BarracudaModelSource = "NN"; + inferenceEvent.BarracudaModelProducer = "tensorflow_to_barracuda.py"; + } + +#if UNITY_EDITOR + var barracudaPackageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(typeof(Tensor).Assembly); + inferenceEvent.BarracudaPackageVersion = barracudaPackageInfo.version; +#else + inferenceEvent.BarracudaPackageVersion = null; +#endif + + inferenceEvent.ActionSpec = EventActionSpec.FromActionSpec(actionSpec); + inferenceEvent.ObservationSpecs = new List(sensors.Count); + foreach (var sensor in sensors) + { + inferenceEvent.ObservationSpecs.Add(EventObservationSpec.FromSensor(sensor)); + } + + inferenceEvent.ActuatorInfos = new List(actuators.Count); + foreach (var actuator in actuators) + { + inferenceEvent.ActuatorInfos.Add(EventActuatorInfo.FromActuator(actuator)); + } + + inferenceEvent.TotalWeightSizeBytes = GetModelWeightSize(barracudaModel); + inferenceEvent.ModelHash = GetModelHash(barracudaModel); + return inferenceEvent; + } + + /// + /// Compute the total model weight size in bytes. + /// This corresponds to the "Total weight size" display in the Barracuda inspector, + /// and the calculations are the same. + /// + /// + /// + static long GetModelWeightSize(Model barracudaModel) + { + long totalWeightsSizeInBytes = 0; + for (var l = 0; l < barracudaModel.layers.Count; ++l) + { + for (var d = 0; d < barracudaModel.layers[l].datasets.Length; ++d) + { + totalWeightsSizeInBytes += barracudaModel.layers[l].datasets[d].length; + } + } + return totalWeightsSizeInBytes; + } + + /// + /// Wrapper around Hash128 that supports Append(float[], int, int) + /// + struct MLAgentsHash128 + { + private Hash128 m_Hash; + + public void Append(float[] values, int count) + { + if (values == null) + { + return; + } + + // Pre-2020 versions of Unity don't have Hash128.Append() (can only hash strings and scalars) + // For these versions, we'll hash element by element. +#if UNITY_2020_1_OR_NEWER + m_Hash.Append(values, 0, count); +#else + for (var i = 0; i < count; i++) + { + var tempHash = new Hash128(); + HashUtilities.ComputeHash128(ref values[i], ref tempHash); + HashUtilities.AppendHash(ref tempHash, ref m_Hash); + } +#endif + } + + public void Append(string value) + { + var tempHash = Hash128.Compute(value); + HashUtilities.AppendHash(ref tempHash, ref m_Hash); + } + + public override string ToString() + { + return m_Hash.ToString(); + } + } + + /// + /// Compute a hash of the model's layer data and return it as a string. + /// A subset of the layer weights are used for performance. + /// This increases the chance of a collision, but this should still be extremely rare. + /// + /// + /// + static string GetModelHash(Model barracudaModel) + { + var hash = new MLAgentsHash128(); + + // Limit the max number of float bytes that we hash for performance. + const int kMaxFloats = 256; + + foreach (var layer in barracudaModel.layers) + { + hash.Append(layer.name); + var numFloatsToHash = Mathf.Min(layer.weights.Length, kMaxFloats); + hash.Append(layer.weights, numFloatsToHash); + } + + return hash.ToString(); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs.meta b/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e81b2ecbb6da4cbaeb14da154b502921669e704c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ac4c40c2394d481ebf602caa600a32f3 +timeCreated: 1604359787 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs new file mode 100644 index 0000000000000000000000000000000000000000..08c205bfc6b8c5f4059220e983f49438568ed11c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs @@ -0,0 +1,276 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using UnityEngine; +#if MLA_UNITY_ANALYTICS_MODULE + +#if ENABLE_CLOUD_SERVICES_ANALYTICS +using UnityEngine.Analytics; +#endif + +#if UNITY_EDITOR +using UnityEditor.Analytics; +#endif +#endif + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Unity.MLAgents.Analytics +{ + internal static class TrainingAnalytics + { + const string k_VendorKey = "unity.ml-agents"; + const string k_TrainingEnvironmentInitializedEventName = "ml_agents_training_environment_initialized"; + const string k_TrainingBehaviorInitializedEventName = "ml_agents_training_behavior_initialized"; + const string k_RemotePolicyInitializedEventName = "ml_agents_remote_policy_initialized"; + + private static readonly string[] s_EventNames = + { + k_TrainingEnvironmentInitializedEventName, + k_TrainingBehaviorInitializedEventName, + k_RemotePolicyInitializedEventName + }; + + /// + /// Hourly limit for this event name + /// + const int k_MaxEventsPerHour = 1000; + + /// + /// Maximum number of items in this event. + /// + const int k_MaxNumberOfElements = 1000; + + private static bool s_SentEnvironmentInitialized; + +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + /// + /// Whether or not we've registered this particular event yet + /// + static bool s_EventsRegistered; + + /// + /// Behaviors that we've already sent events for. + /// + private static HashSet s_SentRemotePolicyInitialized; + private static HashSet s_SentTrainingBehaviorInitialized; +#endif + + private static Guid s_TrainingSessionGuid; + + // These are set when the RpcCommunicator connects + private static string s_TrainerPackageVersion = ""; + private static string s_TrainerCommunicationVersion = ""; + + internal static bool EnableAnalytics() + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + if (s_EventsRegistered) + { + return true; + } + foreach (var eventName in s_EventNames) + { + AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(eventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey); + if (result != AnalyticsResult.Ok) + { + return false; + } + } + s_EventsRegistered = true; + + if (s_SentRemotePolicyInitialized == null) + { + s_SentRemotePolicyInitialized = new HashSet(); + s_SentTrainingBehaviorInitialized = new HashSet(); + s_TrainingSessionGuid = Guid.NewGuid(); + } + + return s_EventsRegistered; +#else + return false; +#endif // MLA_UNITY_ANALYTICS_MODULE + } + + /// + /// Cache information about the trainer when it becomes available in the RpcCommunicator. + /// + /// + /// + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + public static void SetTrainerInformation(string packageVersion, string communicationVersion) + { + s_TrainerPackageVersion = packageVersion; + s_TrainerCommunicationVersion = communicationVersion; + } + + public static bool IsAnalyticsEnabled() + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + return EditorAnalytics.enabled; +#else + return false; +#endif + } + + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + public static void TrainingEnvironmentInitialized(TrainingEnvironmentInitializedEvent tbiEvent) + { + if (!IsAnalyticsEnabled()) + return; + + if (!EnableAnalytics()) + return; + + if (s_SentEnvironmentInitialized) + { + // We already sent an TrainingEnvironmentInitializedEvent. Exit so we don't resend. + return; + } + + s_SentEnvironmentInitialized = true; + tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); + + // Note - to debug, use JsonUtility.ToJson on the event. + // Debug.Log( + // $"Would send event {k_TrainingEnvironmentInitializedEventName} with body {JsonUtility.ToJson(tbiEvent, true)}" + // ); +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + if (AnalyticsUtils.s_SendEditorAnalytics) + { + EditorAnalytics.SendEventWithLimit(k_TrainingEnvironmentInitializedEventName, tbiEvent); + } +#endif + } + + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + public static void RemotePolicyInitialized( + string fullyQualifiedBehaviorName, + IList sensors, + ActionSpec actionSpec, + IList actuators + ) + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + if (!IsAnalyticsEnabled()) + return; + + if (!EnableAnalytics()) + return; + + // Extract base behavior name (no team ID) + var behaviorName = ParseBehaviorName(fullyQualifiedBehaviorName); + var added = s_SentRemotePolicyInitialized.Add(behaviorName); + + if (!added) + { + // We previously added this model. Exit so we don't resend. + return; + } + + var data = GetEventForRemotePolicy(behaviorName, sensors, actionSpec, actuators); + // Note - to debug, use JsonUtility.ToJson on the event. + // Debug.Log( + // $"Would send event {k_RemotePolicyInitializedEventName} with body {JsonUtility.ToJson(data, true)}" + // ); + if (AnalyticsUtils.s_SendEditorAnalytics) + { + EditorAnalytics.SendEventWithLimit(k_RemotePolicyInitializedEventName, data); + } +#endif + } + + internal static string ParseBehaviorName(string fullyQualifiedBehaviorName) + { + var lastQuestionIndex = fullyQualifiedBehaviorName.LastIndexOf("?"); + if (lastQuestionIndex < 0) + { + // Nothing to remove + return fullyQualifiedBehaviorName; + } + + return fullyQualifiedBehaviorName.Substring(0, lastQuestionIndex); + } + + internal static TrainingBehaviorInitializedEvent SanitizeTrainingBehaviorInitializedEvent(TrainingBehaviorInitializedEvent tbiEvent) + { + // Hash the behavior name if the message version is from an older version of ml-agents that doesn't do trainer-side hashing. + // We'll also, for extra safety, verify that the BehaviorName is the size of the expected SHA256 hash. + // Context: The config field was added at the same time as trainer side hashing, so messages including it should already be hashed. + if (tbiEvent.Config.Length == 0 || tbiEvent.BehaviorName.Length != 64) + { + tbiEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, tbiEvent.BehaviorName); + } + + return tbiEvent; + } + + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + public static void TrainingBehaviorInitialized(TrainingBehaviorInitializedEvent rawTbiEvent) + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS + if (!IsAnalyticsEnabled()) + return; + + if (!EnableAnalytics()) + return; + + var tbiEvent = SanitizeTrainingBehaviorInitializedEvent(rawTbiEvent); + var behaviorName = tbiEvent.BehaviorName; + var added = s_SentTrainingBehaviorInitialized.Add(behaviorName); + + if (!added) + { + // We previously added this model. Exit so we don't resend. + return; + } + + tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); + + // Note - to debug, use JsonUtility.ToJson on the event. + // Debug.Log( + // $"Would send event {k_TrainingBehaviorInitializedEventName} with body {JsonUtility.ToJson(tbiEvent, true)}" + // ); + if (AnalyticsUtils.s_SendEditorAnalytics) + { + EditorAnalytics.SendEventWithLimit(k_TrainingBehaviorInitializedEventName, tbiEvent); + } +#endif + } + + internal static RemotePolicyInitializedEvent GetEventForRemotePolicy( + string behaviorName, + IList sensors, + ActionSpec actionSpec, + IList actuators + ) + { + var remotePolicyEvent = new RemotePolicyInitializedEvent(); + + // Hash the behavior name so that there's no concern about PII or "secret" data being leaked. + remotePolicyEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, behaviorName); + + remotePolicyEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); + remotePolicyEvent.ActionSpec = EventActionSpec.FromActionSpec(actionSpec); + remotePolicyEvent.ObservationSpecs = new List(sensors.Count); + foreach (var sensor in sensors) + { + remotePolicyEvent.ObservationSpecs.Add(EventObservationSpec.FromSensor(sensor)); + } + + remotePolicyEvent.ActuatorInfos = new List(actuators.Count); + foreach (var actuator in actuators) + { + remotePolicyEvent.ActuatorInfos.Add(EventActuatorInfo.FromActuator(actuator)); + } + + remotePolicyEvent.MLAgentsEnvsVersion = s_TrainerPackageVersion; + remotePolicyEvent.TrainerCommunicationVersion = s_TrainerCommunicationVersion; + return remotePolicyEvent; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs.meta b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9109c265a2fc55fcfe025bbc9e44578a37301533 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Analytics/TrainingAnalytics.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5ad0bc6b45614bb7929d25dd59d5ac38 +timeCreated: 1608168600 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Areas.meta b/com.unity.ml-agents/Runtime/Areas.meta new file mode 100644 index 0000000000000000000000000000000000000000..d00b0cf67c53203f2e475fa456af912f30233f0f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Areas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4774a04ed09a1405cb957aace235adcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Areas/TrainingAreaReplicator.cs b/com.unity.ml-agents/Runtime/Areas/TrainingAreaReplicator.cs new file mode 100644 index 0000000000000000000000000000000000000000..c47383b4a3052cbc9d2ab7aadcb9e1413c0fd8c2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Areas/TrainingAreaReplicator.cs @@ -0,0 +1,126 @@ +using System; +using Unity.Mathematics; +using UnityEngine; + +namespace Unity.MLAgents.Areas +{ + /// + /// The Training Ares Replicator allows for a training area object group to be replicated dynamically during runtime. + /// + [DefaultExecutionOrder(-5)] + public class TrainingAreaReplicator : MonoBehaviour + { + /// + /// The base training area to be replicated. + /// + public GameObject baseArea; + + /// + /// The number of training areas to replicate. + /// + public int numAreas = 1; + + /// + /// The separation between each training area. + /// + public float separation = 10f; + + /// + /// Whether to replicate in the editor or in a build only. Default = true + /// + public bool buildOnly = true; + + int3 m_GridSize = new(1, 1, 1); + int m_AreaCount; + string m_TrainingAreaName; + + /// + /// The size of the computed grid to pack the training areas into. + /// + public int3 GridSize => m_GridSize; + + /// + /// The name of the training area. + /// + public string TrainingAreaName => m_TrainingAreaName; + + /// + /// Called before the simulation begins to computed the grid size for distributing + /// the replicated training areas and set the area name. + /// + public void Awake() + { + // Computes the Grid Size on Awake + ComputeGridSize(); + // Sets the TrainingArea name to the name of the base area. + m_TrainingAreaName = baseArea.name; + } + + /// + /// Called after Awake and before the simulation begins and adds the training areas before + /// the Academy begins. + /// + public void OnEnable() + { + // Adds the training as replicas during OnEnable to ensure they are added before the Academy begins its work. + if (buildOnly) + { +#if UNITY_STANDALONE && !UNITY_EDITOR + AddEnvironments(); +#endif + return; + } + AddEnvironments(); + } + + /// + /// Computes the Grid Size for replicating the training area. + /// + void ComputeGridSize() + { + // check if running inference, if so, use the num areas set through the component, + // otherwise, pull it from the academy + if (Academy.Instance.Communicator != null) + numAreas = Academy.Instance.NumAreas; + + var rootNumAreas = Mathf.Pow(numAreas, 1.0f / 3.0f); + m_GridSize.x = Mathf.CeilToInt(rootNumAreas); + m_GridSize.y = Mathf.CeilToInt(rootNumAreas); + var zSize = Mathf.CeilToInt((float)numAreas / (m_GridSize.x * m_GridSize.y)); + m_GridSize.z = zSize == 0 ? 1 : zSize; + } + + /// + /// Adds replicas of the training area to the scene. + /// + /// + void AddEnvironments() + { + if (numAreas > m_GridSize.x * m_GridSize.y * m_GridSize.z) + { + throw new UnityAgentsException("The number of training areas that you have specified exceeds the size of the grid."); + } + + for (int z = 0; z < m_GridSize.z; z++) + { + for (int y = 0; y < m_GridSize.y; y++) + { + for (int x = 0; x < m_GridSize.x; x++) + { + if (m_AreaCount == 0) + { + // Skip this first area since it already exists. + m_AreaCount = 1; + } + else if (m_AreaCount < numAreas) + { + m_AreaCount++; + var area = Instantiate(baseArea, new Vector3(x * separation, y * separation, z * separation), Quaternion.identity); + area.name = m_TrainingAreaName; + } + } + } + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Areas/TrainingAreaReplicator.cs.meta b/com.unity.ml-agents/Runtime/Areas/TrainingAreaReplicator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..84ac36d7899a9a2ed915c1cffe163525142d629e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Areas/TrainingAreaReplicator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fc26c3bda6fe4937b2264ffe43190b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/AssemblyInfo.cs b/com.unity.ml-agents/Runtime/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..5bb925003f7e84c190b0023577ff67807f3c46d2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/AssemblyInfo.cs @@ -0,0 +1,13 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Sensor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Utils.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.Input")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Pro")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Pro.Tests")] diff --git a/com.unity.ml-agents/Runtime/AssemblyInfo.cs.meta b/com.unity.ml-agents/Runtime/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1672ad458e41fd3d5819426205e294f6b74660b2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b433ecadea36c4af9a3dc65e359a3ca0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Communicator.meta b/com.unity.ml-agents/Runtime/Communicator.meta new file mode 100644 index 0000000000000000000000000000000000000000..dc3a8bac9bc79d2cbe5e01e0ff68b84939ecbf88 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 432bb08962b3944c6964c0db6af43669 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Communicator/CommunicatorFactory.cs b/com.unity.ml-agents/Runtime/Communicator/CommunicatorFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..02d1e4efbd92eda73a48d7b69f91f8f2612b31b7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/CommunicatorFactory.cs @@ -0,0 +1,43 @@ +using System; + +namespace Unity.MLAgents +{ + /// + /// Factory class for an ICommunicator instance. This is used to the at startup. + /// By default, on desktop platforms, an ICommunicator will be created and attempt to connect + /// to a trainer. This behavior can be prevented by setting to false + /// *before* the is initialized. + /// + public static class CommunicatorFactory + { + static Func s_Creator; + static bool s_Enabled = true; + + /// + /// Whether or not an ICommunicator instance will be created when the is initialized. + /// Changing this has no effect after the has already been initialized. + /// + public static bool Enabled + { + get => s_Enabled; + set => s_Enabled = value; + } + + public static bool CommunicatorRegistered => s_Creator != null; + + internal static ICommunicator Create() + { + return s_Enabled ? s_Creator() : null; + } + + public static void Register(Func creator) where T : ICommunicator + { + s_Creator = () => creator(); + } + + public static void ClearCreator() + { + s_Creator = null; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Communicator/CommunicatorFactory.cs.meta b/com.unity.ml-agents/Runtime/Communicator/CommunicatorFactory.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1d208003e3ee4e139b0c52a63d3bc05e65376e20 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/CommunicatorFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0b604cddc07e4484a2cdaba630a971ea +timeCreated: 1613617949 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs new file mode 100644 index 0000000000000000000000000000000000000000..e5a97cd167c984024b232e631d7a20d0103d07dc --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs @@ -0,0 +1,541 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Google.Protobuf; +using Unity.MLAgents.CommunicatorObjects; +using UnityEngine; +using System.Runtime.CompilerServices; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Demonstrations; +using Unity.MLAgents.Policies; + +using Unity.MLAgents.Analytics; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Utils.Tests")] + +namespace Unity.MLAgents +{ + internal static class GrpcExtensions + { + #region AgentInfo + /// + /// Static flag to make sure that we only fire the warning once. + /// + private static bool s_HaveWarnedTrainerCapabilitiesAgentGroup; + + /// + /// Converts a AgentInfo to a protobuf generated AgentInfoActionPairProto + /// + /// The protobuf version of the AgentInfoActionPairProto. + public static AgentInfoActionPairProto ToInfoActionPairProto(this AgentInfo ai) + { + var agentInfoProto = ai.ToAgentInfoProto(); + + var agentActionProto = new AgentActionProto(); + + if (!ai.storedActions.IsEmpty()) + { + if (!ai.storedActions.ContinuousActions.IsEmpty()) + { + agentActionProto.ContinuousActions.AddRange(ai.storedActions.ContinuousActions.Array); + } + if (!ai.storedActions.DiscreteActions.IsEmpty()) + { + agentActionProto.DiscreteActions.AddRange(ai.storedActions.DiscreteActions.Array); + } + } + + return new AgentInfoActionPairProto + { + AgentInfo = agentInfoProto, + ActionInfo = agentActionProto + }; + } + + /// + /// Converts a AgentInfo to a protobuf generated AgentInfoProto + /// + /// The protobuf version of the AgentInfo. + public static AgentInfoProto ToAgentInfoProto(this AgentInfo ai) + { + if (ai.groupId > 0) + { + var trainerCanHandle = Academy.Instance.TrainerCapabilities == null || Academy.Instance.TrainerCapabilities.MultiAgentGroups; + if (!trainerCanHandle) + { + if (!s_HaveWarnedTrainerCapabilitiesAgentGroup) + { + Debug.LogWarning( + $"Attached trainer doesn't support Multi Agent Groups; group rewards will be ignored." + + "Please find the versions that work best together from our release page: " + + "https://github.com/Unity-Technologies/ml-agents/releases" + ); + s_HaveWarnedTrainerCapabilitiesAgentGroup = true; + } + } + } + var agentInfoProto = new AgentInfoProto + { + Reward = ai.reward, + GroupReward = ai.groupReward, + MaxStepReached = ai.maxStepReached, + Done = ai.done, + Id = ai.episodeId, + GroupId = ai.groupId, + }; + + if (ai.discreteActionMasks != null) + { + agentInfoProto.ActionMask.AddRange(ai.discreteActionMasks); + } + + return agentInfoProto; + } + + /// + /// Get summaries for the observations in the AgentInfo part of the AgentInfoActionPairProto. + /// + /// + /// + public static List GetObservationSummaries(this AgentInfoActionPairProto infoActionPair) + { + List summariesOut = new List(); + var agentInfo = infoActionPair.AgentInfo; + foreach (var obs in agentInfo.Observations) + { + var summary = new ObservationSummary(); + summary.shape = obs.Shape.ToArray(); + summariesOut.Add(summary); + } + + return summariesOut; + } + + #endregion + + #region BrainParameters + /// + /// Converts a BrainParameters into to a BrainParametersProto so it can be sent. + /// + /// The BrainInfoProto generated. + /// The instance of BrainParameter to extend. + /// The name of the brain. + /// Whether or not the Brain is training. + public static BrainParametersProto ToProto(this BrainParameters bp, string name, bool isTraining) + { + // Disable deprecation warnings so we can set legacy fields +#pragma warning disable CS0618 + var brainParametersProto = new BrainParametersProto + { + VectorActionSpaceTypeDeprecated = (SpaceTypeProto)bp.VectorActionSpaceType, + BrainName = name, + IsTraining = isTraining, + ActionSpec = ToActionSpecProto(bp.ActionSpec), + }; + if (bp.VectorActionSize != null) + { + brainParametersProto.VectorActionSizeDeprecated.AddRange(bp.VectorActionSize); + } + if (bp.VectorActionDescriptions != null) + { + brainParametersProto.VectorActionDescriptionsDeprecated.AddRange(bp.VectorActionDescriptions); + } +#pragma warning restore CS0618 + return brainParametersProto; + } + + /// + /// Converts an ActionSpec into to a Protobuf BrainInfoProto so it can be sent. + /// + /// The BrainInfoProto generated. + /// Description of the actions for the Agent. + /// The name of the brain. + /// Whether or not the Brain is training. + public static BrainParametersProto ToBrainParametersProto(this ActionSpec actionSpec, string name, bool isTraining) + { + var brainParametersProto = new BrainParametersProto + { + BrainName = name, + IsTraining = isTraining, + ActionSpec = ToActionSpecProto(actionSpec), + }; + + var supportHybrid = Academy.Instance.TrainerCapabilities == null || Academy.Instance.TrainerCapabilities.HybridActions; + if (!supportHybrid) + { + actionSpec.CheckAllContinuousOrDiscrete(); + if (actionSpec.NumContinuousActions > 0) + { + brainParametersProto.VectorActionSizeDeprecated.Add(actionSpec.NumContinuousActions); + brainParametersProto.VectorActionSpaceTypeDeprecated = SpaceTypeProto.Continuous; + } + else if (actionSpec.NumDiscreteActions > 0) + { + brainParametersProto.VectorActionSizeDeprecated.AddRange(actionSpec.BranchSizes); + brainParametersProto.VectorActionSpaceTypeDeprecated = SpaceTypeProto.Discrete; + } + } + + // TODO handle ActionDescriptions? + return brainParametersProto; + } + + /// + /// Convert a BrainParametersProto to a BrainParameters struct. + /// + /// An instance of a brain parameters protobuf object. + /// A BrainParameters struct. + public static BrainParameters ToBrainParameters(this BrainParametersProto bpp) + { + ActionSpec actionSpec; + if (bpp.ActionSpec == null) + { + // Disable deprecation warnings so we can set legacy fields +#pragma warning disable CS0618 + var spaceType = (SpaceType)bpp.VectorActionSpaceTypeDeprecated; + if (spaceType == SpaceType.Continuous) + { + actionSpec = ActionSpec.MakeContinuous(bpp.VectorActionSizeDeprecated.ToArray()[0]); + } + else + { + actionSpec = ActionSpec.MakeDiscrete(bpp.VectorActionSizeDeprecated.ToArray()); + } +#pragma warning restore CS0618 + } + else + { + actionSpec = ToActionSpec(bpp.ActionSpec); + } + var bp = new BrainParameters + { + VectorActionDescriptions = bpp.VectorActionDescriptionsDeprecated.ToArray(), + ActionSpec = actionSpec, + }; + return bp; + } + + /// + /// Convert a ActionSpecProto to a ActionSpec struct. + /// + /// An instance of an action spec protobuf object. + /// An ActionSpec struct. + public static ActionSpec ToActionSpec(this ActionSpecProto actionSpecProto) + { + var actionSpec = new ActionSpec(actionSpecProto.NumContinuousActions); + if (actionSpecProto.DiscreteBranchSizes != null) + { + actionSpec.BranchSizes = actionSpecProto.DiscreteBranchSizes.ToArray(); + } + return actionSpec; + } + + /// + /// Convert a ActionSpec struct to a ActionSpecProto. + /// + /// An instance of an action spec struct. + /// An ActionSpecProto. + public static ActionSpecProto ToActionSpecProto(this ActionSpec actionSpec) + { + var actionSpecProto = new ActionSpecProto + { + NumContinuousActions = actionSpec.NumContinuousActions, + NumDiscreteActions = actionSpec.NumDiscreteActions, + }; + if (actionSpec.BranchSizes != null) + { + actionSpecProto.DiscreteBranchSizes.AddRange(actionSpec.BranchSizes); + } + return actionSpecProto; + } + + #endregion + + #region DemonstrationMetaData + /// + /// Convert metadata object to proto object. + /// + public static DemonstrationMetaProto ToProto(this DemonstrationMetaData dm) + { + var demonstrationName = dm.demonstrationName ?? ""; + var demoProto = new DemonstrationMetaProto + { + ApiVersion = DemonstrationMetaData.ApiVersion, + MeanReward = dm.meanReward, + NumberSteps = dm.numberSteps, + NumberEpisodes = dm.numberEpisodes, + DemonstrationName = demonstrationName + }; + return demoProto; + } + + /// + /// Initialize metadata values based on proto object. + /// + public static DemonstrationMetaData ToDemonstrationMetaData(this DemonstrationMetaProto demoProto) + { + var dm = new DemonstrationMetaData + { + numberEpisodes = demoProto.NumberEpisodes, + numberSteps = demoProto.NumberSteps, + meanReward = demoProto.MeanReward, + demonstrationName = demoProto.DemonstrationName + }; + if (demoProto.ApiVersion != DemonstrationMetaData.ApiVersion) + { + throw new Exception("API versions of demonstration are incompatible."); + } + return dm; + } + + #endregion + + public static UnityRLInitParameters ToUnityRLInitParameters(this UnityRLInitializationInputProto inputProto) + { + return new UnityRLInitParameters + { + seed = inputProto.Seed, + numAreas = inputProto.NumAreas, + pythonLibraryVersion = inputProto.PackageVersion, + pythonCommunicationVersion = inputProto.CommunicationVersion, + TrainerCapabilities = inputProto.Capabilities.ToRLCapabilities() + }; + } + + #region AgentAction + public static List ToAgentActionList(this UnityRLInputProto.Types.ListAgentActionProto proto) + { + var agentActions = new List(proto.Value.Count); + foreach (var ap in proto.Value) + { + agentActions.Add(ap.ToActionBuffers()); + } + return agentActions; + } + + public static ActionBuffers ToActionBuffers(this AgentActionProto proto) + { + return new ActionBuffers(proto.ContinuousActions.ToArray(), proto.DiscreteActions.ToArray()); + } + + #endregion + + #region Observations + /// + /// Static flag to make sure that we only fire the warning once. + /// + private static bool s_HaveWarnedTrainerCapabilitiesMultiPng; + private static bool s_HaveWarnedTrainerCapabilitiesMapping; + + /// + /// Generate an ObservationProto for the sensor using the provided ObservationWriter. + /// This is equivalent to producing an Observation and calling Observation.ToProto(), + /// but avoid some intermediate memory allocations. + /// + /// + /// + /// + public static ObservationProto GetObservationProto(this ISensor sensor, ObservationWriter observationWriter) + { + var obsSpec = sensor.GetObservationSpec(); + var shape = obsSpec.Shape; + ObservationProto observationProto = null; + var compressionSpec = sensor.GetCompressionSpec(); + var compressionType = compressionSpec.SensorCompressionType; + // Check capabilities if we need to concatenate PNGs + if (compressionType == SensorCompressionType.PNG && shape.Length == 3 && shape[2] > 3) + { + var trainerCanHandle = Academy.Instance.TrainerCapabilities == null || Academy.Instance.TrainerCapabilities.ConcatenatedPngObservations; + if (!trainerCanHandle) + { + if (!s_HaveWarnedTrainerCapabilitiesMultiPng) + { + Debug.LogWarning( + $"Attached trainer doesn't support multiple PNGs. Switching to uncompressed observations for sensor {sensor.GetName()}. " + + "Please find the versions that work best together from our release page: " + + "https://github.com/Unity-Technologies/ml-agents/releases" + ); + s_HaveWarnedTrainerCapabilitiesMultiPng = true; + } + compressionType = SensorCompressionType.None; + } + } + // Check capabilities if we need mapping for compressed observations + if (compressionType != SensorCompressionType.None && shape.Length == 3 && shape[2] > 3) + { + var trainerCanHandleMapping = Academy.Instance.TrainerCapabilities == null || Academy.Instance.TrainerCapabilities.CompressedChannelMapping; + var isTrivialMapping = compressionSpec.IsTrivialMapping(); + if (!trainerCanHandleMapping && !isTrivialMapping) + { + if (!s_HaveWarnedTrainerCapabilitiesMapping) + { + Debug.LogWarning( + $"The sensor {sensor.GetName()} is using non-trivial mapping and " + + "the attached trainer doesn't support compression mapping. " + + "Switching to uncompressed observations. " + + "Please find the versions that work best together from our release page: " + + "https://github.com/Unity-Technologies/ml-agents/releases" + ); + s_HaveWarnedTrainerCapabilitiesMapping = true; + } + compressionType = SensorCompressionType.None; + } + } + + if (compressionType == SensorCompressionType.None) + { + var numFloats = sensor.ObservationSize(); + var floatDataProto = new ObservationProto.Types.FloatData(); + // Resize the float array + // TODO upgrade protobuf versions so that we can set the Capacity directly - see https://github.com/protocolbuffers/protobuf/pull/6530 + for (var i = 0; i < numFloats; i++) + { + floatDataProto.Data.Add(0.0f); + } + + observationWriter.SetTarget(floatDataProto.Data, sensor.GetObservationSpec(), 0); + sensor.Write(observationWriter); + + observationProto = new ObservationProto + { + FloatData = floatDataProto, + CompressionType = (CompressionTypeProto)SensorCompressionType.None, + }; + } + else + { + var compressedObs = sensor.GetCompressedObservation(); + if (compressedObs == null) + { + throw new UnityAgentsException( + $"GetCompressedObservation() returned null data for sensor named {sensor.GetName()}. " + + "You must return a byte[]. If you don't want to use compressed observations, " + + "return CompressionSpec.Default() from GetCompressionSpec()." + ); + } + observationProto = new ObservationProto + { + CompressedData = ByteString.CopyFrom(compressedObs), + CompressionType = (CompressionTypeProto)sensor.GetCompressionSpec().SensorCompressionType, + }; + if (compressionSpec.CompressedChannelMapping != null) + { + observationProto.CompressedChannelMapping.AddRange(compressionSpec.CompressedChannelMapping); + } + } + + // Add the dimension properties to the observationProto + var dimensionProperties = obsSpec.DimensionProperties; + for (int i = 0; i < dimensionProperties.Length; i++) + { + observationProto.DimensionProperties.Add((int)dimensionProperties[i]); + } + + // Checking trainer compatibility with variable length observations + if (dimensionProperties == new InplaceArray(DimensionProperty.VariableSize, DimensionProperty.None)) + { + var trainerCanHandleVarLenObs = Academy.Instance.TrainerCapabilities == null || Academy.Instance.TrainerCapabilities.VariableLengthObservation; + if (!trainerCanHandleVarLenObs) + { + throw new UnityAgentsException("Variable Length Observations are not supported by the trainer"); + } + } + + for (var i = 0; i < shape.Length; i++) + { + observationProto.Shape.Add(shape[i]); + } + + var sensorName = sensor.GetName(); + if (!string.IsNullOrEmpty(sensorName)) + { + observationProto.Name = sensorName; + } + + observationProto.ObservationType = (ObservationTypeProto)obsSpec.ObservationType; + return observationProto; + } + + #endregion + + public static UnityRLCapabilities ToRLCapabilities(this UnityRLCapabilitiesProto proto) + { + return new UnityRLCapabilities + { + BaseRLCapabilities = proto.BaseRLCapabilities, + ConcatenatedPngObservations = proto.ConcatenatedPngObservations, + CompressedChannelMapping = proto.CompressedChannelMapping, + HybridActions = proto.HybridActions, + TrainingAnalytics = proto.TrainingAnalytics, + VariableLengthObservation = proto.VariableLengthObservation, + MultiAgentGroups = proto.MultiAgentGroups, + }; + } + + public static UnityRLCapabilitiesProto ToProto(this UnityRLCapabilities rlCaps) + { + return new UnityRLCapabilitiesProto + { + BaseRLCapabilities = rlCaps.BaseRLCapabilities, + ConcatenatedPngObservations = rlCaps.ConcatenatedPngObservations, + CompressedChannelMapping = rlCaps.CompressedChannelMapping, + HybridActions = rlCaps.HybridActions, + TrainingAnalytics = rlCaps.TrainingAnalytics, + VariableLengthObservation = rlCaps.VariableLengthObservation, + MultiAgentGroups = rlCaps.MultiAgentGroups, + }; + } + + #region Analytics + internal static TrainingEnvironmentInitializedEvent ToTrainingEnvironmentInitializedEvent( + this TrainingEnvironmentInitialized inputProto) + { + return new TrainingEnvironmentInitializedEvent + { + TrainerPythonVersion = inputProto.PythonVersion, + MLAgentsVersion = inputProto.MlagentsVersion, + MLAgentsEnvsVersion = inputProto.MlagentsEnvsVersion, + TorchVersion = inputProto.TorchVersion, + TorchDeviceType = inputProto.TorchDeviceType, + NumEnvironments = inputProto.NumEnvs, + NumEnvironmentParameters = inputProto.NumEnvironmentParameters, + RunOptions = inputProto.RunOptions, + }; + } + + internal static TrainingBehaviorInitializedEvent ToTrainingBehaviorInitializedEvent( + this TrainingBehaviorInitialized inputProto) + { + RewardSignals rewardSignals = 0; + rewardSignals |= inputProto.ExtrinsicRewardEnabled ? RewardSignals.Extrinsic : 0; + rewardSignals |= inputProto.GailRewardEnabled ? RewardSignals.Gail : 0; + rewardSignals |= inputProto.CuriosityRewardEnabled ? RewardSignals.Curiosity : 0; + rewardSignals |= inputProto.RndRewardEnabled ? RewardSignals.Rnd : 0; + + TrainingFeatures trainingFeatures = 0; + trainingFeatures |= inputProto.BehavioralCloningEnabled ? TrainingFeatures.BehavioralCloning : 0; + trainingFeatures |= inputProto.RecurrentEnabled ? TrainingFeatures.Recurrent : 0; + trainingFeatures |= inputProto.TrainerThreaded ? TrainingFeatures.Threaded : 0; + trainingFeatures |= inputProto.SelfPlayEnabled ? TrainingFeatures.SelfPlay : 0; + trainingFeatures |= inputProto.CurriculumEnabled ? TrainingFeatures.Curriculum : 0; + + + return new TrainingBehaviorInitializedEvent + { + BehaviorName = inputProto.BehaviorName, + TrainerType = inputProto.TrainerType, + RewardSignalFlags = rewardSignals, + TrainingFeatureFlags = trainingFeatures, + VisualEncoder = inputProto.VisualEncoder, + NumNetworkLayers = inputProto.NumNetworkLayers, + NumNetworkHiddenUnits = inputProto.NumNetworkHiddenUnits, + Config = inputProto.Config, + }; + } + + #endregion + } +} diff --git a/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs.meta b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..43d71078970f01ae128de84a116e23ab8be12032 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 02e8742d8a124607bef3b5ff8b9dd3d0 +timeCreated: 1569444771 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs b/com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs new file mode 100644 index 0000000000000000000000000000000000000000..2036a2aa284447ff8c2e98ecec56936a06017802 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs @@ -0,0 +1,173 @@ +using System; +using System.Collections.Generic; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents +{ + public struct CommunicatorInitParameters + { + /// + /// Port to listen for connections on. + /// + public int port; + + /// + /// The name of the environment. + /// + public string name; + + /// + /// The version of the Unity SDK. + /// + public string unityPackageVersion; + + /// + /// The version of the communication API. + /// + public string unityCommunicationVersion; + + /// + /// The RL capabilities of the C# codebase. + /// + public UnityRLCapabilities CSharpCapabilities; + } + public struct UnityRLInitParameters + { + /// + /// A random number generator (RNG) seed sent from the python process to Unity. + /// + public int seed; + + /// + /// The number of areas to replicate if Training Area Replication is used in the scene. + /// + public int numAreas; + + /// + /// The library version of the python process. + /// + public string pythonLibraryVersion; + + /// + /// The version of the communication API that python is using. + /// + public string pythonCommunicationVersion; + + /// + /// The RL capabilities of the Trainer codebase. + /// + public UnityRLCapabilities TrainerCapabilities; + } + internal struct UnityRLInputParameters + { + /// + /// Boolean sent back from python to indicate whether or not training is happening. + /// + public bool isTraining; + } + + /// + /// Delegate for handling quit events sent back from the communicator. + /// + public delegate void QuitCommandHandler(); + + /// + /// Delegate for handling reset parameter updates sent from the communicator. + /// + public delegate void ResetCommandHandler(); + + /// + /// Delegate to handle UnityRLInputParameters updates from the communicator. + /// + /// + internal delegate void RLInputReceivedHandler(UnityRLInputParameters inputParams); + + /** + This is the interface of the Communicators. + This does not need to be modified nor implemented to create a Unity environment. + + When the Unity Communicator is initialized, it will wait for the External Communicator + to be initialized as well. The two communicators will then exchange their first messages + that will usually contain information for initialization (information that does not need + to be resent at each new exchange). + + By convention a Unity input is from External to Unity and a Unity output is from Unity to + External. Inputs and outputs are relative to Unity. + + By convention, when the Unity Communicator and External Communicator call exchange, the + exchange is NOT simultaneous but sequential. This means that when a side of the + communication calls exchange, the other will receive the result of its previous + exchange call. + This is what happens when A calls exchange a single time: + A sends data_1 to B -> B receives data_1 -> B generates and sends data_2 -> A receives data_2 + When A calls exchange, it sends data_1 and receives data_2 + + Since the messages are sent back and forth with exchange and simultaneously when calling + initialize, External sends two messages at initialization. + + The structure of the messages is as follows: + UnityMessage + ...Header + ...UnityOutput + ......UnityRLOutput + ......UnityRLInitializationOutput + ...UnityInput + ......UnityRLInput + ......UnityRLInitializationInput + + UnityOutput and UnityInput can be extended to provide functionalities beyond RL + UnityRLOutput and UnityRLInput can be extended to provide new RL functionalities + */ + public interface ICommunicator : IDisposable + { + /// + /// Quit was received by the communicator. + /// + event QuitCommandHandler QuitCommandReceived; + + /// + /// Reset command sent back from the communicator. + /// + event ResetCommandHandler ResetCommandReceived; + + /// + /// Sends the academy parameters through the Communicator. + /// Is used by the academy to send the AcademyParameters to the communicator. + /// + /// Whether the connection was successful. + /// The Unity Initialization Parameters to be sent. + /// The External Initialization Parameters received + bool Initialize(CommunicatorInitParameters initParameters, out UnityRLInitParameters initParametersOut); + + /// + /// Registers a new Brain to the Communicator. + /// + /// The name or key uniquely identifying the Brain. + /// Description of the actions for the Agent. + void SubscribeBrain(string name, ActionSpec actionSpec); + + /// + /// Sends the observations of one Agent. + /// + /// Batch Key. + /// Agent info. + /// The list of ISensors of the Agent. + void PutObservations(string brainKey, AgentInfo info, List sensors); + + /// + /// Signals the ICommunicator that the Agents are now ready to receive their action + /// and that if the communicator has not yet received an action for one of the Agents + /// it needs to get one at this point. + /// + void DecideBatch(); + + /// + /// Gets the AgentActions based on the batching key. + /// + /// A key to identify which behavior actions to get. + /// A key to identify which Agent actions to get. + /// + ActionBuffers GetActions(string key, int agentId); + } +} diff --git a/com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs.meta b/com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b37ca0a83d796bdbe7ec254fb7e85850e2821b9f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53977f05e5684d4a9e2ef86f225934a2 +timeCreated: 1568395551 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs new file mode 100644 index 0000000000000000000000000000000000000000..c1427715bc3c3a42b0c192e46748f8fb1d3bb193 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs @@ -0,0 +1,607 @@ +#if UNITY_EDITOR || UNITY_STANDALONE +#define MLA_SUPPORTED_TRAINING_PLATFORM +#endif + +#if MLA_SUPPORTED_TRAINING_PLATFORM +using Grpc.Core; +#if UNITY_EDITOR +using UnityEditor; +#endif +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.CommunicatorObjects; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.SideChannels; +using Google.Protobuf; + +using Unity.MLAgents.Analytics; + +namespace Unity.MLAgents +{ + /// Responsible for communication with External using gRPC. + public class RpcCommunicator : ICommunicator + { + public event QuitCommandHandler QuitCommandReceived; + public event ResetCommandHandler ResetCommandReceived; + + /// If true, the communication is active. + bool m_IsOpen; + + List m_BehaviorNames = new List(); + bool m_NeedCommunicateThisStep; + ObservationWriter m_ObservationWriter = new ObservationWriter(); + Dictionary m_SensorShapeValidators = new Dictionary(); + Dictionary> m_OrderedAgentsRequestingDecisions = new Dictionary>(); + + /// The current UnityRLOutput to be sent when all the brains queried the communicator + UnityRLOutputProto m_CurrentUnityRlOutput = + new UnityRLOutputProto(); + + Dictionary> m_LastActionsReceived = + new Dictionary>(); + + // Brains that we have sent over the communicator with agents. + HashSet m_SentBrainKeys = new HashSet(); + Dictionary m_UnsentBrainKeys = new Dictionary(); + + + /// The Unity to External client. + UnityToExternalProto.UnityToExternalProtoClient m_Client; + Channel m_Channel; + + /// + /// Initializes a new instance of the RPCCommunicator class. + /// + protected RpcCommunicator() + { + } + + public static RpcCommunicator Create() + { +#if MLA_SUPPORTED_TRAINING_PLATFORM + return new RpcCommunicator(); +#else + return null; +#endif + } + +#region Initialization + + internal static bool CheckCommunicationVersionsAreCompatible( + string unityCommunicationVersion, + string pythonApiVersion + ) + { + var unityVersion = new Version(unityCommunicationVersion); + var pythonVersion = new Version(pythonApiVersion); + if (unityVersion.Major == 0) + { + if (unityVersion.Major != pythonVersion.Major || unityVersion.Minor != pythonVersion.Minor) + { + return false; + } + } + else if (unityVersion.Major != pythonVersion.Major) + { + return false; + } + else if (unityVersion.Minor != pythonVersion.Minor) + { + // If a feature is used in Unity but not supported in the trainer, + // we will warn at the point it's used. Don't warn here to avoid noise. + } + return true; + } + + /// + /// Sends the initialization parameters through the Communicator. + /// Is used by the academy to send initialization parameters to the communicator. + /// + /// Whether the connection was successful. + /// The Unity Initialization Parameters to be sent. + /// The External Initialization Parameters received. + public bool Initialize(CommunicatorInitParameters initParameters, out UnityRLInitParameters initParametersOut) + { +#if MLA_SUPPORTED_TRAINING_PLATFORM + var academyParameters = new UnityRLInitializationOutputProto + { + Name = initParameters.name, + PackageVersion = initParameters.unityPackageVersion, + CommunicationVersion = initParameters.unityCommunicationVersion, + Capabilities = initParameters.CSharpCapabilities.ToProto() + }; + + UnityInputProto input; + UnityInputProto initializationInput; + try + { + initializationInput = Initialize( + initParameters.port, + new UnityOutputProto + { + RlInitializationOutput = academyParameters + }, + out input + ); + } + catch (Exception ex) + { + if (ex is RpcException rpcException) + { + switch (rpcException.Status.StatusCode) + { + case StatusCode.Unavailable: + // This is the common case where there's no trainer to connect to. + break; + case StatusCode.DeadlineExceeded: + // We don't currently set a deadline for connection, but likely will in the future. + break; + default: + Debug.Log($"Unexpected gRPC exception when trying to initialize communication: {rpcException}"); + break; + } + } + else + { + Debug.Log($"Unexpected exception when trying to initialize communication: {ex}"); + } + initParametersOut = new UnityRLInitParameters(); + NotifyQuitAndShutDownChannel(); + return false; + } + + var pythonPackageVersion = initializationInput.RlInitializationInput.PackageVersion; + var pythonCommunicationVersion = initializationInput.RlInitializationInput.CommunicationVersion; + TrainingAnalytics.SetTrainerInformation(pythonPackageVersion, pythonCommunicationVersion); + + var communicationIsCompatible = CheckCommunicationVersionsAreCompatible( + initParameters.unityCommunicationVersion, + pythonCommunicationVersion + ); + + // Initialization succeeded part-way. The most likely cause is a mismatch between the communicator + // API strings, so log an explicit warning if that's the case. + if (initializationInput != null && input == null) + { + if (!communicationIsCompatible) + { + Debug.LogWarningFormat( + "Communication protocol between python ({0}) and Unity ({1}) have different " + + "versions which make them incompatible. Python library version: {2}.", + pythonCommunicationVersion, initParameters.unityCommunicationVersion, + pythonPackageVersion + ); + } + else + { + Debug.LogWarningFormat( + "Unknown communication error between Python. Python communication protocol: {0}, " + + "Python library version: {1}.", + pythonCommunicationVersion, + pythonPackageVersion + ); + } + + initParametersOut = new UnityRLInitParameters(); + return false; + } + + UpdateEnvironmentWithInput(input.RlInput); + initParametersOut = initializationInput.RlInitializationInput.ToUnityRLInitParameters(); + // Be sure to shut down the grpc channel when the application is quitting. + Application.quitting += NotifyQuitAndShutDownChannel; + return true; +#else + initParametersOut = new UnityRLInitParameters(); + return false; +#endif + } + + /// + /// Adds the brain to the list of brains which will be sending information to External. + /// + /// Brain key. + /// Description of the actions for the Agent. + public void SubscribeBrain(string brainKey, ActionSpec actionSpec) + { + if (m_BehaviorNames.Contains(brainKey)) + { + return; + } + m_BehaviorNames.Add(brainKey); + m_CurrentUnityRlOutput.AgentInfos.Add( + brainKey, + new UnityRLOutputProto.Types.ListAgentInfoProto() + ); + + CacheActionSpec(brainKey, actionSpec); + } + + void UpdateEnvironmentWithInput(UnityRLInputProto rlInput) + { + SideChannelManager.ProcessSideChannelData(rlInput.SideChannel.ToArray()); + SendCommandEvent(rlInput.Command); + } + + UnityInputProto Initialize(int port, UnityOutputProto unityOutput, out UnityInputProto unityInput) + { + m_IsOpen = true; + m_Channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure); + + m_Client = new UnityToExternalProto.UnityToExternalProtoClient(m_Channel); + var result = m_Client.Exchange(WrapMessage(unityOutput, 200)); + var inputMessage = m_Client.Exchange(WrapMessage(null, 200)); + unityInput = inputMessage.UnityInput; +#if UNITY_EDITOR + EditorApplication.playModeStateChanged += HandleOnPlayModeChanged; +#endif + if (result.Header.Status != 200 || inputMessage.Header.Status != 200) + { + m_IsOpen = false; + NotifyQuitAndShutDownChannel(); + } + return result.UnityInput; + } + + void NotifyQuitAndShutDownChannel() + { + QuitCommandReceived?.Invoke(); + try + { + m_Channel.ShutdownAsync().Wait(); + } + catch (Exception) + { + // do nothing + } + } + +#endregion + +#region Destruction + + /// + /// Close the communicator gracefully on both sides of the communication. + /// + public void Dispose() + { + if (!m_IsOpen) + { + return; + } + + try + { + m_Client.Exchange(WrapMessage(null, 400)); + m_IsOpen = false; + } + catch + { + // ignored + } + } + +#endregion + +#region Sending Events + + void SendCommandEvent(CommandProto command) + { + switch (command) + { + case CommandProto.Quit: + { + NotifyQuitAndShutDownChannel(); + return; + } + case CommandProto.Reset: + { + foreach (var brainName in m_OrderedAgentsRequestingDecisions.Keys) + { + m_OrderedAgentsRequestingDecisions[brainName].Clear(); + } + ResetCommandReceived?.Invoke(); + return; + } + default: + { + return; + } + } + } + +#endregion + +#region Sending and retreiving data + + public void DecideBatch() + { + if (!m_NeedCommunicateThisStep) + { + return; + } + m_NeedCommunicateThisStep = false; + + SendBatchedMessageHelper(); + } + + /// + /// Sends the observations of one Agent. + /// + /// Batch Key. + /// Agent info. + /// Sensors that will produce the observations + public void PutObservations(string behaviorName, AgentInfo info, List sensors) + { +#if DEBUG + if (!m_SensorShapeValidators.ContainsKey(behaviorName)) + { + m_SensorShapeValidators[behaviorName] = new SensorShapeValidator(); + } + m_SensorShapeValidators[behaviorName].ValidateSensors(sensors); +#endif + + using (TimerStack.Instance.Scoped("AgentInfo.ToProto")) + { + var agentInfoProto = info.ToAgentInfoProto(); + + using (TimerStack.Instance.Scoped("GenerateSensorData")) + { + foreach (var sensor in sensors) + { + var obsProto = sensor.GetObservationProto(m_ObservationWriter); + agentInfoProto.Observations.Add(obsProto); + } + } + m_CurrentUnityRlOutput.AgentInfos[behaviorName].Value.Add(agentInfoProto); + } + + m_NeedCommunicateThisStep = true; + if (!m_OrderedAgentsRequestingDecisions.ContainsKey(behaviorName)) + { + m_OrderedAgentsRequestingDecisions[behaviorName] = new List(); + } + if (!info.done) + { + m_OrderedAgentsRequestingDecisions[behaviorName].Add(info.episodeId); + } + if (!m_LastActionsReceived.ContainsKey(behaviorName)) + { + m_LastActionsReceived[behaviorName] = new Dictionary(); + } + m_LastActionsReceived[behaviorName][info.episodeId] = ActionBuffers.Empty; + if (info.done) + { + m_LastActionsReceived[behaviorName].Remove(info.episodeId); + } + } + + /// + /// Helper method that sends the current UnityRLOutput, receives the next UnityInput and + /// Applies the appropriate AgentAction to the agents. + /// + void SendBatchedMessageHelper() + { + var message = new UnityOutputProto + { + RlOutput = m_CurrentUnityRlOutput, + }; + var tempUnityRlInitializationOutput = GetTempUnityRlInitializationOutput(); + if (tempUnityRlInitializationOutput != null) + { + message.RlInitializationOutput = tempUnityRlInitializationOutput; + } + + byte[] messageAggregated = SideChannelManager.GetSideChannelMessage(); + message.RlOutput.SideChannel = ByteString.CopyFrom(messageAggregated); + + var input = Exchange(message); + UpdateSentActionSpec(tempUnityRlInitializationOutput); + + foreach (var k in m_CurrentUnityRlOutput.AgentInfos.Keys) + { + m_CurrentUnityRlOutput.AgentInfos[k].Value.Clear(); + } + + var rlInput = input?.RlInput; + + if (rlInput?.AgentActions == null) + { + return; + } + + UpdateEnvironmentWithInput(rlInput); + + foreach (var brainName in rlInput.AgentActions.Keys) + { + if (!m_OrderedAgentsRequestingDecisions[brainName].Any()) + { + continue; + } + + if (!rlInput.AgentActions[brainName].Value.Any()) + { + continue; + } + + var agentActions = rlInput.AgentActions[brainName].ToAgentActionList(); + var numAgents = m_OrderedAgentsRequestingDecisions[brainName].Count; + for (var i = 0; i < numAgents; i++) + { + var agentAction = agentActions[i]; + var agentId = m_OrderedAgentsRequestingDecisions[brainName][i]; + if (m_LastActionsReceived[brainName].ContainsKey(agentId)) + { + m_LastActionsReceived[brainName][agentId] = agentAction; + } + } + } + foreach (var brainName in m_OrderedAgentsRequestingDecisions.Keys) + { + m_OrderedAgentsRequestingDecisions[brainName].Clear(); + } + } + + public ActionBuffers GetActions(string behaviorName, int agentId) + { + if (m_LastActionsReceived.ContainsKey(behaviorName)) + { + if (m_LastActionsReceived[behaviorName].ContainsKey(agentId)) + { + return m_LastActionsReceived[behaviorName][agentId]; + } + } + return ActionBuffers.Empty; + } + + /// + /// Send a UnityOutput and receives a UnityInput. + /// + /// The next UnityInput. + /// The UnityOutput to be sent. + UnityInputProto Exchange(UnityOutputProto unityOutput) + { + if (!m_IsOpen) + { + return null; + } + + try + { + var message = m_Client.Exchange(WrapMessage(unityOutput, 200)); + if (message.Header.Status == 200) + { + return message.UnityInput; + } + + m_IsOpen = false; + // Not sure if the quit command is actually sent when a + // non 200 message is received. Notify that we are indeed + // quitting. + NotifyQuitAndShutDownChannel(); + return message.UnityInput; + } + catch (Exception ex) + { + if (ex is RpcException rpcException) + { + // Log more verbose errors if they're something the user can possibly do something about. + switch (rpcException.Status.StatusCode) + { + case StatusCode.Unavailable: + // This can happen when python disconnects. Ignore it to avoid noisy logs. + break; + case StatusCode.ResourceExhausted: + // This happens is the message body is too large. There's no way to + // gracefully handle this, but at least we can show the message and the + // user can try to reduce the number of agents or observation sizes. + Debug.LogError($"GRPC Exception: {rpcException.Message}. Disconnecting from trainer."); + break; + default: + // Other unknown errors. Log at INFO level. + Debug.Log($"GRPC Exception: {rpcException.Message}. Disconnecting from trainer."); + break; + } + } + else + { + // Fall-through for other error types + Debug.LogError($"Communication Exception: {ex.Message}. Disconnecting from trainer."); + } + + m_IsOpen = false; + NotifyQuitAndShutDownChannel(); + return null; + } + } + + /// + /// Wraps the UnityOutput into a message with the appropriate status. + /// + /// The UnityMessage corresponding. + /// The UnityOutput to be wrapped. + /// The status of the message. + static UnityMessageProto WrapMessage(UnityOutputProto content, int status) + { + return new UnityMessageProto + { + Header = new HeaderProto { Status = status }, + UnityOutput = content + }; + } + + void CacheActionSpec(string behaviorName, ActionSpec actionSpec) + { + if (m_SentBrainKeys.Contains(behaviorName)) + { + return; + } + + // TODO We should check that if m_unsentBrainKeys has brainKey, it equals actionSpec + m_UnsentBrainKeys[behaviorName] = actionSpec; + } + + UnityRLInitializationOutputProto GetTempUnityRlInitializationOutput() + { + UnityRLInitializationOutputProto output = null; + foreach (var behaviorName in m_UnsentBrainKeys.Keys) + { + if (m_CurrentUnityRlOutput.AgentInfos.ContainsKey(behaviorName)) + { + if (m_CurrentUnityRlOutput.AgentInfos[behaviorName].CalculateSize() > 0) + { + // Only send the actionSpec if there is a non empty list of + // AgentInfos ready to be sent. + // This is to ensure that The Python side will always have a first + // observation when receiving the ActionSpec + if (output == null) + { + output = new UnityRLInitializationOutputProto(); + } + + var actionSpec = m_UnsentBrainKeys[behaviorName]; + output.BrainParameters.Add(actionSpec.ToBrainParametersProto(behaviorName, true)); + } + } + } + + return output; + } + + void UpdateSentActionSpec(UnityRLInitializationOutputProto output) + { + if (output == null) + { + return; + } + + foreach (var brainProto in output.BrainParameters) + { + m_SentBrainKeys.Add(brainProto.BrainName); + m_UnsentBrainKeys.Remove(brainProto.BrainName); + } + } + +#endregion + +#if UNITY_EDITOR + /// + /// When the editor exits, the communicator must be closed + /// + /// State. + void HandleOnPlayModeChanged(PlayModeStateChange state) + { + // This method is run whenever the playmode state is changed. + if (state == PlayModeStateChange.ExitingPlayMode) + { + Dispose(); + } + } + +#endif + } +} +#endif // UNITY_EDITOR || UNITY_STANDALONE diff --git a/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs.meta b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d1903d74ccd9b9f6eaa4fd9ad5a34a01cd3ce963 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 57a3dc12d3b88408688bb490b65a838e +timeCreated: 1523046536 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs b/com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs new file mode 100644 index 0000000000000000000000000000000000000000..3dffcf52b7f5b85b997533c91c91aa05ff995ab3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs @@ -0,0 +1,54 @@ +using UnityEngine; + +namespace Unity.MLAgents +{ + public class UnityRLCapabilities + { + public bool BaseRLCapabilities; + public bool ConcatenatedPngObservations; + public bool CompressedChannelMapping; + public bool HybridActions; + public bool TrainingAnalytics; + public bool VariableLengthObservation; + public bool MultiAgentGroups; + + /// + /// A class holding the capabilities flags for Reinforcement Learning across C# and the Trainer codebase. This + /// struct will be used to inform users if and when they are using C# / Trainer features that are mismatched. + /// + public UnityRLCapabilities( + bool baseRlCapabilities = true, + bool concatenatedPngObservations = true, + bool compressedChannelMapping = true, + bool hybridActions = true, + bool trainingAnalytics = true, + bool variableLengthObservation = true, + bool multiAgentGroups = true) + { + BaseRLCapabilities = baseRlCapabilities; + ConcatenatedPngObservations = concatenatedPngObservations; + CompressedChannelMapping = compressedChannelMapping; + HybridActions = hybridActions; + TrainingAnalytics = trainingAnalytics; + VariableLengthObservation = variableLengthObservation; + MultiAgentGroups = multiAgentGroups; + } + + /// + /// Will print a warning to the console if Python does not support base capabilities and will + /// return true if the warning was printed. + /// + /// + public bool WarnOnPythonMissingBaseRLCapabilities() + { + if (BaseRLCapabilities) + { + return false; + } + Debug.LogWarning("Unity has connected to a Training process that does not support" + + "Base Reinforcement Learning Capabilities. Please make sure you have the" + + " latest training codebase installed for this version of the ML-Agents package."); + return true; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs.meta b/com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6cdc57628e5e02a1a4970ea394b83d9db567d99c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f95d271af72d4b75aa94d308222f79d8 +timeCreated: 1587670989 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Constants.cs b/com.unity.ml-agents/Runtime/Constants.cs new file mode 100644 index 0000000000000000000000000000000000000000..4be9eba0428483470308d6cc53490bdafd1cb3d8 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Constants.cs @@ -0,0 +1,12 @@ +namespace Unity.MLAgents +{ + /// + /// Grouping for use in AddComponentMenu (instead of nesting the menus). + /// + internal enum MenuGroup + { + Default = 0, + Sensors = 50, + Actuators = 100 + } +} diff --git a/com.unity.ml-agents/Runtime/Constants.cs.meta b/com.unity.ml-agents/Runtime/Constants.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2b2825b7470a656d1be6cdb1723d8c2f352c606f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Constants.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0622d88401ec464d9d2cf2fb03ce17b5 +timeCreated: 1579215785 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/DecisionRequester.cs b/com.unity.ml-agents/Runtime/DecisionRequester.cs new file mode 100644 index 0000000000000000000000000000000000000000..37b5ad299cf72e85b9d785b146aaf875eec5d643 --- /dev/null +++ b/com.unity.ml-agents/Runtime/DecisionRequester.cs @@ -0,0 +1,135 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents +{ + /// + /// The DecisionRequester component automatically request decisions for an + /// instance at regular intervals. + /// + /// + /// Attach a DecisionRequester component to the same [GameObject] as the + /// component. + /// + /// The DecisionRequester component provides a convenient and flexible way to + /// trigger the agent decision making process. Without a DecisionRequester, + /// your implementation must manually call its + /// function. + /// + [AddComponentMenu("ML Agents/Decision Requester", (int)MenuGroup.Default)] + [RequireComponent(typeof(Agent))] + [DefaultExecutionOrder(-10)] + public class DecisionRequester : MonoBehaviour + { + /// + /// The frequency with which the agent requests a decision. A DecisionPeriod of 5 means + /// that the Agent will request a decision every 5 Academy steps. /// + [Range(1, 20)] + [Tooltip("The frequency with which the agent requests a decision. A DecisionPeriod " + + "of 5 means that the Agent will request a decision every 5 Academy steps.")] + public int DecisionPeriod = 5; + + /// + /// Indicates when to requests a decision. By changing this value, the timing of decision + /// can be shifted even among agents with the same decision period. The value can be + /// from 0 to DecisionPeriod - 1. + /// + [Range(0, 19)] + [Tooltip("Indicates when to requests a decision. By changing this value, the timing " + + "of decision can be shifted even among agents with the same decision period. " + + "The value can be from 0 to DecisionPeriod - 1.")] + public int DecisionStep = 0; + + /// + /// Indicates whether or not the agent will take an action during the Academy steps where + /// it does not request a decision. Has no effect when DecisionPeriod is set to 1. + /// + [Tooltip("Indicates whether or not the agent will take an action during the Academy " + + "steps where it does not request a decision. Has no effect when DecisionPeriod " + + "is set to 1.")] + [FormerlySerializedAs("RepeatAction")] + public bool TakeActionsBetweenDecisions = true; + + [NonSerialized] + Agent m_Agent; + + /// + /// Get the Agent attached to the DecisionRequester. + /// + public Agent Agent + { + get => m_Agent; + } + + internal void Awake() + { + Debug.Assert(DecisionStep < DecisionPeriod, "DecisionStep must be between 0 and DecisionPeriod - 1."); + m_Agent = gameObject.GetComponent(); + Debug.Assert(m_Agent != null, "Agent component was not found on this gameObject and is required."); + Academy.Instance.AgentPreStep += MakeRequests; + } + + void OnDestroy() + { + if (Academy.IsInitialized) + { + Academy.Instance.AgentPreStep -= MakeRequests; + } + } + + /// + /// Information about Academy step used to make decisions about whether to request a decision. + /// + public struct DecisionRequestContext + { + /// + /// The current step count of the Academy, equivalent to Academy.StepCount. + /// + public int AcademyStepCount; + } + + /// + /// Method that hooks into the Academy in order inform the Agent on whether or not it should request a + /// decision, and whether or not it should take actions between decisions. + /// + /// The current step count of the academy. + void MakeRequests(int academyStepCount) + { + var context = new DecisionRequestContext + { + AcademyStepCount = academyStepCount + }; + + if (ShouldRequestDecision(context)) + { + m_Agent?.RequestDecision(); + } + + if (ShouldRequestAction(context)) + { + m_Agent?.RequestAction(); + } + } + + /// + /// Whether Agent.RequestDecision should be called on this update step. + /// + /// + /// + protected virtual bool ShouldRequestDecision(DecisionRequestContext context) + { + return context.AcademyStepCount % DecisionPeriod == DecisionStep; + } + + /// + /// Whether Agent.RequestAction should be called on this update step. + /// + /// + /// + protected virtual bool ShouldRequestAction(DecisionRequestContext context) + { + return TakeActionsBetweenDecisions; + } + } +} diff --git a/com.unity.ml-agents/Runtime/DecisionRequester.cs.meta b/com.unity.ml-agents/Runtime/DecisionRequester.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bdc416b94bdd180da99f74031932083059c5ed8e --- /dev/null +++ b/com.unity.ml-agents/Runtime/DecisionRequester.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a5c9d521e5ef4759a8246a07d52221e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Demonstrations.meta b/com.unity.ml-agents/Runtime/Demonstrations.meta new file mode 100644 index 0000000000000000000000000000000000000000..85288b5325dacbb54270ab23fc6d6b4092336702 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85e02c21d231b4f5fa0c5f87e5f907a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs new file mode 100644 index 0000000000000000000000000000000000000000..42f67733df995cfee9b46719fef9212210628e42 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs @@ -0,0 +1,20 @@ +using System; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Demonstrations +{ + /// + /// Demonstration meta-data. + /// Kept in a struct for easy serialization and deserialization. + /// + [Serializable] + internal class DemonstrationMetaData + { + [FormerlySerializedAs("numberExperiences")] + public int numberSteps; + public int numberEpisodes; + public float meanReward; + public string demonstrationName; + public const int ApiVersion = 1; + } +} diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs.meta b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8e6ff392755eae0586f91f8eba29e1c5bfcc8b05 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af5f3b4258a2d4ead90e733f30cfaa7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs new file mode 100644 index 0000000000000000000000000000000000000000..c8a02ba7084d9e3f813c282c537724fe749e73a6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs @@ -0,0 +1,228 @@ +using System.IO.Abstractions; +using System.Text.RegularExpressions; +using UnityEngine; +using System.IO; +using Unity.MLAgents.Policies; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Demonstrations +{ + /// + /// The Demonstration Recorder component facilitates the recording of demonstrations + /// used for imitation learning. + /// + /// Add this component to the [GameObject] containing an + /// to enable recording the agent for imitation learning. You must implement the + /// function of the agent to provide manual control + /// in order to record demonstrations. + /// + /// See [Imitation Learning - Recording Demonstrations] for more information. + /// + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// [Imitation Learning - Recording Demonstrations]: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs//Learning-Environment-Design-Agents.md#recording-demonstrations + /// + [RequireComponent(typeof(Agent))] + [AddComponentMenu("ML Agents/Demonstration Recorder", (int)MenuGroup.Default)] + public class DemonstrationRecorder : MonoBehaviour + { + /// + /// Whether or not to record demonstrations. + /// + [FormerlySerializedAs("record")] + [Tooltip("Whether or not to record demonstrations.")] + public bool Record; + + /// + /// Number of steps to record. The editor will stop playing when it reaches this threshold. + /// Set to zero to record indefinitely. + /// + [Tooltip("Number of steps to record. The editor will stop playing when it reaches this threshold. " + + "Set to zero to record indefinitely.")] + public int NumStepsToRecord; + + /// + /// Base demonstration file name. If multiple files are saved, the additional filenames + /// will have a sequence of unique numbers appended. + /// + [FormerlySerializedAs("demonstrationName")] + [Tooltip("Base demonstration file name. If multiple files are saved, the additional " + + "filenames will have a unique number appended.")] + public string DemonstrationName; + + /// + /// Directory to save the demo files. Will default to a "Demonstrations/" folder in the + /// Application data path if not specified. + /// + [FormerlySerializedAs("demonstrationDirectory")] + [Tooltip("Directory to save the demo files. Will default to " + + "{Application.dataPath}/Demonstrations if not specified.")] + public string DemonstrationDirectory; + + DemonstrationWriter m_DemoWriter; + internal const int MaxNameLength = 16; + + const string k_ExtensionType = ".demo"; + const string k_DefaultDirectoryName = "Demonstrations"; + IFileSystem m_FileSystem; + + Agent m_Agent; + + void OnEnable() + { + m_Agent = GetComponent(); + } + + void Update() + { + if (!Record) + { + return; + } + + LazyInitialize(); + + // Quit when num steps to record is reached + if (NumStepsToRecord > 0 && m_DemoWriter.NumSteps >= NumStepsToRecord) + { + Application.Quit(0); +#if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; +#endif + } + } + + /// + /// Creates demonstration store for use in recording. + /// Has no effect if the demonstration store was already created. + /// + internal DemonstrationWriter LazyInitialize(IFileSystem fileSystem = null) + { + if (m_DemoWriter != null) + { + return m_DemoWriter; + } + + if (m_Agent == null) + { + m_Agent = GetComponent(); + } + + m_FileSystem = fileSystem ?? new FileSystem(); + var behaviorParams = GetComponent(); + if (string.IsNullOrEmpty(DemonstrationName)) + { + DemonstrationName = behaviorParams.BehaviorName; + } + if (string.IsNullOrEmpty(DemonstrationDirectory)) + { + DemonstrationDirectory = Path.Combine(Application.dataPath, k_DefaultDirectoryName); + } + + DemonstrationName = SanitizeName(DemonstrationName, MaxNameLength); + var filePath = MakeDemonstrationFilePath(m_FileSystem, DemonstrationDirectory, DemonstrationName); + var stream = m_FileSystem.File.Create(filePath); + m_DemoWriter = new DemonstrationWriter(stream); + + AddDemonstrationWriterToAgent(m_DemoWriter); + + return m_DemoWriter; + } + + /// + /// Removes all characters except alphanumerics from demonstration name. + /// Shorten name if it is longer than the maxNameLength. + /// + internal static string SanitizeName(string demoName, int maxNameLength) + { + var rgx = new Regex("[^a-zA-Z0-9 -]"); + demoName = rgx.Replace(demoName, ""); + // If the string is too long, it will overflow the metadata. + if (demoName.Length > maxNameLength) + { + demoName = demoName.Substring(0, maxNameLength); + } + return demoName; + } + + /// + /// Gets a unique path for the DemonstrationName in the DemonstrationDirectory. + /// + /// + /// + /// + /// + internal static string MakeDemonstrationFilePath( + IFileSystem fileSystem, string demonstrationDirectory, string demonstrationName + ) + { + // Create the directory if it doesn't already exist + if (!fileSystem.Directory.Exists(demonstrationDirectory)) + { + fileSystem.Directory.CreateDirectory(demonstrationDirectory); + } + + var literalName = demonstrationName; + var filePath = Path.Combine(demonstrationDirectory, literalName + k_ExtensionType); + var uniqueNameCounter = 0; + while (fileSystem.File.Exists(filePath)) + { + // TODO should we use a timestamp instead of a counter here? This loops an increasing number of times + // as the number of demos increases. + literalName = demonstrationName + "_" + uniqueNameCounter; + filePath = Path.Combine(demonstrationDirectory, literalName + k_ExtensionType); + uniqueNameCounter++; + } + + return filePath; + } + + /// + /// Close the DemonstrationWriter and remove it from the Agent. + /// Has no effect if the DemonstrationWriter is already closed (or wasn't opened) + /// + public void Close() + { + if (m_DemoWriter != null) + { + RemoveDemonstrationWriterFromAgent(m_DemoWriter); + + m_DemoWriter.Close(); + m_DemoWriter = null; + } + } + + /// + /// Clean up the DemonstrationWriter when shutting down or destroying the Agent. + /// + void OnDestroy() + { + Close(); + } + + /// + /// Add additional DemonstrationWriter to the Agent. It is still up to the user to Close this + /// DemonstrationWriters when recording is done. + /// + /// + public void AddDemonstrationWriterToAgent(DemonstrationWriter demoWriter) + { + var behaviorParams = GetComponent(); + demoWriter.Initialize( + DemonstrationName, + behaviorParams.BrainParameters, + behaviorParams.FullyQualifiedBehaviorName + ); + m_Agent.DemonstrationWriters.Add(demoWriter); + } + + /// + /// Remove additional DemonstrationWriter to the Agent. It is still up to the user to Close this + /// DemonstrationWriters when recording is done. + /// + /// + public void RemoveDemonstrationWriterFromAgent(DemonstrationWriter demoWriter) + { + m_Agent.DemonstrationWriters.Remove(demoWriter); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs.meta b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cde4db8f20fb8dfd296392a5215e63494ba4fe71 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2902496c0120472b90269f94a0aec7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs new file mode 100644 index 0000000000000000000000000000000000000000..cb32409913179026c4c80aad9426a2a5dfb9ac87 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents.Policies; + +namespace Unity.MLAgents.Demonstrations +{ + /// + /// Summary of a loaded Demonstration file. Only used for display in the Inspector. + /// + [Serializable] + internal class DemonstrationSummary : ScriptableObject + { + public DemonstrationMetaData metaData; + public BrainParameters brainParameters; + public List observationSummaries; + + public void Initialize(BrainParameters brainParams, + DemonstrationMetaData demonstrationMetaData, List obsSummaries) + { + brainParameters = brainParams; + metaData = demonstrationMetaData; + observationSummaries = obsSummaries; + } + } + + + /// + /// Summary of a loaded Observation. Currently only contains the shape of the Observation. + /// + /// This is necessary because serialization doesn't support nested containers or arrays. + [Serializable] + internal struct ObservationSummary + { + public int[] shape; + } +} diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs.meta b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..91e53800d573ae6cf0aa8a46432396d48885886a --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5e0cbcbc514b473399c262dd37541ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..bd4426102f83b70f544e9956ae922b3683eac075 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs @@ -0,0 +1,160 @@ +using System.IO; +using Google.Protobuf; +using System.Collections.Generic; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Policies; + +namespace Unity.MLAgents.Demonstrations +{ + /// + /// Responsible for writing demonstration data to stream (typically a file stream). + /// + /// + public class DemonstrationWriter + { + /// + /// Number of bytes reserved for the at the start of the demo file. + /// + internal const int MetaDataBytes = 32; + + DemonstrationMetaData m_MetaData; + Stream m_Writer; + float m_CumulativeReward; + ObservationWriter m_ObservationWriter = new ObservationWriter(); + + /// + /// Create a DemonstrationWriter that will write to the specified stream. + /// The stream must support writes and seeking. + /// + /// + public DemonstrationWriter(Stream stream) + { + m_Writer = stream; + } + + /// + /// Number of steps written so far. + /// + internal int NumSteps + { + get { return m_MetaData.numberSteps; } + } + + /// + /// Writes the initial data to the stream. + /// + /// Base name of the demonstration file(s). + /// The name of the Brain the agent is attached to. + /// The parameters of the Brain the agent is attached to. + internal void Initialize( + string demonstrationName, BrainParameters brainParameters, string brainName) + { + if (m_Writer == null) + { + // Already closed + return; + } + + m_MetaData = new DemonstrationMetaData { demonstrationName = demonstrationName }; + var metaProto = m_MetaData.ToProto(); + metaProto.WriteDelimitedTo(m_Writer); + + WriteBrainParameters(brainName, brainParameters); + } + + /// + /// Writes meta-data. Note that this is called at the *end* of recording, but writes to the + /// beginning of the file. + /// + void WriteMetadata() + { + if (m_Writer == null) + { + // Already closed + return; + } + + var metaProto = m_MetaData.ToProto(); + var metaProtoBytes = metaProto.ToByteArray(); + m_Writer.Write(metaProtoBytes, 0, metaProtoBytes.Length); + m_Writer.Seek(0, 0); + metaProto.WriteDelimitedTo(m_Writer); + } + + /// + /// Writes brain parameters to file. + /// + /// The name of the Brain the agent is attached to. + /// The parameters of the Brain the agent is attached to. + void WriteBrainParameters(string brainName, BrainParameters brainParameters) + { + if (m_Writer == null) + { + // Already closed + return; + } + + // Writes BrainParameters to file. + m_Writer.Seek(MetaDataBytes + 1, 0); + var brainProto = brainParameters.ToProto(brainName, false); + brainProto.WriteDelimitedTo(m_Writer); + } + + /// + /// Write AgentInfo experience to file. + /// + /// for the agent being recorded. + /// List of sensors to record for the agent. + internal void Record(AgentInfo info, List sensors) + { + if (m_Writer == null) + { + // Already closed + return; + } + + // Increment meta-data counters. + m_MetaData.numberSteps++; + m_CumulativeReward += info.reward; + if (info.done) + { + EndEpisode(); + } + + // Generate observations and add AgentInfo to file. + var agentProto = info.ToInfoActionPairProto(); + foreach (var sensor in sensors) + { + agentProto.AgentInfo.Observations.Add(sensor.GetObservationProto(m_ObservationWriter)); + } + + agentProto.WriteDelimitedTo(m_Writer); + } + + /// + /// Performs all clean-up necessary. + /// + public void Close() + { + if (m_Writer == null) + { + // Already closed + return; + } + + EndEpisode(); + m_MetaData.meanReward = m_CumulativeReward / m_MetaData.numberEpisodes; + WriteMetadata(); + m_Writer.Close(); + m_Writer = null; + } + + /// + /// Performs necessary episode-completion steps. + /// + void EndEpisode() + { + m_MetaData.numberEpisodes += 1; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs.meta b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f30f1b22c19c516bb783f4c60704746e3b615f42 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebaf7878a8cc74ee3aae07daf9e1b6f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/EnvironmentParameters.cs b/com.unity.ml-agents/Runtime/EnvironmentParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..fc1c667cd68dd01afeefa49d70200f09fbda5a8a --- /dev/null +++ b/com.unity.ml-agents/Runtime/EnvironmentParameters.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using Unity.MLAgents.SideChannels; + +namespace Unity.MLAgents +{ + /// + /// A container for the Environment Parameters that may be modified during training. + /// The keys for those parameters are defined in the trainer configurations and the + /// the values are generated from the training process in features such as Curriculum Learning + /// and Environment Parameter Randomization. + /// + /// One current assumption for all the environment parameters is that they are of type float. + /// + public sealed class EnvironmentParameters + { + /// + /// The side channel that is used to receive the new parameter values. + /// + readonly EnvironmentParametersChannel m_Channel; + + /// + /// Constructor. + /// + internal EnvironmentParameters() + { + m_Channel = new EnvironmentParametersChannel(); + SideChannelManager.RegisterSideChannel(m_Channel); + } + + /// + /// Returns the parameter value for the specified key. Returns the default value provided + /// if this parameter key does not have a value. Only returns a parameter value if it is + /// of type float. + /// + /// The parameter key + /// Default value for this parameter. + /// + public float GetWithDefault(string key, float defaultValue) + { + return m_Channel.GetWithDefault(key, defaultValue); + } + + /// + /// Registers a callback action for the provided parameter key. Will overwrite any + /// existing action for that parameter. The callback will be called whenever the parameter + /// receives a value from the training process. + /// + /// The parameter key + /// The callback action + public void RegisterCallback(string key, Action action) + { + m_Channel.RegisterCallback(key, action); + } + + /// + /// Returns a list of all the parameter keys that have received values. + /// + /// List of parameter keys. + public IList Keys() + { + return m_Channel.ListParameters(); + } + + internal void Dispose() + { + SideChannelManager.UnregisterSideChannel(m_Channel); + } + } +} diff --git a/com.unity.ml-agents/Runtime/EnvironmentParameters.cs.meta b/com.unity.ml-agents/Runtime/EnvironmentParameters.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e7a85f810cc9006fedaf248d2e6e35379fd515f --- /dev/null +++ b/com.unity.ml-agents/Runtime/EnvironmentParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90ce0b26bef35484890eac0633b85eed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/EpisodeIdCounter.cs b/com.unity.ml-agents/Runtime/EpisodeIdCounter.cs new file mode 100644 index 0000000000000000000000000000000000000000..735c7fff96c19638c17a88f138d1d7845176ba10 --- /dev/null +++ b/com.unity.ml-agents/Runtime/EpisodeIdCounter.cs @@ -0,0 +1,11 @@ +namespace Unity.MLAgents +{ + internal static class EpisodeIdCounter + { + static int s_Counter; + public static int GetEpisodeId() + { + return s_Counter++; + } + } +} diff --git a/com.unity.ml-agents/Runtime/EpisodeIdCounter.cs.meta b/com.unity.ml-agents/Runtime/EpisodeIdCounter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c377f5004bac0e59a67cd1b0207927b03fa7cc37 --- /dev/null +++ b/com.unity.ml-agents/Runtime/EpisodeIdCounter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 847786b7bcf9d4817b3f3879d57517c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc.meta b/com.unity.ml-agents/Runtime/Grpc.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8760ec24e79de7b6aa92fd2f9a9fe402ba7aa8d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 418327e202c7464bb6649d025df1b539 +timeCreated: 1569444731 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Grpc/AssemblyInfo.cs b/com.unity.ml-agents/Runtime/Grpc/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..b740e05db8222778e6a9c03814c187469ace18b1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/AssemblyInfo.cs @@ -0,0 +1,7 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ML-Agents")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Sensor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Utils.Tests")] diff --git a/com.unity.ml-agents/Runtime/Grpc/AssemblyInfo.cs.meta b/com.unity.ml-agents/Runtime/Grpc/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cf7b4f0f10f2c1178136acea667960aaf609ffc9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54959ce8e2e574f09b91f80a516acee3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects.meta new file mode 100644 index 0000000000000000000000000000000000000000..cef92044c3752acd5a6fd60b72f73a3f96070791 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ebeef5df83b74a048b7f99681672f3b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs new file mode 100644 index 0000000000000000000000000000000000000000..3eb0a357a2991dcbeffbb6e94131200dba3a18d5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs @@ -0,0 +1,242 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/agent_action.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/agent_action.proto + internal static partial class AgentActionReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/agent_action.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static AgentActionReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjVtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2Fj", + "dGlvbi5wcm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMijAEKEEFnZW50QWN0", + "aW9uUHJvdG8SIQoZdmVjdG9yX2FjdGlvbnNfZGVwcmVjYXRlZBgBIAMoAhIN", + "CgV2YWx1ZRgEIAEoAhIaChJjb250aW51b3VzX2FjdGlvbnMYBiADKAISGAoQ", + "ZGlzY3JldGVfYWN0aW9ucxgHIAMoBUoECAIQA0oECAMQBEoECAUQBkIlqgIi", + "VW5pdHkuTUxBZ2VudHMuQ29tbXVuaWNhdG9yT2JqZWN0c2IGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentActionProto), global::Unity.MLAgents.CommunicatorObjects.AgentActionProto.Parser, new[]{ "VectorActionsDeprecated", "Value", "ContinuousActions", "DiscreteActions" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class AgentActionProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new AgentActionProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.AgentActionReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentActionProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentActionProto(AgentActionProto other) : this() { + vectorActionsDeprecated_ = other.vectorActionsDeprecated_.Clone(); + value_ = other.value_; + continuousActions_ = other.continuousActions_.Clone(); + discreteActions_ = other.discreteActions_.Clone(); + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentActionProto Clone() { + return new AgentActionProto(this); + } + + /// Field number for the "vector_actions_deprecated" field. + public const int VectorActionsDeprecatedFieldNumber = 1; + private static readonly pb::FieldCodec _repeated_vectorActionsDeprecated_codec + = pb::FieldCodec.ForFloat(10); + private readonly pbc::RepeatedField vectorActionsDeprecated_ = new pbc::RepeatedField(); + /// + /// mark as deprecated in communicator v1.3.0 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField VectorActionsDeprecated { + get { return vectorActionsDeprecated_; } + } + + /// Field number for the "value" field. + public const int ValueFieldNumber = 4; + private float value_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public float Value { + get { return value_; } + set { + value_ = value; + } + } + + /// Field number for the "continuous_actions" field. + public const int ContinuousActionsFieldNumber = 6; + private static readonly pb::FieldCodec _repeated_continuousActions_codec + = pb::FieldCodec.ForFloat(50); + private readonly pbc::RepeatedField continuousActions_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField ContinuousActions { + get { return continuousActions_; } + } + + /// Field number for the "discrete_actions" field. + public const int DiscreteActionsFieldNumber = 7; + private static readonly pb::FieldCodec _repeated_discreteActions_codec + = pb::FieldCodec.ForInt32(58); + private readonly pbc::RepeatedField discreteActions_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField DiscreteActions { + get { return discreteActions_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as AgentActionProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(AgentActionProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!vectorActionsDeprecated_.Equals(other.vectorActionsDeprecated_)) return false; + if (!pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.Equals(Value, other.Value)) return false; + if(!continuousActions_.Equals(other.continuousActions_)) return false; + if(!discreteActions_.Equals(other.discreteActions_)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= vectorActionsDeprecated_.GetHashCode(); + if (Value != 0F) hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(Value); + hash ^= continuousActions_.GetHashCode(); + hash ^= discreteActions_.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + vectorActionsDeprecated_.WriteTo(output, _repeated_vectorActionsDeprecated_codec); + if (Value != 0F) { + output.WriteRawTag(37); + output.WriteFloat(Value); + } + continuousActions_.WriteTo(output, _repeated_continuousActions_codec); + discreteActions_.WriteTo(output, _repeated_discreteActions_codec); + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += vectorActionsDeprecated_.CalculateSize(_repeated_vectorActionsDeprecated_codec); + if (Value != 0F) { + size += 1 + 4; + } + size += continuousActions_.CalculateSize(_repeated_continuousActions_codec); + size += discreteActions_.CalculateSize(_repeated_discreteActions_codec); + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(AgentActionProto other) { + if (other == null) { + return; + } + vectorActionsDeprecated_.Add(other.vectorActionsDeprecated_); + if (other.Value != 0F) { + Value = other.Value; + } + continuousActions_.Add(other.continuousActions_); + discreteActions_.Add(other.discreteActions_); + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: + case 13: { + vectorActionsDeprecated_.AddEntriesFrom(input, _repeated_vectorActionsDeprecated_codec); + break; + } + case 37: { + Value = input.ReadFloat(); + break; + } + case 50: + case 53: { + continuousActions_.AddEntriesFrom(input, _repeated_continuousActions_codec); + break; + } + case 58: + case 56: { + discreteActions_.AddEntriesFrom(input, _repeated_discreteActions_codec); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f47d94375b5191d3b894d6ef84061ee260d07736 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1fa94db54b734224927bb4b322227cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..187f2fdab75cef786d1936cc99dc509c4b8227d7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs @@ -0,0 +1,361 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/agent_info.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/agent_info.proto + internal static partial class AgentInfoReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/agent_info.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static AgentInfoReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjNtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2lu", + "Zm8ucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjRtbGFnZW50c19lbnZz", + "L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvIvkBCg5B", + "Z2VudEluZm9Qcm90bxIOCgZyZXdhcmQYByABKAISDAoEZG9uZRgIIAEoCBIY", + "ChBtYXhfc3RlcF9yZWFjaGVkGAkgASgIEgoKAmlkGAogASgFEhMKC2FjdGlv", + "bl9tYXNrGAsgAygIEjwKDG9ic2VydmF0aW9ucxgNIAMoCzImLmNvbW11bmlj", + "YXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG8SEAoIZ3JvdXBfaWQYDiAB", + "KAUSFAoMZ3JvdXBfcmV3YXJkGA8gASgCSgQIARACSgQIAhADSgQIAxAESgQI", + "BBAFSgQIBRAGSgQIBhAHSgQIDBANQiWqAiJVbml0eS5NTEFnZW50cy5Db21t", + "dW5pY2F0b3JPYmplY3RzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.ObservationReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto), global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations", "GroupId", "GroupReward" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class AgentInfoProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new AgentInfoProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.AgentInfoReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentInfoProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentInfoProto(AgentInfoProto other) : this() { + reward_ = other.reward_; + done_ = other.done_; + maxStepReached_ = other.maxStepReached_; + id_ = other.id_; + actionMask_ = other.actionMask_.Clone(); + observations_ = other.observations_.Clone(); + groupId_ = other.groupId_; + groupReward_ = other.groupReward_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentInfoProto Clone() { + return new AgentInfoProto(this); + } + + /// Field number for the "reward" field. + public const int RewardFieldNumber = 7; + private float reward_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public float Reward { + get { return reward_; } + set { + reward_ = value; + } + } + + /// Field number for the "done" field. + public const int DoneFieldNumber = 8; + private bool done_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Done { + get { return done_; } + set { + done_ = value; + } + } + + /// Field number for the "max_step_reached" field. + public const int MaxStepReachedFieldNumber = 9; + private bool maxStepReached_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool MaxStepReached { + get { return maxStepReached_; } + set { + maxStepReached_ = value; + } + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 10; + private int id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int Id { + get { return id_; } + set { + id_ = value; + } + } + + /// Field number for the "action_mask" field. + public const int ActionMaskFieldNumber = 11; + private static readonly pb::FieldCodec _repeated_actionMask_codec + = pb::FieldCodec.ForBool(90); + private readonly pbc::RepeatedField actionMask_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField ActionMask { + get { return actionMask_; } + } + + /// Field number for the "observations" field. + public const int ObservationsFieldNumber = 13; + private static readonly pb::FieldCodec _repeated_observations_codec + = pb::FieldCodec.ForMessage(106, global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Parser); + private readonly pbc::RepeatedField observations_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField Observations { + get { return observations_; } + } + + /// Field number for the "group_id" field. + public const int GroupIdFieldNumber = 14; + private int groupId_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int GroupId { + get { return groupId_; } + set { + groupId_ = value; + } + } + + /// Field number for the "group_reward" field. + public const int GroupRewardFieldNumber = 15; + private float groupReward_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public float GroupReward { + get { return groupReward_; } + set { + groupReward_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as AgentInfoProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(AgentInfoProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.Equals(Reward, other.Reward)) return false; + if (Done != other.Done) return false; + if (MaxStepReached != other.MaxStepReached) return false; + if (Id != other.Id) return false; + if(!actionMask_.Equals(other.actionMask_)) return false; + if(!observations_.Equals(other.observations_)) return false; + if (GroupId != other.GroupId) return false; + if (!pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.Equals(GroupReward, other.GroupReward)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Reward != 0F) hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(Reward); + if (Done != false) hash ^= Done.GetHashCode(); + if (MaxStepReached != false) hash ^= MaxStepReached.GetHashCode(); + if (Id != 0) hash ^= Id.GetHashCode(); + hash ^= actionMask_.GetHashCode(); + hash ^= observations_.GetHashCode(); + if (GroupId != 0) hash ^= GroupId.GetHashCode(); + if (GroupReward != 0F) hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(GroupReward); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (Reward != 0F) { + output.WriteRawTag(61); + output.WriteFloat(Reward); + } + if (Done != false) { + output.WriteRawTag(64); + output.WriteBool(Done); + } + if (MaxStepReached != false) { + output.WriteRawTag(72); + output.WriteBool(MaxStepReached); + } + if (Id != 0) { + output.WriteRawTag(80); + output.WriteInt32(Id); + } + actionMask_.WriteTo(output, _repeated_actionMask_codec); + observations_.WriteTo(output, _repeated_observations_codec); + if (GroupId != 0) { + output.WriteRawTag(112); + output.WriteInt32(GroupId); + } + if (GroupReward != 0F) { + output.WriteRawTag(125); + output.WriteFloat(GroupReward); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Reward != 0F) { + size += 1 + 4; + } + if (Done != false) { + size += 1 + 1; + } + if (MaxStepReached != false) { + size += 1 + 1; + } + if (Id != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(Id); + } + size += actionMask_.CalculateSize(_repeated_actionMask_codec); + size += observations_.CalculateSize(_repeated_observations_codec); + if (GroupId != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(GroupId); + } + if (GroupReward != 0F) { + size += 1 + 4; + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(AgentInfoProto other) { + if (other == null) { + return; + } + if (other.Reward != 0F) { + Reward = other.Reward; + } + if (other.Done != false) { + Done = other.Done; + } + if (other.MaxStepReached != false) { + MaxStepReached = other.MaxStepReached; + } + if (other.Id != 0) { + Id = other.Id; + } + actionMask_.Add(other.actionMask_); + observations_.Add(other.observations_); + if (other.GroupId != 0) { + GroupId = other.GroupId; + } + if (other.GroupReward != 0F) { + GroupReward = other.GroupReward; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 61: { + Reward = input.ReadFloat(); + break; + } + case 64: { + Done = input.ReadBool(); + break; + } + case 72: { + MaxStepReached = input.ReadBool(); + break; + } + case 80: { + Id = input.ReadInt32(); + break; + } + case 90: + case 88: { + actionMask_.AddEntriesFrom(input, _repeated_actionMask_codec); + break; + } + case 106: { + observations_.AddEntriesFrom(input, _repeated_observations_codec); + break; + } + case 112: { + GroupId = input.ReadInt32(); + break; + } + case 125: { + GroupReward = input.ReadFloat(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..07ed36145616b7d7117c457890192b91f248f893 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecaddd3a8141a4854a4d2c7fe8bd6a75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfoActionPair.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfoActionPair.cs new file mode 100644 index 0000000000000000000000000000000000000000..37cd219c7339d8d0f19db4096dc9a5b25f827a1b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfoActionPair.cs @@ -0,0 +1,219 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/agent_info_action_pair.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/agent_info_action_pair.proto + internal static partial class AgentInfoActionPairReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/agent_info_action_pair.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static AgentInfoActionPairReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "Cj9tbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2lu", + "Zm9fYWN0aW9uX3BhaXIucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjNt", + "bGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2luZm8u", + "cHJvdG8aNW1sYWdlbnRzX2VudnMvY29tbXVuaWNhdG9yX29iamVjdHMvYWdl", + "bnRfYWN0aW9uLnByb3RvIpEBChhBZ2VudEluZm9BY3Rpb25QYWlyUHJvdG8S", + "OAoKYWdlbnRfaW5mbxgBIAEoCzIkLmNvbW11bmljYXRvcl9vYmplY3RzLkFn", + "ZW50SW5mb1Byb3RvEjsKC2FjdGlvbl9pbmZvGAIgASgLMiYuY29tbXVuaWNh", + "dG9yX29iamVjdHMuQWdlbnRBY3Rpb25Qcm90b0IlqgIiVW5pdHkuTUxBZ2Vu", + "dHMuQ29tbXVuaWNhdG9yT2JqZWN0c2IGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.AgentInfoReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.AgentActionReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentInfoActionPairProto), global::Unity.MLAgents.CommunicatorObjects.AgentInfoActionPairProto.Parser, new[]{ "AgentInfo", "ActionInfo" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class AgentInfoActionPairProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new AgentInfoActionPairProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.AgentInfoActionPairReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentInfoActionPairProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentInfoActionPairProto(AgentInfoActionPairProto other) : this() { + AgentInfo = other.agentInfo_ != null ? other.AgentInfo.Clone() : null; + ActionInfo = other.actionInfo_ != null ? other.ActionInfo.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public AgentInfoActionPairProto Clone() { + return new AgentInfoActionPairProto(this); + } + + /// Field number for the "agent_info" field. + public const int AgentInfoFieldNumber = 1; + private global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto agentInfo_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto AgentInfo { + get { return agentInfo_; } + set { + agentInfo_ = value; + } + } + + /// Field number for the "action_info" field. + public const int ActionInfoFieldNumber = 2; + private global::Unity.MLAgents.CommunicatorObjects.AgentActionProto actionInfo_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.AgentActionProto ActionInfo { + get { return actionInfo_; } + set { + actionInfo_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as AgentInfoActionPairProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(AgentInfoActionPairProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(AgentInfo, other.AgentInfo)) return false; + if (!object.Equals(ActionInfo, other.ActionInfo)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (agentInfo_ != null) hash ^= AgentInfo.GetHashCode(); + if (actionInfo_ != null) hash ^= ActionInfo.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (agentInfo_ != null) { + output.WriteRawTag(10); + output.WriteMessage(AgentInfo); + } + if (actionInfo_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ActionInfo); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (agentInfo_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(AgentInfo); + } + if (actionInfo_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ActionInfo); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(AgentInfoActionPairProto other) { + if (other == null) { + return; + } + if (other.agentInfo_ != null) { + if (agentInfo_ == null) { + agentInfo_ = new global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto(); + } + AgentInfo.MergeFrom(other.AgentInfo); + } + if (other.actionInfo_ != null) { + if (actionInfo_ == null) { + actionInfo_ = new global::Unity.MLAgents.CommunicatorObjects.AgentActionProto(); + } + ActionInfo.MergeFrom(other.ActionInfo); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (agentInfo_ == null) { + agentInfo_ = new global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto(); + } + input.ReadMessage(agentInfo_); + break; + } + case 18: { + if (actionInfo_ == null) { + actionInfo_ = new global::Unity.MLAgents.CommunicatorObjects.AgentActionProto(); + } + input.ReadMessage(actionInfo_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfoActionPair.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfoActionPair.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7474dcae69cd61b0356386c0e7cb04f8a097b659 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfoActionPair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29577366657494c678558b0643abcb30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..65b57f4ea3c8ba5637650064330a6ea619434c87 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs @@ -0,0 +1,524 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/brain_parameters.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/brain_parameters.proto + internal static partial class BrainParametersReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/brain_parameters.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static BrainParametersReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjltbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2JyYWluX3Bh", + "cmFtZXRlcnMucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjNtbGFnZW50", + "c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3NwYWNlX3R5cGUucHJvdG8i", + "iwEKD0FjdGlvblNwZWNQcm90bxIeChZudW1fY29udGludW91c19hY3Rpb25z", + "GAEgASgFEhwKFG51bV9kaXNjcmV0ZV9hY3Rpb25zGAIgASgFEh0KFWRpc2Ny", + "ZXRlX2JyYW5jaF9zaXplcxgDIAMoBRIbChNhY3Rpb25fZGVzY3JpcHRpb25z", + "GAQgAygJIrYCChRCcmFpblBhcmFtZXRlcnNQcm90bxIlCh12ZWN0b3JfYWN0", + "aW9uX3NpemVfZGVwcmVjYXRlZBgDIAMoBRItCiV2ZWN0b3JfYWN0aW9uX2Rl", + "c2NyaXB0aW9uc19kZXByZWNhdGVkGAUgAygJElEKI3ZlY3Rvcl9hY3Rpb25f", + "c3BhY2VfdHlwZV9kZXByZWNhdGVkGAYgASgOMiQuY29tbXVuaWNhdG9yX29i", + "amVjdHMuU3BhY2VUeXBlUHJvdG8SEgoKYnJhaW5fbmFtZRgHIAEoCRITCgtp", + "c190cmFpbmluZxgIIAEoCBI6CgthY3Rpb25fc3BlYxgJIAEoCzIlLmNvbW11", + "bmljYXRvcl9vYmplY3RzLkFjdGlvblNwZWNQcm90b0oECAEQAkoECAIQA0oE", + "CAQQBUIlqgIiVW5pdHkuTUxBZ2VudHMuQ29tbXVuaWNhdG9yT2JqZWN0c2IG", + "cHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.SpaceTypeReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.ActionSpecProto), global::Unity.MLAgents.CommunicatorObjects.ActionSpecProto.Parser, new[]{ "NumContinuousActions", "NumDiscreteActions", "DiscreteBranchSizes", "ActionDescriptions" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.BrainParametersProto), global::Unity.MLAgents.CommunicatorObjects.BrainParametersProto.Parser, new[]{ "VectorActionSizeDeprecated", "VectorActionDescriptionsDeprecated", "VectorActionSpaceTypeDeprecated", "BrainName", "IsTraining", "ActionSpec" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class ActionSpecProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ActionSpecProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.BrainParametersReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ActionSpecProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ActionSpecProto(ActionSpecProto other) : this() { + numContinuousActions_ = other.numContinuousActions_; + numDiscreteActions_ = other.numDiscreteActions_; + discreteBranchSizes_ = other.discreteBranchSizes_.Clone(); + actionDescriptions_ = other.actionDescriptions_.Clone(); + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ActionSpecProto Clone() { + return new ActionSpecProto(this); + } + + /// Field number for the "num_continuous_actions" field. + public const int NumContinuousActionsFieldNumber = 1; + private int numContinuousActions_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumContinuousActions { + get { return numContinuousActions_; } + set { + numContinuousActions_ = value; + } + } + + /// Field number for the "num_discrete_actions" field. + public const int NumDiscreteActionsFieldNumber = 2; + private int numDiscreteActions_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumDiscreteActions { + get { return numDiscreteActions_; } + set { + numDiscreteActions_ = value; + } + } + + /// Field number for the "discrete_branch_sizes" field. + public const int DiscreteBranchSizesFieldNumber = 3; + private static readonly pb::FieldCodec _repeated_discreteBranchSizes_codec + = pb::FieldCodec.ForInt32(26); + private readonly pbc::RepeatedField discreteBranchSizes_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField DiscreteBranchSizes { + get { return discreteBranchSizes_; } + } + + /// Field number for the "action_descriptions" field. + public const int ActionDescriptionsFieldNumber = 4; + private static readonly pb::FieldCodec _repeated_actionDescriptions_codec + = pb::FieldCodec.ForString(34); + private readonly pbc::RepeatedField actionDescriptions_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField ActionDescriptions { + get { return actionDescriptions_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as ActionSpecProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(ActionSpecProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (NumContinuousActions != other.NumContinuousActions) return false; + if (NumDiscreteActions != other.NumDiscreteActions) return false; + if(!discreteBranchSizes_.Equals(other.discreteBranchSizes_)) return false; + if(!actionDescriptions_.Equals(other.actionDescriptions_)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (NumContinuousActions != 0) hash ^= NumContinuousActions.GetHashCode(); + if (NumDiscreteActions != 0) hash ^= NumDiscreteActions.GetHashCode(); + hash ^= discreteBranchSizes_.GetHashCode(); + hash ^= actionDescriptions_.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (NumContinuousActions != 0) { + output.WriteRawTag(8); + output.WriteInt32(NumContinuousActions); + } + if (NumDiscreteActions != 0) { + output.WriteRawTag(16); + output.WriteInt32(NumDiscreteActions); + } + discreteBranchSizes_.WriteTo(output, _repeated_discreteBranchSizes_codec); + actionDescriptions_.WriteTo(output, _repeated_actionDescriptions_codec); + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (NumContinuousActions != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumContinuousActions); + } + if (NumDiscreteActions != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumDiscreteActions); + } + size += discreteBranchSizes_.CalculateSize(_repeated_discreteBranchSizes_codec); + size += actionDescriptions_.CalculateSize(_repeated_actionDescriptions_codec); + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(ActionSpecProto other) { + if (other == null) { + return; + } + if (other.NumContinuousActions != 0) { + NumContinuousActions = other.NumContinuousActions; + } + if (other.NumDiscreteActions != 0) { + NumDiscreteActions = other.NumDiscreteActions; + } + discreteBranchSizes_.Add(other.discreteBranchSizes_); + actionDescriptions_.Add(other.actionDescriptions_); + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + NumContinuousActions = input.ReadInt32(); + break; + } + case 16: { + NumDiscreteActions = input.ReadInt32(); + break; + } + case 26: + case 24: { + discreteBranchSizes_.AddEntriesFrom(input, _repeated_discreteBranchSizes_codec); + break; + } + case 34: { + actionDescriptions_.AddEntriesFrom(input, _repeated_actionDescriptions_codec); + break; + } + } + } + } + + } + + internal sealed partial class BrainParametersProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new BrainParametersProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.BrainParametersReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public BrainParametersProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public BrainParametersProto(BrainParametersProto other) : this() { + vectorActionSizeDeprecated_ = other.vectorActionSizeDeprecated_.Clone(); + vectorActionDescriptionsDeprecated_ = other.vectorActionDescriptionsDeprecated_.Clone(); + vectorActionSpaceTypeDeprecated_ = other.vectorActionSpaceTypeDeprecated_; + brainName_ = other.brainName_; + isTraining_ = other.isTraining_; + ActionSpec = other.actionSpec_ != null ? other.ActionSpec.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public BrainParametersProto Clone() { + return new BrainParametersProto(this); + } + + /// Field number for the "vector_action_size_deprecated" field. + public const int VectorActionSizeDeprecatedFieldNumber = 3; + private static readonly pb::FieldCodec _repeated_vectorActionSizeDeprecated_codec + = pb::FieldCodec.ForInt32(26); + private readonly pbc::RepeatedField vectorActionSizeDeprecated_ = new pbc::RepeatedField(); + /// + /// mark as deprecated in communicator v1.3.0 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField VectorActionSizeDeprecated { + get { return vectorActionSizeDeprecated_; } + } + + /// Field number for the "vector_action_descriptions_deprecated" field. + public const int VectorActionDescriptionsDeprecatedFieldNumber = 5; + private static readonly pb::FieldCodec _repeated_vectorActionDescriptionsDeprecated_codec + = pb::FieldCodec.ForString(42); + private readonly pbc::RepeatedField vectorActionDescriptionsDeprecated_ = new pbc::RepeatedField(); + /// + /// mark as deprecated in communicator v1.3.0 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField VectorActionDescriptionsDeprecated { + get { return vectorActionDescriptionsDeprecated_; } + } + + /// Field number for the "vector_action_space_type_deprecated" field. + public const int VectorActionSpaceTypeDeprecatedFieldNumber = 6; + private global::Unity.MLAgents.CommunicatorObjects.SpaceTypeProto vectorActionSpaceTypeDeprecated_ = 0; + /// + /// mark as deprecated in communicator v1.3.0 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.SpaceTypeProto VectorActionSpaceTypeDeprecated { + get { return vectorActionSpaceTypeDeprecated_; } + set { + vectorActionSpaceTypeDeprecated_ = value; + } + } + + /// Field number for the "brain_name" field. + public const int BrainNameFieldNumber = 7; + private string brainName_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string BrainName { + get { return brainName_; } + set { + brainName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "is_training" field. + public const int IsTrainingFieldNumber = 8; + private bool isTraining_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool IsTraining { + get { return isTraining_; } + set { + isTraining_ = value; + } + } + + /// Field number for the "action_spec" field. + public const int ActionSpecFieldNumber = 9; + private global::Unity.MLAgents.CommunicatorObjects.ActionSpecProto actionSpec_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.ActionSpecProto ActionSpec { + get { return actionSpec_; } + set { + actionSpec_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as BrainParametersProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(BrainParametersProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!vectorActionSizeDeprecated_.Equals(other.vectorActionSizeDeprecated_)) return false; + if(!vectorActionDescriptionsDeprecated_.Equals(other.vectorActionDescriptionsDeprecated_)) return false; + if (VectorActionSpaceTypeDeprecated != other.VectorActionSpaceTypeDeprecated) return false; + if (BrainName != other.BrainName) return false; + if (IsTraining != other.IsTraining) return false; + if (!object.Equals(ActionSpec, other.ActionSpec)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= vectorActionSizeDeprecated_.GetHashCode(); + hash ^= vectorActionDescriptionsDeprecated_.GetHashCode(); + if (VectorActionSpaceTypeDeprecated != 0) hash ^= VectorActionSpaceTypeDeprecated.GetHashCode(); + if (BrainName.Length != 0) hash ^= BrainName.GetHashCode(); + if (IsTraining != false) hash ^= IsTraining.GetHashCode(); + if (actionSpec_ != null) hash ^= ActionSpec.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + vectorActionSizeDeprecated_.WriteTo(output, _repeated_vectorActionSizeDeprecated_codec); + vectorActionDescriptionsDeprecated_.WriteTo(output, _repeated_vectorActionDescriptionsDeprecated_codec); + if (VectorActionSpaceTypeDeprecated != 0) { + output.WriteRawTag(48); + output.WriteEnum((int) VectorActionSpaceTypeDeprecated); + } + if (BrainName.Length != 0) { + output.WriteRawTag(58); + output.WriteString(BrainName); + } + if (IsTraining != false) { + output.WriteRawTag(64); + output.WriteBool(IsTraining); + } + if (actionSpec_ != null) { + output.WriteRawTag(74); + output.WriteMessage(ActionSpec); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += vectorActionSizeDeprecated_.CalculateSize(_repeated_vectorActionSizeDeprecated_codec); + size += vectorActionDescriptionsDeprecated_.CalculateSize(_repeated_vectorActionDescriptionsDeprecated_codec); + if (VectorActionSpaceTypeDeprecated != 0) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) VectorActionSpaceTypeDeprecated); + } + if (BrainName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(BrainName); + } + if (IsTraining != false) { + size += 1 + 1; + } + if (actionSpec_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ActionSpec); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(BrainParametersProto other) { + if (other == null) { + return; + } + vectorActionSizeDeprecated_.Add(other.vectorActionSizeDeprecated_); + vectorActionDescriptionsDeprecated_.Add(other.vectorActionDescriptionsDeprecated_); + if (other.VectorActionSpaceTypeDeprecated != 0) { + VectorActionSpaceTypeDeprecated = other.VectorActionSpaceTypeDeprecated; + } + if (other.BrainName.Length != 0) { + BrainName = other.BrainName; + } + if (other.IsTraining != false) { + IsTraining = other.IsTraining; + } + if (other.actionSpec_ != null) { + if (actionSpec_ == null) { + actionSpec_ = new global::Unity.MLAgents.CommunicatorObjects.ActionSpecProto(); + } + ActionSpec.MergeFrom(other.ActionSpec); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 26: + case 24: { + vectorActionSizeDeprecated_.AddEntriesFrom(input, _repeated_vectorActionSizeDeprecated_codec); + break; + } + case 42: { + vectorActionDescriptionsDeprecated_.AddEntriesFrom(input, _repeated_vectorActionDescriptionsDeprecated_codec); + break; + } + case 48: { + vectorActionSpaceTypeDeprecated_ = (global::Unity.MLAgents.CommunicatorObjects.SpaceTypeProto) input.ReadEnum(); + break; + } + case 58: { + BrainName = input.ReadString(); + break; + } + case 64: { + IsTraining = input.ReadBool(); + break; + } + case 74: { + if (actionSpec_ == null) { + actionSpec_ = new global::Unity.MLAgents.CommunicatorObjects.ActionSpecProto(); + } + input.ReadMessage(actionSpec_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..447602fcc2aa4de103c4324c41916701e807f8be --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26f9a93df956e4ee88c1cf5f31017f0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs new file mode 100644 index 0000000000000000000000000000000000000000..ac267f4c2f06cdecbbd9e156f6597a81700ad640 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs @@ -0,0 +1,373 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/capabilities.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/capabilities.proto + internal static partial class CapabilitiesReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/capabilities.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static CapabilitiesReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjVtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2NhcGFiaWxp", + "dGllcy5wcm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMi7AEKGFVuaXR5UkxD", + "YXBhYmlsaXRpZXNQcm90bxIaChJiYXNlUkxDYXBhYmlsaXRpZXMYASABKAgS", + "IwobY29uY2F0ZW5hdGVkUG5nT2JzZXJ2YXRpb25zGAIgASgIEiAKGGNvbXBy", + "ZXNzZWRDaGFubmVsTWFwcGluZxgDIAEoCBIVCg1oeWJyaWRBY3Rpb25zGAQg", + "ASgIEhkKEXRyYWluaW5nQW5hbHl0aWNzGAUgASgIEiEKGXZhcmlhYmxlTGVu", + "Z3RoT2JzZXJ2YXRpb24YBiABKAgSGAoQbXVsdGlBZ2VudEdyb3VwcxgHIAEo", + "CEIlqgIiVW5pdHkuTUxBZ2VudHMuQ29tbXVuaWNhdG9yT2JqZWN0c2IGcHJv", + "dG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto.Parser, new[]{ "BaseRLCapabilities", "ConcatenatedPngObservations", "CompressedChannelMapping", "HybridActions", "TrainingAnalytics", "VariableLengthObservation", "MultiAgentGroups" }, null, null, null) + })); + } + #endregion + + } + #region Messages + /// + /// + /// A Capabilities message that will communicate both C# and Python + /// what features are available to both. + /// + internal sealed partial class UnityRLCapabilitiesProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityRLCapabilitiesProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.CapabilitiesReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLCapabilitiesProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLCapabilitiesProto(UnityRLCapabilitiesProto other) : this() { + baseRLCapabilities_ = other.baseRLCapabilities_; + concatenatedPngObservations_ = other.concatenatedPngObservations_; + compressedChannelMapping_ = other.compressedChannelMapping_; + hybridActions_ = other.hybridActions_; + trainingAnalytics_ = other.trainingAnalytics_; + variableLengthObservation_ = other.variableLengthObservation_; + multiAgentGroups_ = other.multiAgentGroups_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLCapabilitiesProto Clone() { + return new UnityRLCapabilitiesProto(this); + } + + /// Field number for the "baseRLCapabilities" field. + public const int BaseRLCapabilitiesFieldNumber = 1; + private bool baseRLCapabilities_; + /// + /// These are the 1.0 capabilities. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool BaseRLCapabilities { + get { return baseRLCapabilities_; } + set { + baseRLCapabilities_ = value; + } + } + + /// Field number for the "concatenatedPngObservations" field. + public const int ConcatenatedPngObservationsFieldNumber = 2; + private bool concatenatedPngObservations_; + /// + /// concatenated PNG files for compressed visual observations with >3 channels. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool ConcatenatedPngObservations { + get { return concatenatedPngObservations_; } + set { + concatenatedPngObservations_ = value; + } + } + + /// Field number for the "compressedChannelMapping" field. + public const int CompressedChannelMappingFieldNumber = 3; + private bool compressedChannelMapping_; + /// + /// compression mapping for stacking compressed observations. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool CompressedChannelMapping { + get { return compressedChannelMapping_; } + set { + compressedChannelMapping_ = value; + } + } + + /// Field number for the "hybridActions" field. + public const int HybridActionsFieldNumber = 4; + private bool hybridActions_; + /// + /// support for hybrid action spaces (discrete + continuous) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool HybridActions { + get { return hybridActions_; } + set { + hybridActions_ = value; + } + } + + /// Field number for the "trainingAnalytics" field. + public const int TrainingAnalyticsFieldNumber = 5; + private bool trainingAnalytics_; + /// + /// support for training analytics + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool TrainingAnalytics { + get { return trainingAnalytics_; } + set { + trainingAnalytics_ = value; + } + } + + /// Field number for the "variableLengthObservation" field. + public const int VariableLengthObservationFieldNumber = 6; + private bool variableLengthObservation_; + /// + /// Support for variable length observations of rank 2 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool VariableLengthObservation { + get { return variableLengthObservation_; } + set { + variableLengthObservation_ = value; + } + } + + /// Field number for the "multiAgentGroups" field. + public const int MultiAgentGroupsFieldNumber = 7; + private bool multiAgentGroups_; + /// + /// Support for multi agent groups and group rewards + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool MultiAgentGroups { + get { return multiAgentGroups_; } + set { + multiAgentGroups_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityRLCapabilitiesProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityRLCapabilitiesProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (BaseRLCapabilities != other.BaseRLCapabilities) return false; + if (ConcatenatedPngObservations != other.ConcatenatedPngObservations) return false; + if (CompressedChannelMapping != other.CompressedChannelMapping) return false; + if (HybridActions != other.HybridActions) return false; + if (TrainingAnalytics != other.TrainingAnalytics) return false; + if (VariableLengthObservation != other.VariableLengthObservation) return false; + if (MultiAgentGroups != other.MultiAgentGroups) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (BaseRLCapabilities != false) hash ^= BaseRLCapabilities.GetHashCode(); + if (ConcatenatedPngObservations != false) hash ^= ConcatenatedPngObservations.GetHashCode(); + if (CompressedChannelMapping != false) hash ^= CompressedChannelMapping.GetHashCode(); + if (HybridActions != false) hash ^= HybridActions.GetHashCode(); + if (TrainingAnalytics != false) hash ^= TrainingAnalytics.GetHashCode(); + if (VariableLengthObservation != false) hash ^= VariableLengthObservation.GetHashCode(); + if (MultiAgentGroups != false) hash ^= MultiAgentGroups.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (BaseRLCapabilities != false) { + output.WriteRawTag(8); + output.WriteBool(BaseRLCapabilities); + } + if (ConcatenatedPngObservations != false) { + output.WriteRawTag(16); + output.WriteBool(ConcatenatedPngObservations); + } + if (CompressedChannelMapping != false) { + output.WriteRawTag(24); + output.WriteBool(CompressedChannelMapping); + } + if (HybridActions != false) { + output.WriteRawTag(32); + output.WriteBool(HybridActions); + } + if (TrainingAnalytics != false) { + output.WriteRawTag(40); + output.WriteBool(TrainingAnalytics); + } + if (VariableLengthObservation != false) { + output.WriteRawTag(48); + output.WriteBool(VariableLengthObservation); + } + if (MultiAgentGroups != false) { + output.WriteRawTag(56); + output.WriteBool(MultiAgentGroups); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (BaseRLCapabilities != false) { + size += 1 + 1; + } + if (ConcatenatedPngObservations != false) { + size += 1 + 1; + } + if (CompressedChannelMapping != false) { + size += 1 + 1; + } + if (HybridActions != false) { + size += 1 + 1; + } + if (TrainingAnalytics != false) { + size += 1 + 1; + } + if (VariableLengthObservation != false) { + size += 1 + 1; + } + if (MultiAgentGroups != false) { + size += 1 + 1; + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityRLCapabilitiesProto other) { + if (other == null) { + return; + } + if (other.BaseRLCapabilities != false) { + BaseRLCapabilities = other.BaseRLCapabilities; + } + if (other.ConcatenatedPngObservations != false) { + ConcatenatedPngObservations = other.ConcatenatedPngObservations; + } + if (other.CompressedChannelMapping != false) { + CompressedChannelMapping = other.CompressedChannelMapping; + } + if (other.HybridActions != false) { + HybridActions = other.HybridActions; + } + if (other.TrainingAnalytics != false) { + TrainingAnalytics = other.TrainingAnalytics; + } + if (other.VariableLengthObservation != false) { + VariableLengthObservation = other.VariableLengthObservation; + } + if (other.MultiAgentGroups != false) { + MultiAgentGroups = other.MultiAgentGroups; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + BaseRLCapabilities = input.ReadBool(); + break; + } + case 16: { + ConcatenatedPngObservations = input.ReadBool(); + break; + } + case 24: { + CompressedChannelMapping = input.ReadBool(); + break; + } + case 32: { + HybridActions = input.ReadBool(); + break; + } + case 40: { + TrainingAnalytics = input.ReadBool(); + break; + } + case 48: { + VariableLengthObservation = input.ReadBool(); + break; + } + case 56: { + MultiAgentGroups = input.ReadBool(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1e65cf6ee3020ad1e3afd275bf31944d3ad2c135 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8388443b440343299cab2e88988e14e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Command.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Command.cs new file mode 100644 index 0000000000000000000000000000000000000000..1220f9f9eec87040d387566cc1695005aee6f29e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Command.cs @@ -0,0 +1,49 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/command.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/command.proto + internal static partial class CommandReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/command.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static CommandReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjBtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2NvbW1hbmQu", + "cHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzKi0KDENvbW1hbmRQcm90bxII", + "CgRTVEVQEAASCQoFUkVTRVQQARIICgRRVUlUEAJCJaoCIlVuaXR5Lk1MQWdl", + "bnRzLkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Unity.MLAgents.CommunicatorObjects.CommandProto), }, null)); + } + #endregion + + } + #region Enums + internal enum CommandProto { + [pbr::OriginalName("STEP")] Step = 0, + [pbr::OriginalName("RESET")] Reset = 1, + [pbr::OriginalName("QUIT")] Quit = 2, + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Command.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Command.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f47033a7c17960f7a8fc7fa7b73c7e63b17fd6b7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Command.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9be6f5025f61540eabbc831436642adc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/CustomResetParameters.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/CustomResetParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..45099b04c7f8545c5bc4ebc39f6b6294025a999d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/CustomResetParameters.cs @@ -0,0 +1,146 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/custom_reset_parameters.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/custom_reset_parameters.proto + internal static partial class CustomResetParametersReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/custom_reset_parameters.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static CustomResetParametersReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CkBtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2N1c3RvbV9y", + "ZXNldF9wYXJhbWV0ZXJzLnByb3RvEhRjb21tdW5pY2F0b3Jfb2JqZWN0cyIc", + "ChpDdXN0b21SZXNldFBhcmFtZXRlcnNQcm90b0IlqgIiVW5pdHkuTUxBZ2Vu", + "dHMuQ29tbXVuaWNhdG9yT2JqZWN0c2IGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.CustomResetParametersProto), global::Unity.MLAgents.CommunicatorObjects.CustomResetParametersProto.Parser, null, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class CustomResetParametersProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CustomResetParametersProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.CustomResetParametersReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public CustomResetParametersProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public CustomResetParametersProto(CustomResetParametersProto other) : this() { + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public CustomResetParametersProto Clone() { + return new CustomResetParametersProto(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as CustomResetParametersProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(CustomResetParametersProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(CustomResetParametersProto other) { + if (other == null) { + return; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/CustomResetParameters.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/CustomResetParameters.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa357195f6fd8ad46bb822394c92532fdf4b4289 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/CustomResetParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62f03717ee98042bf8990733358f2dbd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/DemonstrationMeta.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/DemonstrationMeta.cs new file mode 100644 index 0000000000000000000000000000000000000000..58f8ad80225946c0319a8582e5f90394485a7e62 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/DemonstrationMeta.cs @@ -0,0 +1,289 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/demonstration_meta.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/demonstration_meta.proto + internal static partial class DemonstrationMetaReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/demonstration_meta.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static DemonstrationMetaReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjttbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2RlbW9uc3Ry", + "YXRpb25fbWV0YS5wcm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMijQEKFkRl", + "bW9uc3RyYXRpb25NZXRhUHJvdG8SEwoLYXBpX3ZlcnNpb24YASABKAUSGgoS", + "ZGVtb25zdHJhdGlvbl9uYW1lGAIgASgJEhQKDG51bWJlcl9zdGVwcxgDIAEo", + "BRIXCg9udW1iZXJfZXBpc29kZXMYBCABKAUSEwoLbWVhbl9yZXdhcmQYBSAB", + "KAJCJaoCIlVuaXR5Lk1MQWdlbnRzLkNvbW11bmljYXRvck9iamVjdHNiBnBy", + "b3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.DemonstrationMetaProto), global::Unity.MLAgents.CommunicatorObjects.DemonstrationMetaProto.Parser, new[]{ "ApiVersion", "DemonstrationName", "NumberSteps", "NumberEpisodes", "MeanReward" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class DemonstrationMetaProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new DemonstrationMetaProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.DemonstrationMetaReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public DemonstrationMetaProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public DemonstrationMetaProto(DemonstrationMetaProto other) : this() { + apiVersion_ = other.apiVersion_; + demonstrationName_ = other.demonstrationName_; + numberSteps_ = other.numberSteps_; + numberEpisodes_ = other.numberEpisodes_; + meanReward_ = other.meanReward_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public DemonstrationMetaProto Clone() { + return new DemonstrationMetaProto(this); + } + + /// Field number for the "api_version" field. + public const int ApiVersionFieldNumber = 1; + private int apiVersion_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int ApiVersion { + get { return apiVersion_; } + set { + apiVersion_ = value; + } + } + + /// Field number for the "demonstration_name" field. + public const int DemonstrationNameFieldNumber = 2; + private string demonstrationName_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string DemonstrationName { + get { return demonstrationName_; } + set { + demonstrationName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "number_steps" field. + public const int NumberStepsFieldNumber = 3; + private int numberSteps_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumberSteps { + get { return numberSteps_; } + set { + numberSteps_ = value; + } + } + + /// Field number for the "number_episodes" field. + public const int NumberEpisodesFieldNumber = 4; + private int numberEpisodes_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumberEpisodes { + get { return numberEpisodes_; } + set { + numberEpisodes_ = value; + } + } + + /// Field number for the "mean_reward" field. + public const int MeanRewardFieldNumber = 5; + private float meanReward_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public float MeanReward { + get { return meanReward_; } + set { + meanReward_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as DemonstrationMetaProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(DemonstrationMetaProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ApiVersion != other.ApiVersion) return false; + if (DemonstrationName != other.DemonstrationName) return false; + if (NumberSteps != other.NumberSteps) return false; + if (NumberEpisodes != other.NumberEpisodes) return false; + if (!pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.Equals(MeanReward, other.MeanReward)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (ApiVersion != 0) hash ^= ApiVersion.GetHashCode(); + if (DemonstrationName.Length != 0) hash ^= DemonstrationName.GetHashCode(); + if (NumberSteps != 0) hash ^= NumberSteps.GetHashCode(); + if (NumberEpisodes != 0) hash ^= NumberEpisodes.GetHashCode(); + if (MeanReward != 0F) hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(MeanReward); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (ApiVersion != 0) { + output.WriteRawTag(8); + output.WriteInt32(ApiVersion); + } + if (DemonstrationName.Length != 0) { + output.WriteRawTag(18); + output.WriteString(DemonstrationName); + } + if (NumberSteps != 0) { + output.WriteRawTag(24); + output.WriteInt32(NumberSteps); + } + if (NumberEpisodes != 0) { + output.WriteRawTag(32); + output.WriteInt32(NumberEpisodes); + } + if (MeanReward != 0F) { + output.WriteRawTag(45); + output.WriteFloat(MeanReward); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (ApiVersion != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(ApiVersion); + } + if (DemonstrationName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(DemonstrationName); + } + if (NumberSteps != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumberSteps); + } + if (NumberEpisodes != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumberEpisodes); + } + if (MeanReward != 0F) { + size += 1 + 4; + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(DemonstrationMetaProto other) { + if (other == null) { + return; + } + if (other.ApiVersion != 0) { + ApiVersion = other.ApiVersion; + } + if (other.DemonstrationName.Length != 0) { + DemonstrationName = other.DemonstrationName; + } + if (other.NumberSteps != 0) { + NumberSteps = other.NumberSteps; + } + if (other.NumberEpisodes != 0) { + NumberEpisodes = other.NumberEpisodes; + } + if (other.MeanReward != 0F) { + MeanReward = other.MeanReward; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + ApiVersion = input.ReadInt32(); + break; + } + case 18: { + DemonstrationName = input.ReadString(); + break; + } + case 24: { + NumberSteps = input.ReadInt32(); + break; + } + case 32: { + NumberEpisodes = input.ReadInt32(); + break; + } + case 45: { + MeanReward = input.ReadFloat(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/DemonstrationMeta.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/DemonstrationMeta.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..41176197e92339aa36b3cee1557aabca018cd557 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/DemonstrationMeta.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7248e2660150f4a39bb99dfabb9bae7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/EngineConfiguration.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/EngineConfiguration.cs new file mode 100644 index 0000000000000000000000000000000000000000..6a05c09f28b4058d14481d5baaf5a92cc758e6ea --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/EngineConfiguration.cs @@ -0,0 +1,317 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/engine_configuration.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/engine_configuration.proto + internal static partial class EngineConfigurationReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/engine_configuration.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static EngineConfigurationReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "Cj1tbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2VuZ2luZV9j", + "b25maWd1cmF0aW9uLnByb3RvEhRjb21tdW5pY2F0b3Jfb2JqZWN0cyKVAQoY", + "RW5naW5lQ29uZmlndXJhdGlvblByb3RvEg0KBXdpZHRoGAEgASgFEg4KBmhl", + "aWdodBgCIAEoBRIVCg1xdWFsaXR5X2xldmVsGAMgASgFEhIKCnRpbWVfc2Nh", + "bGUYBCABKAISGQoRdGFyZ2V0X2ZyYW1lX3JhdGUYBSABKAUSFAoMc2hvd19t", + "b25pdG9yGAYgASgIQiWqAiJVbml0eS5NTEFnZW50cy5Db21tdW5pY2F0b3JP", + "YmplY3RzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.EngineConfigurationProto), global::Unity.MLAgents.CommunicatorObjects.EngineConfigurationProto.Parser, new[]{ "Width", "Height", "QualityLevel", "TimeScale", "TargetFrameRate", "ShowMonitor" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class EngineConfigurationProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new EngineConfigurationProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.EngineConfigurationReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public EngineConfigurationProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public EngineConfigurationProto(EngineConfigurationProto other) : this() { + width_ = other.width_; + height_ = other.height_; + qualityLevel_ = other.qualityLevel_; + timeScale_ = other.timeScale_; + targetFrameRate_ = other.targetFrameRate_; + showMonitor_ = other.showMonitor_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public EngineConfigurationProto Clone() { + return new EngineConfigurationProto(this); + } + + /// Field number for the "width" field. + public const int WidthFieldNumber = 1; + private int width_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int Width { + get { return width_; } + set { + width_ = value; + } + } + + /// Field number for the "height" field. + public const int HeightFieldNumber = 2; + private int height_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int Height { + get { return height_; } + set { + height_ = value; + } + } + + /// Field number for the "quality_level" field. + public const int QualityLevelFieldNumber = 3; + private int qualityLevel_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int QualityLevel { + get { return qualityLevel_; } + set { + qualityLevel_ = value; + } + } + + /// Field number for the "time_scale" field. + public const int TimeScaleFieldNumber = 4; + private float timeScale_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public float TimeScale { + get { return timeScale_; } + set { + timeScale_ = value; + } + } + + /// Field number for the "target_frame_rate" field. + public const int TargetFrameRateFieldNumber = 5; + private int targetFrameRate_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int TargetFrameRate { + get { return targetFrameRate_; } + set { + targetFrameRate_ = value; + } + } + + /// Field number for the "show_monitor" field. + public const int ShowMonitorFieldNumber = 6; + private bool showMonitor_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool ShowMonitor { + get { return showMonitor_; } + set { + showMonitor_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as EngineConfigurationProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(EngineConfigurationProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Width != other.Width) return false; + if (Height != other.Height) return false; + if (QualityLevel != other.QualityLevel) return false; + if (!pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.Equals(TimeScale, other.TimeScale)) return false; + if (TargetFrameRate != other.TargetFrameRate) return false; + if (ShowMonitor != other.ShowMonitor) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Width != 0) hash ^= Width.GetHashCode(); + if (Height != 0) hash ^= Height.GetHashCode(); + if (QualityLevel != 0) hash ^= QualityLevel.GetHashCode(); + if (TimeScale != 0F) hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(TimeScale); + if (TargetFrameRate != 0) hash ^= TargetFrameRate.GetHashCode(); + if (ShowMonitor != false) hash ^= ShowMonitor.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (Width != 0) { + output.WriteRawTag(8); + output.WriteInt32(Width); + } + if (Height != 0) { + output.WriteRawTag(16); + output.WriteInt32(Height); + } + if (QualityLevel != 0) { + output.WriteRawTag(24); + output.WriteInt32(QualityLevel); + } + if (TimeScale != 0F) { + output.WriteRawTag(37); + output.WriteFloat(TimeScale); + } + if (TargetFrameRate != 0) { + output.WriteRawTag(40); + output.WriteInt32(TargetFrameRate); + } + if (ShowMonitor != false) { + output.WriteRawTag(48); + output.WriteBool(ShowMonitor); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Width != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(Width); + } + if (Height != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(Height); + } + if (QualityLevel != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(QualityLevel); + } + if (TimeScale != 0F) { + size += 1 + 4; + } + if (TargetFrameRate != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(TargetFrameRate); + } + if (ShowMonitor != false) { + size += 1 + 1; + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(EngineConfigurationProto other) { + if (other == null) { + return; + } + if (other.Width != 0) { + Width = other.Width; + } + if (other.Height != 0) { + Height = other.Height; + } + if (other.QualityLevel != 0) { + QualityLevel = other.QualityLevel; + } + if (other.TimeScale != 0F) { + TimeScale = other.TimeScale; + } + if (other.TargetFrameRate != 0) { + TargetFrameRate = other.TargetFrameRate; + } + if (other.ShowMonitor != false) { + ShowMonitor = other.ShowMonitor; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + Width = input.ReadInt32(); + break; + } + case 16: { + Height = input.ReadInt32(); + break; + } + case 24: { + QualityLevel = input.ReadInt32(); + break; + } + case 37: { + TimeScale = input.ReadFloat(); + break; + } + case 40: { + TargetFrameRate = input.ReadInt32(); + break; + } + case 48: { + ShowMonitor = input.ReadBool(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/EngineConfiguration.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/EngineConfiguration.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cb08edae85681dbd41a138627a25d403f57703c6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/EngineConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 129a5bbec69fc4f42bc70e422660c8f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Header.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Header.cs new file mode 100644 index 0000000000000000000000000000000000000000..2f38cc8f444972a308d55edf59f3c1879bc61313 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Header.cs @@ -0,0 +1,202 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/header.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/header.proto + internal static partial class HeaderReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/header.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static HeaderReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "Ci9tbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2hlYWRlci5w", + "cm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMiLgoLSGVhZGVyUHJvdG8SDgoG", + "c3RhdHVzGAEgASgFEg8KB21lc3NhZ2UYAiABKAlCJaoCIlVuaXR5Lk1MQWdl", + "bnRzLkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.HeaderProto), global::Unity.MLAgents.CommunicatorObjects.HeaderProto.Parser, new[]{ "Status", "Message" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class HeaderProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new HeaderProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.HeaderReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public HeaderProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public HeaderProto(HeaderProto other) : this() { + status_ = other.status_; + message_ = other.message_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public HeaderProto Clone() { + return new HeaderProto(this); + } + + /// Field number for the "status" field. + public const int StatusFieldNumber = 1; + private int status_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int Status { + get { return status_; } + set { + status_ = value; + } + } + + /// Field number for the "message" field. + public const int MessageFieldNumber = 2; + private string message_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Message { + get { return message_; } + set { + message_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as HeaderProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(HeaderProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Status != other.Status) return false; + if (Message != other.Message) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Status != 0) hash ^= Status.GetHashCode(); + if (Message.Length != 0) hash ^= Message.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (Status != 0) { + output.WriteRawTag(8); + output.WriteInt32(Status); + } + if (Message.Length != 0) { + output.WriteRawTag(18); + output.WriteString(Message); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Status != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(Status); + } + if (Message.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Message); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(HeaderProto other) { + if (other == null) { + return; + } + if (other.Status != 0) { + Status = other.Status; + } + if (other.Message.Length != 0) { + Message = other.Message; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + Status = input.ReadInt32(); + break; + } + case 18: { + Message = input.ReadString(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Header.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Header.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3084742c9566118c3c8fcb6beb5bd712d7c2ea4b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Header.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 870996bd75a1a4fbcbb120b1e1e66c37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Observation.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Observation.cs new file mode 100644 index 0000000000000000000000000000000000000000..3e23c8d991b742e2a67b9655e9c60899a898088c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Observation.cs @@ -0,0 +1,546 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/observation.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/observation.proto + internal static partial class ObservationReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/observation.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static ObservationReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjRtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0", + "aW9uLnByb3RvEhRjb21tdW5pY2F0b3Jfb2JqZWN0cyKPAwoQT2JzZXJ2YXRp", + "b25Qcm90bxINCgVzaGFwZRgBIAMoBRJEChBjb21wcmVzc2lvbl90eXBlGAIg", + "ASgOMiouY29tbXVuaWNhdG9yX29iamVjdHMuQ29tcHJlc3Npb25UeXBlUHJv", + "dG8SGQoPY29tcHJlc3NlZF9kYXRhGAMgASgMSAASRgoKZmxvYXRfZGF0YRgE", + "IAEoCzIwLmNvbW11bmljYXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG8u", + "RmxvYXREYXRhSAASIgoaY29tcHJlc3NlZF9jaGFubmVsX21hcHBpbmcYBSAD", + "KAUSHAoUZGltZW5zaW9uX3Byb3BlcnRpZXMYBiADKAUSRAoQb2JzZXJ2YXRp", + "b25fdHlwZRgHIAEoDjIqLmNvbW11bmljYXRvcl9vYmplY3RzLk9ic2VydmF0", + "aW9uVHlwZVByb3RvEgwKBG5hbWUYCCABKAkaGQoJRmxvYXREYXRhEgwKBGRh", + "dGEYASADKAJCEgoQb2JzZXJ2YXRpb25fZGF0YSopChRDb21wcmVzc2lvblR5", + "cGVQcm90bxIICgROT05FEAASBwoDUE5HEAEqQAoUT2JzZXJ2YXRpb25UeXBl", + "UHJvdG8SCwoHREVGQVVMVBAAEg8KC0dPQUxfU0lHTkFMEAEiBAgCEAIiBAgD", + "EANCJaoCIlVuaXR5Lk1MQWdlbnRzLkNvbW11bmljYXRvck9iamVjdHNiBnBy", + "b3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Unity.MLAgents.CommunicatorObjects.CompressionTypeProto), typeof(global::Unity.MLAgents.CommunicatorObjects.ObservationTypeProto), }, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.ObservationProto), global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Parser, new[]{ "Shape", "CompressionType", "CompressedData", "FloatData", "CompressedChannelMapping", "DimensionProperties", "ObservationType", "Name" }, new[]{ "ObservationData" }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData), global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData.Parser, new[]{ "Data" }, null, null, null)}) + })); + } + #endregion + + } + #region Enums + internal enum CompressionTypeProto { + [pbr::OriginalName("NONE")] None = 0, + [pbr::OriginalName("PNG")] Png = 1, + } + + internal enum ObservationTypeProto { + [pbr::OriginalName("DEFAULT")] Default = 0, + [pbr::OriginalName("GOAL_SIGNAL")] GoalSignal = 1, + } + + #endregion + + #region Messages + internal sealed partial class ObservationProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ObservationProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.ObservationReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ObservationProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ObservationProto(ObservationProto other) : this() { + shape_ = other.shape_.Clone(); + compressionType_ = other.compressionType_; + compressedChannelMapping_ = other.compressedChannelMapping_.Clone(); + dimensionProperties_ = other.dimensionProperties_.Clone(); + observationType_ = other.observationType_; + name_ = other.name_; + switch (other.ObservationDataCase) { + case ObservationDataOneofCase.CompressedData: + CompressedData = other.CompressedData; + break; + case ObservationDataOneofCase.FloatData: + FloatData = other.FloatData.Clone(); + break; + } + + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ObservationProto Clone() { + return new ObservationProto(this); + } + + /// Field number for the "shape" field. + public const int ShapeFieldNumber = 1; + private static readonly pb::FieldCodec _repeated_shape_codec + = pb::FieldCodec.ForInt32(10); + private readonly pbc::RepeatedField shape_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField Shape { + get { return shape_; } + } + + /// Field number for the "compression_type" field. + public const int CompressionTypeFieldNumber = 2; + private global::Unity.MLAgents.CommunicatorObjects.CompressionTypeProto compressionType_ = 0; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.CompressionTypeProto CompressionType { + get { return compressionType_; } + set { + compressionType_ = value; + } + } + + /// Field number for the "compressed_data" field. + public const int CompressedDataFieldNumber = 3; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pb::ByteString CompressedData { + get { return observationDataCase_ == ObservationDataOneofCase.CompressedData ? (pb::ByteString) observationData_ : pb::ByteString.Empty; } + set { + observationData_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + observationDataCase_ = ObservationDataOneofCase.CompressedData; + } + } + + /// Field number for the "float_data" field. + public const int FloatDataFieldNumber = 4; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData FloatData { + get { return observationDataCase_ == ObservationDataOneofCase.FloatData ? (global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData) observationData_ : null; } + set { + observationData_ = value; + observationDataCase_ = value == null ? ObservationDataOneofCase.None : ObservationDataOneofCase.FloatData; + } + } + + /// Field number for the "compressed_channel_mapping" field. + public const int CompressedChannelMappingFieldNumber = 5; + private static readonly pb::FieldCodec _repeated_compressedChannelMapping_codec + = pb::FieldCodec.ForInt32(42); + private readonly pbc::RepeatedField compressedChannelMapping_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField CompressedChannelMapping { + get { return compressedChannelMapping_; } + } + + /// Field number for the "dimension_properties" field. + public const int DimensionPropertiesFieldNumber = 6; + private static readonly pb::FieldCodec _repeated_dimensionProperties_codec + = pb::FieldCodec.ForInt32(50); + private readonly pbc::RepeatedField dimensionProperties_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField DimensionProperties { + get { return dimensionProperties_; } + } + + /// Field number for the "observation_type" field. + public const int ObservationTypeFieldNumber = 7; + private global::Unity.MLAgents.CommunicatorObjects.ObservationTypeProto observationType_ = 0; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.ObservationTypeProto ObservationType { + get { return observationType_; } + set { + observationType_ = value; + } + } + + /// Field number for the "name" field. + public const int NameFieldNumber = 8; + private string name_ = ""; + /// + /// Optional name of the observation. + /// This will be set to the ISensor name when writing, + /// and read into the ObservationSpec in the low-level API + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Name { + get { return name_; } + set { + name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + private object observationData_; + /// Enum of possible cases for the "observation_data" oneof. + public enum ObservationDataOneofCase { + None = 0, + CompressedData = 3, + FloatData = 4, + } + private ObservationDataOneofCase observationDataCase_ = ObservationDataOneofCase.None; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ObservationDataOneofCase ObservationDataCase { + get { return observationDataCase_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void ClearObservationData() { + observationDataCase_ = ObservationDataOneofCase.None; + observationData_ = null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as ObservationProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(ObservationProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!shape_.Equals(other.shape_)) return false; + if (CompressionType != other.CompressionType) return false; + if (CompressedData != other.CompressedData) return false; + if (!object.Equals(FloatData, other.FloatData)) return false; + if(!compressedChannelMapping_.Equals(other.compressedChannelMapping_)) return false; + if(!dimensionProperties_.Equals(other.dimensionProperties_)) return false; + if (ObservationType != other.ObservationType) return false; + if (Name != other.Name) return false; + if (ObservationDataCase != other.ObservationDataCase) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= shape_.GetHashCode(); + if (CompressionType != 0) hash ^= CompressionType.GetHashCode(); + if (observationDataCase_ == ObservationDataOneofCase.CompressedData) hash ^= CompressedData.GetHashCode(); + if (observationDataCase_ == ObservationDataOneofCase.FloatData) hash ^= FloatData.GetHashCode(); + hash ^= compressedChannelMapping_.GetHashCode(); + hash ^= dimensionProperties_.GetHashCode(); + if (ObservationType != 0) hash ^= ObservationType.GetHashCode(); + if (Name.Length != 0) hash ^= Name.GetHashCode(); + hash ^= (int) observationDataCase_; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + shape_.WriteTo(output, _repeated_shape_codec); + if (CompressionType != 0) { + output.WriteRawTag(16); + output.WriteEnum((int) CompressionType); + } + if (observationDataCase_ == ObservationDataOneofCase.CompressedData) { + output.WriteRawTag(26); + output.WriteBytes(CompressedData); + } + if (observationDataCase_ == ObservationDataOneofCase.FloatData) { + output.WriteRawTag(34); + output.WriteMessage(FloatData); + } + compressedChannelMapping_.WriteTo(output, _repeated_compressedChannelMapping_codec); + dimensionProperties_.WriteTo(output, _repeated_dimensionProperties_codec); + if (ObservationType != 0) { + output.WriteRawTag(56); + output.WriteEnum((int) ObservationType); + } + if (Name.Length != 0) { + output.WriteRawTag(66); + output.WriteString(Name); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += shape_.CalculateSize(_repeated_shape_codec); + if (CompressionType != 0) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) CompressionType); + } + if (observationDataCase_ == ObservationDataOneofCase.CompressedData) { + size += 1 + pb::CodedOutputStream.ComputeBytesSize(CompressedData); + } + if (observationDataCase_ == ObservationDataOneofCase.FloatData) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(FloatData); + } + size += compressedChannelMapping_.CalculateSize(_repeated_compressedChannelMapping_codec); + size += dimensionProperties_.CalculateSize(_repeated_dimensionProperties_codec); + if (ObservationType != 0) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ObservationType); + } + if (Name.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Name); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(ObservationProto other) { + if (other == null) { + return; + } + shape_.Add(other.shape_); + if (other.CompressionType != 0) { + CompressionType = other.CompressionType; + } + compressedChannelMapping_.Add(other.compressedChannelMapping_); + dimensionProperties_.Add(other.dimensionProperties_); + if (other.ObservationType != 0) { + ObservationType = other.ObservationType; + } + if (other.Name.Length != 0) { + Name = other.Name; + } + switch (other.ObservationDataCase) { + case ObservationDataOneofCase.CompressedData: + CompressedData = other.CompressedData; + break; + case ObservationDataOneofCase.FloatData: + if (FloatData == null) { + FloatData = new global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData(); + } + FloatData.MergeFrom(other.FloatData); + break; + } + + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: + case 8: { + shape_.AddEntriesFrom(input, _repeated_shape_codec); + break; + } + case 16: { + compressionType_ = (global::Unity.MLAgents.CommunicatorObjects.CompressionTypeProto) input.ReadEnum(); + break; + } + case 26: { + CompressedData = input.ReadBytes(); + break; + } + case 34: { + global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData subBuilder = new global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Types.FloatData(); + if (observationDataCase_ == ObservationDataOneofCase.FloatData) { + subBuilder.MergeFrom(FloatData); + } + input.ReadMessage(subBuilder); + FloatData = subBuilder; + break; + } + case 42: + case 40: { + compressedChannelMapping_.AddEntriesFrom(input, _repeated_compressedChannelMapping_codec); + break; + } + case 50: + case 48: { + dimensionProperties_.AddEntriesFrom(input, _repeated_dimensionProperties_codec); + break; + } + case 56: { + observationType_ = (global::Unity.MLAgents.CommunicatorObjects.ObservationTypeProto) input.ReadEnum(); + break; + } + case 66: { + Name = input.ReadString(); + break; + } + } + } + } + + #region Nested types + /// Container for nested types declared in the ObservationProto message type. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static partial class Types { + internal sealed partial class FloatData : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new FloatData()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.ObservationProto.Descriptor.NestedTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public FloatData() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public FloatData(FloatData other) : this() { + data_ = other.data_.Clone(); + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public FloatData Clone() { + return new FloatData(this); + } + + /// Field number for the "data" field. + public const int DataFieldNumber = 1; + private static readonly pb::FieldCodec _repeated_data_codec + = pb::FieldCodec.ForFloat(10); + private readonly pbc::RepeatedField data_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField Data { + get { return data_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as FloatData); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(FloatData other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!data_.Equals(other.data_)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= data_.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + data_.WriteTo(output, _repeated_data_codec); + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += data_.CalculateSize(_repeated_data_codec); + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(FloatData other) { + if (other == null) { + return; + } + data_.Add(other.data_); + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: + case 13: { + data_.AddEntriesFrom(input, _repeated_data_codec); + break; + } + } + } + } + + } + + } + #endregion + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Observation.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Observation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..971fead69c473f5f6bec650515da5e0d2ea366d5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Observation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fbba5f80821d4f02b4239a8e16eebfa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/SpaceType.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/SpaceType.cs new file mode 100644 index 0000000000000000000000000000000000000000..d3bf7cf22002df033bf5e928c88fe6dce4bae192 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/SpaceType.cs @@ -0,0 +1,48 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/space_type.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/space_type.proto + internal static partial class SpaceTypeReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/space_type.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static SpaceTypeReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjNtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3NwYWNlX3R5", + "cGUucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzKi4KDlNwYWNlVHlwZVBy", + "b3RvEgwKCGRpc2NyZXRlEAASDgoKY29udGludW91cxABQiWqAiJVbml0eS5N", + "TEFnZW50cy5Db21tdW5pY2F0b3JPYmplY3RzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Unity.MLAgents.CommunicatorObjects.SpaceTypeProto), }, null)); + } + #endregion + + } + #region Enums + internal enum SpaceTypeProto { + [pbr::OriginalName("discrete")] Discrete = 0, + [pbr::OriginalName("continuous")] Continuous = 1, + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/SpaceType.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/SpaceType.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7b6ada73eaf63b66b8d1995eabbd76fb614439ec --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/SpaceType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3934602aadbe9471ca973685059ef04a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/TrainingAnalytics.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/TrainingAnalytics.cs new file mode 100644 index 0000000000000000000000000000000000000000..042357f28062745fc7ce0c1067235a6f8d17c023 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/TrainingAnalytics.cs @@ -0,0 +1,907 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/training_analytics.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/training_analytics.proto + internal static partial class TrainingAnalyticsReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/training_analytics.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static TrainingAnalyticsReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjttbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3RyYWluaW5n", + "X2FuYWx5dGljcy5wcm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMi7gEKHlRy", + "YWluaW5nRW52aXJvbm1lbnRJbml0aWFsaXplZBIYChBtbGFnZW50c192ZXJz", + "aW9uGAEgASgJEh0KFW1sYWdlbnRzX2VudnNfdmVyc2lvbhgCIAEoCRIWCg5w", + "eXRob25fdmVyc2lvbhgDIAEoCRIVCg10b3JjaF92ZXJzaW9uGAQgASgJEhkK", + "EXRvcmNoX2RldmljZV90eXBlGAUgASgJEhAKCG51bV9lbnZzGAYgASgFEiIK", + "Gm51bV9lbnZpcm9ubWVudF9wYXJhbWV0ZXJzGAcgASgFEhMKC3J1bl9vcHRp", + "b25zGAggASgJIr0DChtUcmFpbmluZ0JlaGF2aW9ySW5pdGlhbGl6ZWQSFQoN", + "YmVoYXZpb3JfbmFtZRgBIAEoCRIUCgx0cmFpbmVyX3R5cGUYAiABKAkSIAoY", + "ZXh0cmluc2ljX3Jld2FyZF9lbmFibGVkGAMgASgIEhsKE2dhaWxfcmV3YXJk", + "X2VuYWJsZWQYBCABKAgSIAoYY3VyaW9zaXR5X3Jld2FyZF9lbmFibGVkGAUg", + "ASgIEhoKEnJuZF9yZXdhcmRfZW5hYmxlZBgGIAEoCBIiChpiZWhhdmlvcmFs", + "X2Nsb25pbmdfZW5hYmxlZBgHIAEoCBIZChFyZWN1cnJlbnRfZW5hYmxlZBgI", + "IAEoCBIWCg52aXN1YWxfZW5jb2RlchgJIAEoCRIaChJudW1fbmV0d29ya19s", + "YXllcnMYCiABKAUSIAoYbnVtX25ldHdvcmtfaGlkZGVuX3VuaXRzGAsgASgF", + "EhgKEHRyYWluZXJfdGhyZWFkZWQYDCABKAgSGQoRc2VsZl9wbGF5X2VuYWJs", + "ZWQYDSABKAgSGgoSY3VycmljdWx1bV9lbmFibGVkGA4gASgIEg4KBmNvbmZp", + "ZxgPIAEoCUIlqgIiVW5pdHkuTUxBZ2VudHMuQ29tbXVuaWNhdG9yT2JqZWN0", + "c2IGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.TrainingEnvironmentInitialized), global::Unity.MLAgents.CommunicatorObjects.TrainingEnvironmentInitialized.Parser, new[]{ "MlagentsVersion", "MlagentsEnvsVersion", "PythonVersion", "TorchVersion", "TorchDeviceType", "NumEnvs", "NumEnvironmentParameters", "RunOptions" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.TrainingBehaviorInitialized), global::Unity.MLAgents.CommunicatorObjects.TrainingBehaviorInitialized.Parser, new[]{ "BehaviorName", "TrainerType", "ExtrinsicRewardEnabled", "GailRewardEnabled", "CuriosityRewardEnabled", "RndRewardEnabled", "BehavioralCloningEnabled", "RecurrentEnabled", "VisualEncoder", "NumNetworkLayers", "NumNetworkHiddenUnits", "TrainerThreaded", "SelfPlayEnabled", "CurriculumEnabled", "Config" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class TrainingEnvironmentInitialized : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new TrainingEnvironmentInitialized()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.TrainingAnalyticsReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public TrainingEnvironmentInitialized() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public TrainingEnvironmentInitialized(TrainingEnvironmentInitialized other) : this() { + mlagentsVersion_ = other.mlagentsVersion_; + mlagentsEnvsVersion_ = other.mlagentsEnvsVersion_; + pythonVersion_ = other.pythonVersion_; + torchVersion_ = other.torchVersion_; + torchDeviceType_ = other.torchDeviceType_; + numEnvs_ = other.numEnvs_; + numEnvironmentParameters_ = other.numEnvironmentParameters_; + runOptions_ = other.runOptions_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public TrainingEnvironmentInitialized Clone() { + return new TrainingEnvironmentInitialized(this); + } + + /// Field number for the "mlagents_version" field. + public const int MlagentsVersionFieldNumber = 1; + private string mlagentsVersion_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string MlagentsVersion { + get { return mlagentsVersion_; } + set { + mlagentsVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "mlagents_envs_version" field. + public const int MlagentsEnvsVersionFieldNumber = 2; + private string mlagentsEnvsVersion_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string MlagentsEnvsVersion { + get { return mlagentsEnvsVersion_; } + set { + mlagentsEnvsVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "python_version" field. + public const int PythonVersionFieldNumber = 3; + private string pythonVersion_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string PythonVersion { + get { return pythonVersion_; } + set { + pythonVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "torch_version" field. + public const int TorchVersionFieldNumber = 4; + private string torchVersion_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string TorchVersion { + get { return torchVersion_; } + set { + torchVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "torch_device_type" field. + public const int TorchDeviceTypeFieldNumber = 5; + private string torchDeviceType_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string TorchDeviceType { + get { return torchDeviceType_; } + set { + torchDeviceType_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "num_envs" field. + public const int NumEnvsFieldNumber = 6; + private int numEnvs_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumEnvs { + get { return numEnvs_; } + set { + numEnvs_ = value; + } + } + + /// Field number for the "num_environment_parameters" field. + public const int NumEnvironmentParametersFieldNumber = 7; + private int numEnvironmentParameters_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumEnvironmentParameters { + get { return numEnvironmentParameters_; } + set { + numEnvironmentParameters_ = value; + } + } + + /// Field number for the "run_options" field. + public const int RunOptionsFieldNumber = 8; + private string runOptions_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string RunOptions { + get { return runOptions_; } + set { + runOptions_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as TrainingEnvironmentInitialized); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(TrainingEnvironmentInitialized other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (MlagentsVersion != other.MlagentsVersion) return false; + if (MlagentsEnvsVersion != other.MlagentsEnvsVersion) return false; + if (PythonVersion != other.PythonVersion) return false; + if (TorchVersion != other.TorchVersion) return false; + if (TorchDeviceType != other.TorchDeviceType) return false; + if (NumEnvs != other.NumEnvs) return false; + if (NumEnvironmentParameters != other.NumEnvironmentParameters) return false; + if (RunOptions != other.RunOptions) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (MlagentsVersion.Length != 0) hash ^= MlagentsVersion.GetHashCode(); + if (MlagentsEnvsVersion.Length != 0) hash ^= MlagentsEnvsVersion.GetHashCode(); + if (PythonVersion.Length != 0) hash ^= PythonVersion.GetHashCode(); + if (TorchVersion.Length != 0) hash ^= TorchVersion.GetHashCode(); + if (TorchDeviceType.Length != 0) hash ^= TorchDeviceType.GetHashCode(); + if (NumEnvs != 0) hash ^= NumEnvs.GetHashCode(); + if (NumEnvironmentParameters != 0) hash ^= NumEnvironmentParameters.GetHashCode(); + if (RunOptions.Length != 0) hash ^= RunOptions.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (MlagentsVersion.Length != 0) { + output.WriteRawTag(10); + output.WriteString(MlagentsVersion); + } + if (MlagentsEnvsVersion.Length != 0) { + output.WriteRawTag(18); + output.WriteString(MlagentsEnvsVersion); + } + if (PythonVersion.Length != 0) { + output.WriteRawTag(26); + output.WriteString(PythonVersion); + } + if (TorchVersion.Length != 0) { + output.WriteRawTag(34); + output.WriteString(TorchVersion); + } + if (TorchDeviceType.Length != 0) { + output.WriteRawTag(42); + output.WriteString(TorchDeviceType); + } + if (NumEnvs != 0) { + output.WriteRawTag(48); + output.WriteInt32(NumEnvs); + } + if (NumEnvironmentParameters != 0) { + output.WriteRawTag(56); + output.WriteInt32(NumEnvironmentParameters); + } + if (RunOptions.Length != 0) { + output.WriteRawTag(66); + output.WriteString(RunOptions); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (MlagentsVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(MlagentsVersion); + } + if (MlagentsEnvsVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(MlagentsEnvsVersion); + } + if (PythonVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(PythonVersion); + } + if (TorchVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(TorchVersion); + } + if (TorchDeviceType.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(TorchDeviceType); + } + if (NumEnvs != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumEnvs); + } + if (NumEnvironmentParameters != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumEnvironmentParameters); + } + if (RunOptions.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(RunOptions); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(TrainingEnvironmentInitialized other) { + if (other == null) { + return; + } + if (other.MlagentsVersion.Length != 0) { + MlagentsVersion = other.MlagentsVersion; + } + if (other.MlagentsEnvsVersion.Length != 0) { + MlagentsEnvsVersion = other.MlagentsEnvsVersion; + } + if (other.PythonVersion.Length != 0) { + PythonVersion = other.PythonVersion; + } + if (other.TorchVersion.Length != 0) { + TorchVersion = other.TorchVersion; + } + if (other.TorchDeviceType.Length != 0) { + TorchDeviceType = other.TorchDeviceType; + } + if (other.NumEnvs != 0) { + NumEnvs = other.NumEnvs; + } + if (other.NumEnvironmentParameters != 0) { + NumEnvironmentParameters = other.NumEnvironmentParameters; + } + if (other.RunOptions.Length != 0) { + RunOptions = other.RunOptions; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + MlagentsVersion = input.ReadString(); + break; + } + case 18: { + MlagentsEnvsVersion = input.ReadString(); + break; + } + case 26: { + PythonVersion = input.ReadString(); + break; + } + case 34: { + TorchVersion = input.ReadString(); + break; + } + case 42: { + TorchDeviceType = input.ReadString(); + break; + } + case 48: { + NumEnvs = input.ReadInt32(); + break; + } + case 56: { + NumEnvironmentParameters = input.ReadInt32(); + break; + } + case 66: { + RunOptions = input.ReadString(); + break; + } + } + } + } + + } + + internal sealed partial class TrainingBehaviorInitialized : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new TrainingBehaviorInitialized()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.TrainingAnalyticsReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public TrainingBehaviorInitialized() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public TrainingBehaviorInitialized(TrainingBehaviorInitialized other) : this() { + behaviorName_ = other.behaviorName_; + trainerType_ = other.trainerType_; + extrinsicRewardEnabled_ = other.extrinsicRewardEnabled_; + gailRewardEnabled_ = other.gailRewardEnabled_; + curiosityRewardEnabled_ = other.curiosityRewardEnabled_; + rndRewardEnabled_ = other.rndRewardEnabled_; + behavioralCloningEnabled_ = other.behavioralCloningEnabled_; + recurrentEnabled_ = other.recurrentEnabled_; + visualEncoder_ = other.visualEncoder_; + numNetworkLayers_ = other.numNetworkLayers_; + numNetworkHiddenUnits_ = other.numNetworkHiddenUnits_; + trainerThreaded_ = other.trainerThreaded_; + selfPlayEnabled_ = other.selfPlayEnabled_; + curriculumEnabled_ = other.curriculumEnabled_; + config_ = other.config_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public TrainingBehaviorInitialized Clone() { + return new TrainingBehaviorInitialized(this); + } + + /// Field number for the "behavior_name" field. + public const int BehaviorNameFieldNumber = 1; + private string behaviorName_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string BehaviorName { + get { return behaviorName_; } + set { + behaviorName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "trainer_type" field. + public const int TrainerTypeFieldNumber = 2; + private string trainerType_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string TrainerType { + get { return trainerType_; } + set { + trainerType_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "extrinsic_reward_enabled" field. + public const int ExtrinsicRewardEnabledFieldNumber = 3; + private bool extrinsicRewardEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool ExtrinsicRewardEnabled { + get { return extrinsicRewardEnabled_; } + set { + extrinsicRewardEnabled_ = value; + } + } + + /// Field number for the "gail_reward_enabled" field. + public const int GailRewardEnabledFieldNumber = 4; + private bool gailRewardEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool GailRewardEnabled { + get { return gailRewardEnabled_; } + set { + gailRewardEnabled_ = value; + } + } + + /// Field number for the "curiosity_reward_enabled" field. + public const int CuriosityRewardEnabledFieldNumber = 5; + private bool curiosityRewardEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool CuriosityRewardEnabled { + get { return curiosityRewardEnabled_; } + set { + curiosityRewardEnabled_ = value; + } + } + + /// Field number for the "rnd_reward_enabled" field. + public const int RndRewardEnabledFieldNumber = 6; + private bool rndRewardEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool RndRewardEnabled { + get { return rndRewardEnabled_; } + set { + rndRewardEnabled_ = value; + } + } + + /// Field number for the "behavioral_cloning_enabled" field. + public const int BehavioralCloningEnabledFieldNumber = 7; + private bool behavioralCloningEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool BehavioralCloningEnabled { + get { return behavioralCloningEnabled_; } + set { + behavioralCloningEnabled_ = value; + } + } + + /// Field number for the "recurrent_enabled" field. + public const int RecurrentEnabledFieldNumber = 8; + private bool recurrentEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool RecurrentEnabled { + get { return recurrentEnabled_; } + set { + recurrentEnabled_ = value; + } + } + + /// Field number for the "visual_encoder" field. + public const int VisualEncoderFieldNumber = 9; + private string visualEncoder_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string VisualEncoder { + get { return visualEncoder_; } + set { + visualEncoder_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "num_network_layers" field. + public const int NumNetworkLayersFieldNumber = 10; + private int numNetworkLayers_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumNetworkLayers { + get { return numNetworkLayers_; } + set { + numNetworkLayers_ = value; + } + } + + /// Field number for the "num_network_hidden_units" field. + public const int NumNetworkHiddenUnitsFieldNumber = 11; + private int numNetworkHiddenUnits_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumNetworkHiddenUnits { + get { return numNetworkHiddenUnits_; } + set { + numNetworkHiddenUnits_ = value; + } + } + + /// Field number for the "trainer_threaded" field. + public const int TrainerThreadedFieldNumber = 12; + private bool trainerThreaded_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool TrainerThreaded { + get { return trainerThreaded_; } + set { + trainerThreaded_ = value; + } + } + + /// Field number for the "self_play_enabled" field. + public const int SelfPlayEnabledFieldNumber = 13; + private bool selfPlayEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool SelfPlayEnabled { + get { return selfPlayEnabled_; } + set { + selfPlayEnabled_ = value; + } + } + + /// Field number for the "curriculum_enabled" field. + public const int CurriculumEnabledFieldNumber = 14; + private bool curriculumEnabled_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool CurriculumEnabled { + get { return curriculumEnabled_; } + set { + curriculumEnabled_ = value; + } + } + + /// Field number for the "config" field. + public const int ConfigFieldNumber = 15; + private string config_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Config { + get { return config_; } + set { + config_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as TrainingBehaviorInitialized); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(TrainingBehaviorInitialized other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (BehaviorName != other.BehaviorName) return false; + if (TrainerType != other.TrainerType) return false; + if (ExtrinsicRewardEnabled != other.ExtrinsicRewardEnabled) return false; + if (GailRewardEnabled != other.GailRewardEnabled) return false; + if (CuriosityRewardEnabled != other.CuriosityRewardEnabled) return false; + if (RndRewardEnabled != other.RndRewardEnabled) return false; + if (BehavioralCloningEnabled != other.BehavioralCloningEnabled) return false; + if (RecurrentEnabled != other.RecurrentEnabled) return false; + if (VisualEncoder != other.VisualEncoder) return false; + if (NumNetworkLayers != other.NumNetworkLayers) return false; + if (NumNetworkHiddenUnits != other.NumNetworkHiddenUnits) return false; + if (TrainerThreaded != other.TrainerThreaded) return false; + if (SelfPlayEnabled != other.SelfPlayEnabled) return false; + if (CurriculumEnabled != other.CurriculumEnabled) return false; + if (Config != other.Config) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (BehaviorName.Length != 0) hash ^= BehaviorName.GetHashCode(); + if (TrainerType.Length != 0) hash ^= TrainerType.GetHashCode(); + if (ExtrinsicRewardEnabled != false) hash ^= ExtrinsicRewardEnabled.GetHashCode(); + if (GailRewardEnabled != false) hash ^= GailRewardEnabled.GetHashCode(); + if (CuriosityRewardEnabled != false) hash ^= CuriosityRewardEnabled.GetHashCode(); + if (RndRewardEnabled != false) hash ^= RndRewardEnabled.GetHashCode(); + if (BehavioralCloningEnabled != false) hash ^= BehavioralCloningEnabled.GetHashCode(); + if (RecurrentEnabled != false) hash ^= RecurrentEnabled.GetHashCode(); + if (VisualEncoder.Length != 0) hash ^= VisualEncoder.GetHashCode(); + if (NumNetworkLayers != 0) hash ^= NumNetworkLayers.GetHashCode(); + if (NumNetworkHiddenUnits != 0) hash ^= NumNetworkHiddenUnits.GetHashCode(); + if (TrainerThreaded != false) hash ^= TrainerThreaded.GetHashCode(); + if (SelfPlayEnabled != false) hash ^= SelfPlayEnabled.GetHashCode(); + if (CurriculumEnabled != false) hash ^= CurriculumEnabled.GetHashCode(); + if (Config.Length != 0) hash ^= Config.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (BehaviorName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(BehaviorName); + } + if (TrainerType.Length != 0) { + output.WriteRawTag(18); + output.WriteString(TrainerType); + } + if (ExtrinsicRewardEnabled != false) { + output.WriteRawTag(24); + output.WriteBool(ExtrinsicRewardEnabled); + } + if (GailRewardEnabled != false) { + output.WriteRawTag(32); + output.WriteBool(GailRewardEnabled); + } + if (CuriosityRewardEnabled != false) { + output.WriteRawTag(40); + output.WriteBool(CuriosityRewardEnabled); + } + if (RndRewardEnabled != false) { + output.WriteRawTag(48); + output.WriteBool(RndRewardEnabled); + } + if (BehavioralCloningEnabled != false) { + output.WriteRawTag(56); + output.WriteBool(BehavioralCloningEnabled); + } + if (RecurrentEnabled != false) { + output.WriteRawTag(64); + output.WriteBool(RecurrentEnabled); + } + if (VisualEncoder.Length != 0) { + output.WriteRawTag(74); + output.WriteString(VisualEncoder); + } + if (NumNetworkLayers != 0) { + output.WriteRawTag(80); + output.WriteInt32(NumNetworkLayers); + } + if (NumNetworkHiddenUnits != 0) { + output.WriteRawTag(88); + output.WriteInt32(NumNetworkHiddenUnits); + } + if (TrainerThreaded != false) { + output.WriteRawTag(96); + output.WriteBool(TrainerThreaded); + } + if (SelfPlayEnabled != false) { + output.WriteRawTag(104); + output.WriteBool(SelfPlayEnabled); + } + if (CurriculumEnabled != false) { + output.WriteRawTag(112); + output.WriteBool(CurriculumEnabled); + } + if (Config.Length != 0) { + output.WriteRawTag(122); + output.WriteString(Config); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (BehaviorName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(BehaviorName); + } + if (TrainerType.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(TrainerType); + } + if (ExtrinsicRewardEnabled != false) { + size += 1 + 1; + } + if (GailRewardEnabled != false) { + size += 1 + 1; + } + if (CuriosityRewardEnabled != false) { + size += 1 + 1; + } + if (RndRewardEnabled != false) { + size += 1 + 1; + } + if (BehavioralCloningEnabled != false) { + size += 1 + 1; + } + if (RecurrentEnabled != false) { + size += 1 + 1; + } + if (VisualEncoder.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(VisualEncoder); + } + if (NumNetworkLayers != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumNetworkLayers); + } + if (NumNetworkHiddenUnits != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumNetworkHiddenUnits); + } + if (TrainerThreaded != false) { + size += 1 + 1; + } + if (SelfPlayEnabled != false) { + size += 1 + 1; + } + if (CurriculumEnabled != false) { + size += 1 + 1; + } + if (Config.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Config); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(TrainingBehaviorInitialized other) { + if (other == null) { + return; + } + if (other.BehaviorName.Length != 0) { + BehaviorName = other.BehaviorName; + } + if (other.TrainerType.Length != 0) { + TrainerType = other.TrainerType; + } + if (other.ExtrinsicRewardEnabled != false) { + ExtrinsicRewardEnabled = other.ExtrinsicRewardEnabled; + } + if (other.GailRewardEnabled != false) { + GailRewardEnabled = other.GailRewardEnabled; + } + if (other.CuriosityRewardEnabled != false) { + CuriosityRewardEnabled = other.CuriosityRewardEnabled; + } + if (other.RndRewardEnabled != false) { + RndRewardEnabled = other.RndRewardEnabled; + } + if (other.BehavioralCloningEnabled != false) { + BehavioralCloningEnabled = other.BehavioralCloningEnabled; + } + if (other.RecurrentEnabled != false) { + RecurrentEnabled = other.RecurrentEnabled; + } + if (other.VisualEncoder.Length != 0) { + VisualEncoder = other.VisualEncoder; + } + if (other.NumNetworkLayers != 0) { + NumNetworkLayers = other.NumNetworkLayers; + } + if (other.NumNetworkHiddenUnits != 0) { + NumNetworkHiddenUnits = other.NumNetworkHiddenUnits; + } + if (other.TrainerThreaded != false) { + TrainerThreaded = other.TrainerThreaded; + } + if (other.SelfPlayEnabled != false) { + SelfPlayEnabled = other.SelfPlayEnabled; + } + if (other.CurriculumEnabled != false) { + CurriculumEnabled = other.CurriculumEnabled; + } + if (other.Config.Length != 0) { + Config = other.Config; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + BehaviorName = input.ReadString(); + break; + } + case 18: { + TrainerType = input.ReadString(); + break; + } + case 24: { + ExtrinsicRewardEnabled = input.ReadBool(); + break; + } + case 32: { + GailRewardEnabled = input.ReadBool(); + break; + } + case 40: { + CuriosityRewardEnabled = input.ReadBool(); + break; + } + case 48: { + RndRewardEnabled = input.ReadBool(); + break; + } + case 56: { + BehavioralCloningEnabled = input.ReadBool(); + break; + } + case 64: { + RecurrentEnabled = input.ReadBool(); + break; + } + case 74: { + VisualEncoder = input.ReadString(); + break; + } + case 80: { + NumNetworkLayers = input.ReadInt32(); + break; + } + case 88: { + NumNetworkHiddenUnits = input.ReadInt32(); + break; + } + case 96: { + TrainerThreaded = input.ReadBool(); + break; + } + case 104: { + SelfPlayEnabled = input.ReadBool(); + break; + } + case 112: { + CurriculumEnabled = input.ReadBool(); + break; + } + case 122: { + Config = input.ReadString(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/TrainingAnalytics.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/TrainingAnalytics.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8e9d358feba7f08adcd8bf509e173c354308d707 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/TrainingAnalytics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e6ac06a3931742d798cf922de6b99f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityInput.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityInput.cs new file mode 100644 index 0000000000000000000000000000000000000000..9497aa0ad8f5caba9513d5d4a80c9fcb22c0f2e2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityInput.cs @@ -0,0 +1,220 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_input.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_input.proto + internal static partial class UnityInputReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_input.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityInputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjRtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X2lu", + "cHV0LnByb3RvEhRjb21tdW5pY2F0b3Jfb2JqZWN0cxo3bWxhZ2VudHNfZW52", + "cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy91bml0eV9ybF9pbnB1dC5wcm90bxpG", + "bWxhZ2VudHNfZW52cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy91bml0eV9ybF9p", + "bml0aWFsaXphdGlvbl9pbnB1dC5wcm90byKkAQoPVW5pdHlJbnB1dFByb3Rv", + "EjkKCHJsX2lucHV0GAEgASgLMicuY29tbXVuaWNhdG9yX29iamVjdHMuVW5p", + "dHlSTElucHV0UHJvdG8SVgoXcmxfaW5pdGlhbGl6YXRpb25faW5wdXQYAiAB", + "KAsyNS5jb21tdW5pY2F0b3Jfb2JqZWN0cy5Vbml0eVJMSW5pdGlhbGl6YXRp", + "b25JbnB1dFByb3RvQiWqAiJVbml0eS5NTEFnZW50cy5Db21tdW5pY2F0b3JP", + "YmplY3RzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.UnityRlInputReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.UnityRlInitializationInputReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityInputProto), global::Unity.MLAgents.CommunicatorObjects.UnityInputProto.Parser, new[]{ "RlInput", "RlInitializationInput" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class UnityInputProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityInputProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityInputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityInputProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityInputProto(UnityInputProto other) : this() { + RlInput = other.rlInput_ != null ? other.RlInput.Clone() : null; + RlInitializationInput = other.rlInitializationInput_ != null ? other.RlInitializationInput.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityInputProto Clone() { + return new UnityInputProto(this); + } + + /// Field number for the "rl_input" field. + public const int RlInputFieldNumber = 1; + private global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto rlInput_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto RlInput { + get { return rlInput_; } + set { + rlInput_ = value; + } + } + + /// Field number for the "rl_initialization_input" field. + public const int RlInitializationInputFieldNumber = 2; + private global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationInputProto rlInitializationInput_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationInputProto RlInitializationInput { + get { return rlInitializationInput_; } + set { + rlInitializationInput_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityInputProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityInputProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(RlInput, other.RlInput)) return false; + if (!object.Equals(RlInitializationInput, other.RlInitializationInput)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (rlInput_ != null) hash ^= RlInput.GetHashCode(); + if (rlInitializationInput_ != null) hash ^= RlInitializationInput.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (rlInput_ != null) { + output.WriteRawTag(10); + output.WriteMessage(RlInput); + } + if (rlInitializationInput_ != null) { + output.WriteRawTag(18); + output.WriteMessage(RlInitializationInput); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (rlInput_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(RlInput); + } + if (rlInitializationInput_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(RlInitializationInput); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityInputProto other) { + if (other == null) { + return; + } + if (other.rlInput_ != null) { + if (rlInput_ == null) { + rlInput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto(); + } + RlInput.MergeFrom(other.RlInput); + } + if (other.rlInitializationInput_ != null) { + if (rlInitializationInput_ == null) { + rlInitializationInput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationInputProto(); + } + RlInitializationInput.MergeFrom(other.RlInitializationInput); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rlInput_ == null) { + rlInput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto(); + } + input.ReadMessage(rlInput_); + break; + } + case 18: { + if (rlInitializationInput_ == null) { + rlInitializationInput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationInputProto(); + } + input.ReadMessage(rlInitializationInput_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityInput.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityInput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..32f1aa8334a622d59ca498818df9ecad2d673661 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13de5026cc0834f558fe971eb93c850e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityMessage.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityMessage.cs new file mode 100644 index 0000000000000000000000000000000000000000..b98264dc44a0eaf89d7ae48726c57f4bf884d25a --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityMessage.cs @@ -0,0 +1,255 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_message.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_message.proto + internal static partial class UnityMessageReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_message.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityMessageReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjZtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X21l", + "c3NhZ2UucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjVtbGFnZW50c19l", + "bnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X291dHB1dC5wcm90bxo0", + "bWxhZ2VudHNfZW52cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy91bml0eV9pbnB1", + "dC5wcm90bxovbWxhZ2VudHNfZW52cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy9o", + "ZWFkZXIucHJvdG8iwAEKEVVuaXR5TWVzc2FnZVByb3RvEjEKBmhlYWRlchgB", + "IAEoCzIhLmNvbW11bmljYXRvcl9vYmplY3RzLkhlYWRlclByb3RvEjwKDHVu", + "aXR5X291dHB1dBgCIAEoCzImLmNvbW11bmljYXRvcl9vYmplY3RzLlVuaXR5", + "T3V0cHV0UHJvdG8SOgoLdW5pdHlfaW5wdXQYAyABKAsyJS5jb21tdW5pY2F0", + "b3Jfb2JqZWN0cy5Vbml0eUlucHV0UHJvdG9CJaoCIlVuaXR5Lk1MQWdlbnRz", + "LkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.UnityOutputReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.UnityInputReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.HeaderReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto), global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto.Parser, new[]{ "Header", "UnityOutput", "UnityInput" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class UnityMessageProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityMessageProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityMessageReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityMessageProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityMessageProto(UnityMessageProto other) : this() { + Header = other.header_ != null ? other.Header.Clone() : null; + UnityOutput = other.unityOutput_ != null ? other.UnityOutput.Clone() : null; + UnityInput = other.unityInput_ != null ? other.UnityInput.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityMessageProto Clone() { + return new UnityMessageProto(this); + } + + /// Field number for the "header" field. + public const int HeaderFieldNumber = 1; + private global::Unity.MLAgents.CommunicatorObjects.HeaderProto header_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.HeaderProto Header { + get { return header_; } + set { + header_ = value; + } + } + + /// Field number for the "unity_output" field. + public const int UnityOutputFieldNumber = 2; + private global::Unity.MLAgents.CommunicatorObjects.UnityOutputProto unityOutput_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityOutputProto UnityOutput { + get { return unityOutput_; } + set { + unityOutput_ = value; + } + } + + /// Field number for the "unity_input" field. + public const int UnityInputFieldNumber = 3; + private global::Unity.MLAgents.CommunicatorObjects.UnityInputProto unityInput_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityInputProto UnityInput { + get { return unityInput_; } + set { + unityInput_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityMessageProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityMessageProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Header, other.Header)) return false; + if (!object.Equals(UnityOutput, other.UnityOutput)) return false; + if (!object.Equals(UnityInput, other.UnityInput)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (header_ != null) hash ^= Header.GetHashCode(); + if (unityOutput_ != null) hash ^= UnityOutput.GetHashCode(); + if (unityInput_ != null) hash ^= UnityInput.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (header_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Header); + } + if (unityOutput_ != null) { + output.WriteRawTag(18); + output.WriteMessage(UnityOutput); + } + if (unityInput_ != null) { + output.WriteRawTag(26); + output.WriteMessage(UnityInput); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (header_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Header); + } + if (unityOutput_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(UnityOutput); + } + if (unityInput_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(UnityInput); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityMessageProto other) { + if (other == null) { + return; + } + if (other.header_ != null) { + if (header_ == null) { + header_ = new global::Unity.MLAgents.CommunicatorObjects.HeaderProto(); + } + Header.MergeFrom(other.Header); + } + if (other.unityOutput_ != null) { + if (unityOutput_ == null) { + unityOutput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityOutputProto(); + } + UnityOutput.MergeFrom(other.UnityOutput); + } + if (other.unityInput_ != null) { + if (unityInput_ == null) { + unityInput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityInputProto(); + } + UnityInput.MergeFrom(other.UnityInput); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (header_ == null) { + header_ = new global::Unity.MLAgents.CommunicatorObjects.HeaderProto(); + } + input.ReadMessage(header_); + break; + } + case 18: { + if (unityOutput_ == null) { + unityOutput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityOutputProto(); + } + input.ReadMessage(unityOutput_); + break; + } + case 26: { + if (unityInput_ == null) { + unityInput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityInputProto(); + } + input.ReadMessage(unityInput_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityMessage.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityMessage.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fe03de4e4ff49f68b7ff775fe4fb7a515c947678 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2189c32296994576b0ef0aaa2b78142 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityOutput.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityOutput.cs new file mode 100644 index 0000000000000000000000000000000000000000..efb255d25138291a7d69227cd747f1d21a339b3b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityOutput.cs @@ -0,0 +1,220 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_output.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_output.proto + internal static partial class UnityOutputReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_output.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityOutputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjVtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X291", + "dHB1dC5wcm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMaOG1sYWdlbnRzX2Vu", + "dnMvY29tbXVuaWNhdG9yX29iamVjdHMvdW5pdHlfcmxfb3V0cHV0LnByb3Rv", + "GkdtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X3Js", + "X2luaXRpYWxpemF0aW9uX291dHB1dC5wcm90byKpAQoQVW5pdHlPdXRwdXRQ", + "cm90bxI7CglybF9vdXRwdXQYASABKAsyKC5jb21tdW5pY2F0b3Jfb2JqZWN0", + "cy5Vbml0eVJMT3V0cHV0UHJvdG8SWAoYcmxfaW5pdGlhbGl6YXRpb25fb3V0", + "cHV0GAIgASgLMjYuY29tbXVuaWNhdG9yX29iamVjdHMuVW5pdHlSTEluaXRp", + "YWxpemF0aW9uT3V0cHV0UHJvdG9CJaoCIlVuaXR5Lk1MQWdlbnRzLkNvbW11", + "bmljYXRvck9iamVjdHNiBnByb3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.UnityRlOutputReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.UnityRlInitializationOutputReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityOutputProto), global::Unity.MLAgents.CommunicatorObjects.UnityOutputProto.Parser, new[]{ "RlOutput", "RlInitializationOutput" }, null, null, null) + })); + } + #endregion + + } + #region Messages + internal sealed partial class UnityOutputProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityOutputProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityOutputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityOutputProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityOutputProto(UnityOutputProto other) : this() { + RlOutput = other.rlOutput_ != null ? other.RlOutput.Clone() : null; + RlInitializationOutput = other.rlInitializationOutput_ != null ? other.RlInitializationOutput.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityOutputProto Clone() { + return new UnityOutputProto(this); + } + + /// Field number for the "rl_output" field. + public const int RlOutputFieldNumber = 1; + private global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto rlOutput_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto RlOutput { + get { return rlOutput_; } + set { + rlOutput_ = value; + } + } + + /// Field number for the "rl_initialization_output" field. + public const int RlInitializationOutputFieldNumber = 2; + private global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationOutputProto rlInitializationOutput_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationOutputProto RlInitializationOutput { + get { return rlInitializationOutput_; } + set { + rlInitializationOutput_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityOutputProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityOutputProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(RlOutput, other.RlOutput)) return false; + if (!object.Equals(RlInitializationOutput, other.RlInitializationOutput)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (rlOutput_ != null) hash ^= RlOutput.GetHashCode(); + if (rlInitializationOutput_ != null) hash ^= RlInitializationOutput.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (rlOutput_ != null) { + output.WriteRawTag(10); + output.WriteMessage(RlOutput); + } + if (rlInitializationOutput_ != null) { + output.WriteRawTag(18); + output.WriteMessage(RlInitializationOutput); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (rlOutput_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(RlOutput); + } + if (rlInitializationOutput_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(RlInitializationOutput); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityOutputProto other) { + if (other == null) { + return; + } + if (other.rlOutput_ != null) { + if (rlOutput_ == null) { + rlOutput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto(); + } + RlOutput.MergeFrom(other.RlOutput); + } + if (other.rlInitializationOutput_ != null) { + if (rlInitializationOutput_ == null) { + rlInitializationOutput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationOutputProto(); + } + RlInitializationOutput.MergeFrom(other.RlInitializationOutput); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rlOutput_ == null) { + rlOutput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto(); + } + input.ReadMessage(rlOutput_); + break; + } + case 18: { + if (rlInitializationOutput_ == null) { + rlInitializationOutput_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationOutputProto(); + } + input.ReadMessage(rlInitializationOutput_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityOutput.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityOutput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e1ae7344594d1e6b4b4b1548cb292ae7728b3317 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityOutput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1c19e75c7657497fbc05cfa40dd6783 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationInput.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationInput.cs new file mode 100644 index 0000000000000000000000000000000000000000..1b83a17e6859b098393eb0310e89d8fb60515a94 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationInput.cs @@ -0,0 +1,312 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_rl_initialization_input.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_rl_initialization_input.proto + internal static partial class UnityRlInitializationInputReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_rl_initialization_input.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityRlInitializationInputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CkZtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X3Js", + "X2luaXRpYWxpemF0aW9uX2lucHV0LnByb3RvEhRjb21tdW5pY2F0b3Jfb2Jq", + "ZWN0cxo1bWxhZ2VudHNfZW52cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy9jYXBh", + "YmlsaXRpZXMucHJvdG8iwAEKH1VuaXR5UkxJbml0aWFsaXphdGlvbklucHV0", + "UHJvdG8SDAoEc2VlZBgBIAEoBRIdChVjb21tdW5pY2F0aW9uX3ZlcnNpb24Y", + "AiABKAkSFwoPcGFja2FnZV92ZXJzaW9uGAMgASgJEkQKDGNhcGFiaWxpdGll", + "cxgEIAEoCzIuLmNvbW11bmljYXRvcl9vYmplY3RzLlVuaXR5UkxDYXBhYmls", + "aXRpZXNQcm90bxIRCgludW1fYXJlYXMYBSABKAVCJaoCIlVuaXR5Lk1MQWdl", + "bnRzLkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.CapabilitiesReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationInputProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationInputProto.Parser, new[]{ "Seed", "CommunicationVersion", "PackageVersion", "Capabilities", "NumAreas" }, null, null, null) + })); + } + #endregion + + } + #region Messages + /// + /// The initializaiton message - this is typically sent from the Python trainer to the C# environment. + /// + internal sealed partial class UnityRLInitializationInputProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityRLInitializationInputProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityRlInitializationInputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInitializationInputProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInitializationInputProto(UnityRLInitializationInputProto other) : this() { + seed_ = other.seed_; + communicationVersion_ = other.communicationVersion_; + packageVersion_ = other.packageVersion_; + Capabilities = other.capabilities_ != null ? other.Capabilities.Clone() : null; + numAreas_ = other.numAreas_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInitializationInputProto Clone() { + return new UnityRLInitializationInputProto(this); + } + + /// Field number for the "seed" field. + public const int SeedFieldNumber = 1; + private int seed_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int Seed { + get { return seed_; } + set { + seed_ = value; + } + } + + /// Field number for the "communication_version" field. + public const int CommunicationVersionFieldNumber = 2; + private string communicationVersion_ = ""; + /// + /// Communication protocol version that the initiating side (typically the Python trainer) is using. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string CommunicationVersion { + get { return communicationVersion_; } + set { + communicationVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "package_version" field. + public const int PackageVersionFieldNumber = 3; + private string packageVersion_ = ""; + /// + /// Package/library version that the initiating side (typically the Python trainer) is using. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string PackageVersion { + get { return packageVersion_; } + set { + packageVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "capabilities" field. + public const int CapabilitiesFieldNumber = 4; + private global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto capabilities_; + /// + /// The RL Capabilities of the Python trainer. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto Capabilities { + get { return capabilities_; } + set { + capabilities_ = value; + } + } + + /// Field number for the "num_areas" field. + public const int NumAreasFieldNumber = 5; + private int numAreas_; + /// + /// The number of training areas to instantiate + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int NumAreas { + get { return numAreas_; } + set { + numAreas_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityRLInitializationInputProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityRLInitializationInputProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Seed != other.Seed) return false; + if (CommunicationVersion != other.CommunicationVersion) return false; + if (PackageVersion != other.PackageVersion) return false; + if (!object.Equals(Capabilities, other.Capabilities)) return false; + if (NumAreas != other.NumAreas) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Seed != 0) hash ^= Seed.GetHashCode(); + if (CommunicationVersion.Length != 0) hash ^= CommunicationVersion.GetHashCode(); + if (PackageVersion.Length != 0) hash ^= PackageVersion.GetHashCode(); + if (capabilities_ != null) hash ^= Capabilities.GetHashCode(); + if (NumAreas != 0) hash ^= NumAreas.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (Seed != 0) { + output.WriteRawTag(8); + output.WriteInt32(Seed); + } + if (CommunicationVersion.Length != 0) { + output.WriteRawTag(18); + output.WriteString(CommunicationVersion); + } + if (PackageVersion.Length != 0) { + output.WriteRawTag(26); + output.WriteString(PackageVersion); + } + if (capabilities_ != null) { + output.WriteRawTag(34); + output.WriteMessage(Capabilities); + } + if (NumAreas != 0) { + output.WriteRawTag(40); + output.WriteInt32(NumAreas); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Seed != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(Seed); + } + if (CommunicationVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(CommunicationVersion); + } + if (PackageVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(PackageVersion); + } + if (capabilities_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Capabilities); + } + if (NumAreas != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumAreas); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityRLInitializationInputProto other) { + if (other == null) { + return; + } + if (other.Seed != 0) { + Seed = other.Seed; + } + if (other.CommunicationVersion.Length != 0) { + CommunicationVersion = other.CommunicationVersion; + } + if (other.PackageVersion.Length != 0) { + PackageVersion = other.PackageVersion; + } + if (other.capabilities_ != null) { + if (capabilities_ == null) { + capabilities_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto(); + } + Capabilities.MergeFrom(other.Capabilities); + } + if (other.NumAreas != 0) { + NumAreas = other.NumAreas; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + Seed = input.ReadInt32(); + break; + } + case 18: { + CommunicationVersion = input.ReadString(); + break; + } + case 26: { + PackageVersion = input.ReadString(); + break; + } + case 34: { + if (capabilities_ == null) { + capabilities_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto(); + } + input.ReadMessage(capabilities_); + break; + } + case 40: { + NumAreas = input.ReadInt32(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationInput.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationInput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c0c9fc2fd422d4d09f599dfa950234a5830c32a1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1542ad34ffb34317b74b239135d0477 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationOutput.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationOutput.cs new file mode 100644 index 0000000000000000000000000000000000000000..1e073a596532f18412453948ab6323a49babcaab --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationOutput.cs @@ -0,0 +1,332 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_rl_initialization_output.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_rl_initialization_output.proto + internal static partial class UnityRlInitializationOutputReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_rl_initialization_output.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityRlInitializationOutputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CkdtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X3Js", + "X2luaXRpYWxpemF0aW9uX291dHB1dC5wcm90bxIUY29tbXVuaWNhdG9yX29i", + "amVjdHMaNW1sYWdlbnRzX2VudnMvY29tbXVuaWNhdG9yX29iamVjdHMvY2Fw", + "YWJpbGl0aWVzLnByb3RvGjltbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9v", + "YmplY3RzL2JyYWluX3BhcmFtZXRlcnMucHJvdG8ijAIKIFVuaXR5UkxJbml0", + "aWFsaXphdGlvbk91dHB1dFByb3RvEgwKBG5hbWUYASABKAkSHQoVY29tbXVu", + "aWNhdGlvbl92ZXJzaW9uGAIgASgJEhAKCGxvZ19wYXRoGAMgASgJEkQKEGJy", + "YWluX3BhcmFtZXRlcnMYBSADKAsyKi5jb21tdW5pY2F0b3Jfb2JqZWN0cy5C", + "cmFpblBhcmFtZXRlcnNQcm90bxIXCg9wYWNrYWdlX3ZlcnNpb24YByABKAkS", + "RAoMY2FwYWJpbGl0aWVzGAggASgLMi4uY29tbXVuaWNhdG9yX29iamVjdHMu", + "VW5pdHlSTENhcGFiaWxpdGllc1Byb3RvSgQIBhAHQiWqAiJVbml0eS5NTEFn", + "ZW50cy5Db21tdW5pY2F0b3JPYmplY3RzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.CapabilitiesReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.BrainParametersReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationOutputProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLInitializationOutputProto.Parser, new[]{ "Name", "CommunicationVersion", "LogPath", "BrainParameters", "PackageVersion", "Capabilities" }, null, null, null) + })); + } + #endregion + + } + #region Messages + /// + /// The request message containing the academy's parameters. + /// + internal sealed partial class UnityRLInitializationOutputProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityRLInitializationOutputProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityRlInitializationOutputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInitializationOutputProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInitializationOutputProto(UnityRLInitializationOutputProto other) : this() { + name_ = other.name_; + communicationVersion_ = other.communicationVersion_; + logPath_ = other.logPath_; + brainParameters_ = other.brainParameters_.Clone(); + packageVersion_ = other.packageVersion_; + Capabilities = other.capabilities_ != null ? other.Capabilities.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInitializationOutputProto Clone() { + return new UnityRLInitializationOutputProto(this); + } + + /// Field number for the "name" field. + public const int NameFieldNumber = 1; + private string name_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Name { + get { return name_; } + set { + name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "communication_version" field. + public const int CommunicationVersionFieldNumber = 2; + private string communicationVersion_ = ""; + /// + /// Communication protocol version that the responding side (typically the C# environment) is using. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string CommunicationVersion { + get { return communicationVersion_; } + set { + communicationVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "log_path" field. + public const int LogPathFieldNumber = 3; + private string logPath_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string LogPath { + get { return logPath_; } + set { + logPath_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "brain_parameters" field. + public const int BrainParametersFieldNumber = 5; + private static readonly pb::FieldCodec _repeated_brainParameters_codec + = pb::FieldCodec.ForMessage(42, global::Unity.MLAgents.CommunicatorObjects.BrainParametersProto.Parser); + private readonly pbc::RepeatedField brainParameters_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField BrainParameters { + get { return brainParameters_; } + } + + /// Field number for the "package_version" field. + public const int PackageVersionFieldNumber = 7; + private string packageVersion_ = ""; + /// + /// Package/library version that the responding side (typically the C# environment) is using. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string PackageVersion { + get { return packageVersion_; } + set { + packageVersion_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "capabilities" field. + public const int CapabilitiesFieldNumber = 8; + private global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto capabilities_; + /// + /// The RL Capabilities of the C# package. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto Capabilities { + get { return capabilities_; } + set { + capabilities_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityRLInitializationOutputProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityRLInitializationOutputProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Name != other.Name) return false; + if (CommunicationVersion != other.CommunicationVersion) return false; + if (LogPath != other.LogPath) return false; + if(!brainParameters_.Equals(other.brainParameters_)) return false; + if (PackageVersion != other.PackageVersion) return false; + if (!object.Equals(Capabilities, other.Capabilities)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Name.Length != 0) hash ^= Name.GetHashCode(); + if (CommunicationVersion.Length != 0) hash ^= CommunicationVersion.GetHashCode(); + if (LogPath.Length != 0) hash ^= LogPath.GetHashCode(); + hash ^= brainParameters_.GetHashCode(); + if (PackageVersion.Length != 0) hash ^= PackageVersion.GetHashCode(); + if (capabilities_ != null) hash ^= Capabilities.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (Name.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Name); + } + if (CommunicationVersion.Length != 0) { + output.WriteRawTag(18); + output.WriteString(CommunicationVersion); + } + if (LogPath.Length != 0) { + output.WriteRawTag(26); + output.WriteString(LogPath); + } + brainParameters_.WriteTo(output, _repeated_brainParameters_codec); + if (PackageVersion.Length != 0) { + output.WriteRawTag(58); + output.WriteString(PackageVersion); + } + if (capabilities_ != null) { + output.WriteRawTag(66); + output.WriteMessage(Capabilities); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Name.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Name); + } + if (CommunicationVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(CommunicationVersion); + } + if (LogPath.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(LogPath); + } + size += brainParameters_.CalculateSize(_repeated_brainParameters_codec); + if (PackageVersion.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(PackageVersion); + } + if (capabilities_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Capabilities); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityRLInitializationOutputProto other) { + if (other == null) { + return; + } + if (other.Name.Length != 0) { + Name = other.Name; + } + if (other.CommunicationVersion.Length != 0) { + CommunicationVersion = other.CommunicationVersion; + } + if (other.LogPath.Length != 0) { + LogPath = other.LogPath; + } + brainParameters_.Add(other.brainParameters_); + if (other.PackageVersion.Length != 0) { + PackageVersion = other.PackageVersion; + } + if (other.capabilities_ != null) { + if (capabilities_ == null) { + capabilities_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto(); + } + Capabilities.MergeFrom(other.Capabilities); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + Name = input.ReadString(); + break; + } + case 18: { + CommunicationVersion = input.ReadString(); + break; + } + case 26: { + LogPath = input.ReadString(); + break; + } + case 42: { + brainParameters_.AddEntriesFrom(input, _repeated_brainParameters_codec); + break; + } + case 58: { + PackageVersion = input.ReadString(); + break; + } + case 66: { + if (capabilities_ == null) { + capabilities_ = new global::Unity.MLAgents.CommunicatorObjects.UnityRLCapabilitiesProto(); + } + input.ReadMessage(capabilities_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationOutput.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationOutput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bbc4dba7c4c3e8cd916932094ccd3e54aaf32f2d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInitializationOutput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0bcb88495d5d48229140a2080dfd297 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInput.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInput.cs new file mode 100644 index 0000000000000000000000000000000000000000..e8553e8b8eae85d473390c3103dee1084cfd7fdb --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInput.cs @@ -0,0 +1,361 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_rl_input.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_rl_input.proto + internal static partial class UnityRlInputReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_rl_input.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityRlInputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjdtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X3Js", + "X2lucHV0LnByb3RvEhRjb21tdW5pY2F0b3Jfb2JqZWN0cxo1bWxhZ2VudHNf", + "ZW52cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy9hZ2VudF9hY3Rpb24ucHJvdG8a", + "MG1sYWdlbnRzX2VudnMvY29tbXVuaWNhdG9yX29iamVjdHMvY29tbWFuZC5w", + "cm90byL+AgoRVW5pdHlSTElucHV0UHJvdG8SUAoNYWdlbnRfYWN0aW9ucxgB", + "IAMoCzI5LmNvbW11bmljYXRvcl9vYmplY3RzLlVuaXR5UkxJbnB1dFByb3Rv", + "LkFnZW50QWN0aW9uc0VudHJ5EjMKB2NvbW1hbmQYBCABKA4yIi5jb21tdW5p", + "Y2F0b3Jfb2JqZWN0cy5Db21tYW5kUHJvdG8SFAoMc2lkZV9jaGFubmVsGAUg", + "ASgMGk0KFExpc3RBZ2VudEFjdGlvblByb3RvEjUKBXZhbHVlGAEgAygLMiYu", + "Y29tbXVuaWNhdG9yX29iamVjdHMuQWdlbnRBY3Rpb25Qcm90bxpxChFBZ2Vu", + "dEFjdGlvbnNFbnRyeRILCgNrZXkYASABKAkSSwoFdmFsdWUYAiABKAsyPC5j", + "b21tdW5pY2F0b3Jfb2JqZWN0cy5Vbml0eVJMSW5wdXRQcm90by5MaXN0QWdl", + "bnRBY3Rpb25Qcm90bzoCOAFKBAgCEANKBAgDEARCJaoCIlVuaXR5Lk1MQWdl", + "bnRzLkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.AgentActionReflection.Descriptor, global::Unity.MLAgents.CommunicatorObjects.CommandReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto.Parser, new[]{ "AgentActions", "Command", "SideChannel" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto.Types.ListAgentActionProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto.Types.ListAgentActionProto.Parser, new[]{ "Value" }, null, null, null), + null, }) + })); + } + #endregion + + } + #region Messages + internal sealed partial class UnityRLInputProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityRLInputProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityRlInputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInputProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInputProto(UnityRLInputProto other) : this() { + agentActions_ = other.agentActions_.Clone(); + command_ = other.command_; + sideChannel_ = other.sideChannel_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLInputProto Clone() { + return new UnityRLInputProto(this); + } + + /// Field number for the "agent_actions" field. + public const int AgentActionsFieldNumber = 1; + private static readonly pbc::MapField.Codec _map_agentActions_codec + = new pbc::MapField.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForMessage(18, global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto.Types.ListAgentActionProto.Parser), 10); + private readonly pbc::MapField agentActions_ = new pbc::MapField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::MapField AgentActions { + get { return agentActions_; } + } + + /// Field number for the "command" field. + public const int CommandFieldNumber = 4; + private global::Unity.MLAgents.CommunicatorObjects.CommandProto command_ = 0; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Unity.MLAgents.CommunicatorObjects.CommandProto Command { + get { return command_; } + set { + command_ = value; + } + } + + /// Field number for the "side_channel" field. + public const int SideChannelFieldNumber = 5; + private pb::ByteString sideChannel_ = pb::ByteString.Empty; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pb::ByteString SideChannel { + get { return sideChannel_; } + set { + sideChannel_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityRLInputProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityRLInputProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!AgentActions.Equals(other.AgentActions)) return false; + if (Command != other.Command) return false; + if (SideChannel != other.SideChannel) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= AgentActions.GetHashCode(); + if (Command != 0) hash ^= Command.GetHashCode(); + if (SideChannel.Length != 0) hash ^= SideChannel.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + agentActions_.WriteTo(output, _map_agentActions_codec); + if (Command != 0) { + output.WriteRawTag(32); + output.WriteEnum((int) Command); + } + if (SideChannel.Length != 0) { + output.WriteRawTag(42); + output.WriteBytes(SideChannel); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += agentActions_.CalculateSize(_map_agentActions_codec); + if (Command != 0) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Command); + } + if (SideChannel.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeBytesSize(SideChannel); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityRLInputProto other) { + if (other == null) { + return; + } + agentActions_.Add(other.agentActions_); + if (other.Command != 0) { + Command = other.Command; + } + if (other.SideChannel.Length != 0) { + SideChannel = other.SideChannel; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + agentActions_.AddEntriesFrom(input, _map_agentActions_codec); + break; + } + case 32: { + command_ = (global::Unity.MLAgents.CommunicatorObjects.CommandProto) input.ReadEnum(); + break; + } + case 42: { + SideChannel = input.ReadBytes(); + break; + } + } + } + } + + #region Nested types + /// Container for nested types declared in the UnityRLInputProto message type. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static partial class Types { + internal sealed partial class ListAgentActionProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ListAgentActionProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityRLInputProto.Descriptor.NestedTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ListAgentActionProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ListAgentActionProto(ListAgentActionProto other) : this() { + value_ = other.value_.Clone(); + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ListAgentActionProto Clone() { + return new ListAgentActionProto(this); + } + + /// Field number for the "value" field. + public const int ValueFieldNumber = 1; + private static readonly pb::FieldCodec _repeated_value_codec + = pb::FieldCodec.ForMessage(10, global::Unity.MLAgents.CommunicatorObjects.AgentActionProto.Parser); + private readonly pbc::RepeatedField value_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField Value { + get { return value_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as ListAgentActionProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(ListAgentActionProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!value_.Equals(other.value_)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= value_.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + value_.WriteTo(output, _repeated_value_codec); + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += value_.CalculateSize(_repeated_value_codec); + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(ListAgentActionProto other) { + if (other == null) { + return; + } + value_.Add(other.value_); + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + value_.AddEntriesFrom(input, _repeated_value_codec); + break; + } + } + } + } + + } + + } + #endregion + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInput.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c2e8eb03e9764681c217379dd821f6bb8d09a792 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9d247f0bc49d468da0f9f0cc6484d34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlOutput.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlOutput.cs new file mode 100644 index 0000000000000000000000000000000000000000..0971d50299328c405536886760e85dd0962838e0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlOutput.cs @@ -0,0 +1,331 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_rl_output.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_rl_output.proto + internal static partial class UnityRlOutputReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_rl_output.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityRlOutputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjhtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X3Js", + "X291dHB1dC5wcm90bxIUY29tbXVuaWNhdG9yX29iamVjdHMaM21sYWdlbnRz", + "X2VudnMvY29tbXVuaWNhdG9yX29iamVjdHMvYWdlbnRfaW5mby5wcm90byK5", + "AgoSVW5pdHlSTE91dHB1dFByb3RvEkwKCmFnZW50SW5mb3MYAiADKAsyOC5j", + "b21tdW5pY2F0b3Jfb2JqZWN0cy5Vbml0eVJMT3V0cHV0UHJvdG8uQWdlbnRJ", + "bmZvc0VudHJ5EhQKDHNpZGVfY2hhbm5lbBgDIAEoDBpJChJMaXN0QWdlbnRJ", + "bmZvUHJvdG8SMwoFdmFsdWUYASADKAsyJC5jb21tdW5pY2F0b3Jfb2JqZWN0", + "cy5BZ2VudEluZm9Qcm90bxpuCg9BZ2VudEluZm9zRW50cnkSCwoDa2V5GAEg", + "ASgJEkoKBXZhbHVlGAIgASgLMjsuY29tbXVuaWNhdG9yX29iamVjdHMuVW5p", + "dHlSTE91dHB1dFByb3RvLkxpc3RBZ2VudEluZm9Qcm90bzoCOAFKBAgBEAJC", + "JaoCIlVuaXR5Lk1MQWdlbnRzLkNvbW11bmljYXRvck9iamVjdHNiBnByb3Rv", + "Mw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.AgentInfoReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto.Parser, new[]{ "AgentInfos", "SideChannel" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto.Types.ListAgentInfoProto), global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto.Types.ListAgentInfoProto.Parser, new[]{ "Value" }, null, null, null), + null, }) + })); + } + #endregion + + } + #region Messages + internal sealed partial class UnityRLOutputProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new UnityRLOutputProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityRlOutputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLOutputProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLOutputProto(UnityRLOutputProto other) : this() { + agentInfos_ = other.agentInfos_.Clone(); + sideChannel_ = other.sideChannel_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public UnityRLOutputProto Clone() { + return new UnityRLOutputProto(this); + } + + /// Field number for the "agentInfos" field. + public const int AgentInfosFieldNumber = 2; + private static readonly pbc::MapField.Codec _map_agentInfos_codec + = new pbc::MapField.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForMessage(18, global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto.Types.ListAgentInfoProto.Parser), 18); + private readonly pbc::MapField agentInfos_ = new pbc::MapField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::MapField AgentInfos { + get { return agentInfos_; } + } + + /// Field number for the "side_channel" field. + public const int SideChannelFieldNumber = 3; + private pb::ByteString sideChannel_ = pb::ByteString.Empty; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pb::ByteString SideChannel { + get { return sideChannel_; } + set { + sideChannel_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as UnityRLOutputProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(UnityRLOutputProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!AgentInfos.Equals(other.AgentInfos)) return false; + if (SideChannel != other.SideChannel) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= AgentInfos.GetHashCode(); + if (SideChannel.Length != 0) hash ^= SideChannel.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + agentInfos_.WriteTo(output, _map_agentInfos_codec); + if (SideChannel.Length != 0) { + output.WriteRawTag(26); + output.WriteBytes(SideChannel); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += agentInfos_.CalculateSize(_map_agentInfos_codec); + if (SideChannel.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeBytesSize(SideChannel); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(UnityRLOutputProto other) { + if (other == null) { + return; + } + agentInfos_.Add(other.agentInfos_); + if (other.SideChannel.Length != 0) { + SideChannel = other.SideChannel; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 18: { + agentInfos_.AddEntriesFrom(input, _map_agentInfos_codec); + break; + } + case 26: { + SideChannel = input.ReadBytes(); + break; + } + } + } + } + + #region Nested types + /// Container for nested types declared in the UnityRLOutputProto message type. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static partial class Types { + internal sealed partial class ListAgentInfoProto : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ListAgentInfoProto()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityRLOutputProto.Descriptor.NestedTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ListAgentInfoProto() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ListAgentInfoProto(ListAgentInfoProto other) : this() { + value_ = other.value_.Clone(); + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public ListAgentInfoProto Clone() { + return new ListAgentInfoProto(this); + } + + /// Field number for the "value" field. + public const int ValueFieldNumber = 1; + private static readonly pb::FieldCodec _repeated_value_codec + = pb::FieldCodec.ForMessage(10, global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto.Parser); + private readonly pbc::RepeatedField value_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField Value { + get { return value_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as ListAgentInfoProto); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(ListAgentInfoProto other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!value_.Equals(other.value_)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= value_.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + value_.WriteTo(output, _repeated_value_codec); + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += value_.CalculateSize(_repeated_value_codec); + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(ListAgentInfoProto other) { + if (other == null) { + return; + } + value_.Add(other.value_); + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + value_.AddEntriesFrom(input, _repeated_value_codec); + break; + } + } + } + } + + } + + } + #endregion + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlOutput.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlOutput.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d2607bf220c3d063d0ef2fe027bef4cd1171ba47 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityRlOutput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b039d6d52b5142a78431d1758f5bf53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternal.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternal.cs new file mode 100644 index 0000000000000000000000000000000000000000..ddb47dea96b93a482dae01c0717295ef8387f6bb --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternal.cs @@ -0,0 +1,43 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_to_external.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Unity.MLAgents.CommunicatorObjects { + + /// Holder for reflection information generated from mlagents_envs/communicator_objects/unity_to_external.proto + public static partial class UnityToExternalReflection { + + #region Descriptor + /// File descriptor for mlagents_envs/communicator_objects/unity_to_external.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static UnityToExternalReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CjptbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL3VuaXR5X3Rv", + "X2V4dGVybmFsLnByb3RvEhRjb21tdW5pY2F0b3Jfb2JqZWN0cxo2bWxhZ2Vu", + "dHNfZW52cy9jb21tdW5pY2F0b3Jfb2JqZWN0cy91bml0eV9tZXNzYWdlLnBy", + "b3RvMnYKFFVuaXR5VG9FeHRlcm5hbFByb3RvEl4KCEV4Y2hhbmdlEicuY29t", + "bXVuaWNhdG9yX29iamVjdHMuVW5pdHlNZXNzYWdlUHJvdG8aJy5jb21tdW5p", + "Y2F0b3Jfb2JqZWN0cy5Vbml0eU1lc3NhZ2VQcm90byIAQiWqAiJVbml0eS5N", + "TEFnZW50cy5Db21tdW5pY2F0b3JPYmplY3RzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Unity.MLAgents.CommunicatorObjects.UnityMessageReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, null)); + } + #endregion + + } +} + +#endregion Designer generated code diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternal.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternal.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8ad13fd02dc180375d98da3084a3149baf1595b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c03819ddc4c30416ab6ecc83c9cee562 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternalGrpc.cs b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternalGrpc.cs new file mode 100644 index 0000000000000000000000000000000000000000..273c57cb1d1fab4c2db8cb84a70d8e420f7a233e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternalGrpc.cs @@ -0,0 +1,135 @@ +#if UNITY_EDITOR || UNITY_STANDALONE +#define MLA_SUPPORTED_TRAINING_PLATFORM +#endif +#if MLA_SUPPORTED_TRAINING_PLATFORM +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: mlagents_envs/communicator_objects/unity_to_external.proto +// +#pragma warning disable 0414, 1591 +#region Designer generated code + +using grpc = global::Grpc.Core; + +namespace Unity.MLAgents.CommunicatorObjects { + internal static partial class UnityToExternalProto + { + static readonly string __ServiceName = "communicator_objects.UnityToExternalProto"; + + static readonly grpc::Marshaller __Marshaller_communicator_objects_UnityMessageProto = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto.Parser.ParseFrom); + + static readonly grpc::Method __Method_Exchange = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Exchange", + __Marshaller_communicator_objects_UnityMessageProto, + __Marshaller_communicator_objects_UnityMessageProto); + + /// Service descriptor + public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor + { + get { return global::Unity.MLAgents.CommunicatorObjects.UnityToExternalReflection.Descriptor.Services[0]; } + } + + /// Base class for server-side implementations of UnityToExternalProto + public abstract partial class UnityToExternalProtoBase + { + /// + /// Sends the academy parameters + /// + /// The request received from the client. + /// The context of the server-side call handler being invoked. + /// The response to send back to the client (wrapped by a task). + public virtual global::System.Threading.Tasks.Task Exchange(global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto request, grpc::ServerCallContext context) + { + throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); + } + + } + + /// Client for UnityToExternalProto + public partial class UnityToExternalProtoClient : grpc::ClientBase + { + /// Creates a new client for UnityToExternalProto + /// The channel to use to make remote calls. + public UnityToExternalProtoClient(grpc::Channel channel) : base(channel) + { + } + /// Creates a new client for UnityToExternalProto that uses a custom CallInvoker. + /// The callInvoker to use to make remote calls. + public UnityToExternalProtoClient(grpc::CallInvoker callInvoker) : base(callInvoker) + { + } + /// Protected parameterless constructor to allow creation of test doubles. + protected UnityToExternalProtoClient() : base() + { + } + /// Protected constructor to allow creation of configured clients. + /// The client configuration. + protected UnityToExternalProtoClient(ClientBaseConfiguration configuration) : base(configuration) + { + } + + /// + /// Sends the academy parameters + /// + /// The request to send to the server. + /// The initial metadata to send with the call. This parameter is optional. + /// An optional deadline for the call. The call will be cancelled if deadline is hit. + /// An optional token for canceling the call. + /// The response received from the server. + public virtual global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto Exchange(global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Exchange(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + /// + /// Sends the academy parameters + /// + /// The request to send to the server. + /// The options for the call. + /// The response received from the server. + public virtual global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto Exchange(global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Exchange, null, options, request); + } + /// + /// Sends the academy parameters + /// + /// The request to send to the server. + /// The initial metadata to send with the call. This parameter is optional. + /// An optional deadline for the call. The call will be cancelled if deadline is hit. + /// An optional token for canceling the call. + /// The call object. + public virtual grpc::AsyncUnaryCall ExchangeAsync(global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExchangeAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + /// + /// Sends the academy parameters + /// + /// The request to send to the server. + /// The options for the call. + /// The call object. + public virtual grpc::AsyncUnaryCall ExchangeAsync(global::Unity.MLAgents.CommunicatorObjects.UnityMessageProto request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Exchange, null, options, request); + } + /// Creates a new instance of client from given ClientBaseConfiguration. + protected override UnityToExternalProtoClient NewInstance(ClientBaseConfiguration configuration) + { + return new UnityToExternalProtoClient(configuration); + } + } + + /// Creates service definition that can be registered with a server + /// An object implementing the server-side handling logic. + public static grpc::ServerServiceDefinition BindService(UnityToExternalProtoBase serviceImpl) + { + return grpc::ServerServiceDefinition.CreateBuilder() + .AddMethod(__Method_Exchange, serviceImpl.Exchange).Build(); + } + + } +} +#endregion +#endif diff --git a/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternalGrpc.cs.meta b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternalGrpc.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..620a3f1d448cbe7d7d04dfd35e0aa5d1d19e4565 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/UnityToExternalGrpc.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c0f560328e7343499ad203c75c11741 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Grpc/Unity.ML-Agents.CommunicatorObjects.asmdef b/com.unity.ml-agents/Runtime/Grpc/Unity.ML-Agents.CommunicatorObjects.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..16f49b5dc63eb4fa1f5821c67891bb11e78de0d6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/Unity.ML-Agents.CommunicatorObjects.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Unity.ML-Agents.CommunicatorObjects", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "Google.Protobuf.dll", + "Grpc.Core.dll" + ], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/com.unity.ml-agents/Runtime/Grpc/Unity.ML-Agents.CommunicatorObjects.asmdef.meta b/com.unity.ml-agents/Runtime/Grpc/Unity.ML-Agents.CommunicatorObjects.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..1bf58ee5ea5ce2f3833ea6b2465083633450b567 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Grpc/Unity.ML-Agents.CommunicatorObjects.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 61c5b659adf544b4baf3eef86248e13a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/IMultiAgentGroup.cs b/com.unity.ml-agents/Runtime/IMultiAgentGroup.cs new file mode 100644 index 0000000000000000000000000000000000000000..0dcdd0a5afeba794feb5c37c144a68a0b0168f4f --- /dev/null +++ b/com.unity.ml-agents/Runtime/IMultiAgentGroup.cs @@ -0,0 +1,28 @@ +namespace Unity.MLAgents +{ + /// + /// MultiAgentGroup interface for grouping agents to support multi-agent training. + /// + public interface IMultiAgentGroup + { + /// + /// Get the ID of MultiAgentGroup. + /// + /// + /// MultiAgentGroup ID. + /// + int GetId(); + + /// + /// Register agent to the MultiAgentGroup. + /// + /// The Agent to register. + void RegisterAgent(Agent agent); + + /// + /// Unregister agent from the MultiAgentGroup. + /// + /// The Agent to unregister. + void UnregisterAgent(Agent agent); + } +} diff --git a/com.unity.ml-agents/Runtime/IMultiAgentGroup.cs.meta b/com.unity.ml-agents/Runtime/IMultiAgentGroup.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b9171ab0408bbbb6e18ebf5c360caba9dccff25e --- /dev/null +++ b/com.unity.ml-agents/Runtime/IMultiAgentGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3744ac27d956e43e1a39c7ba2550ab82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference.meta b/com.unity.ml-agents/Runtime/Inference.meta new file mode 100644 index 0000000000000000000000000000000000000000..cb7450c10e8be7c090ee9ff1db0f0b7092a34067 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ccb5b186c34bc48d8bd81e9d9bd5cd95 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs b/com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs new file mode 100644 index 0000000000000000000000000000000000000000..e80ccd9fdd7729d8269017477cb9b91d4e68efc5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs @@ -0,0 +1,207 @@ +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents.Inference.Utils; +using Unity.MLAgents.Actuators; +using Unity.Barracuda; +using UnityEngine; + +namespace Unity.MLAgents.Inference +{ + /// + /// The Applier for the Continuous Action output tensor. Tensor is assumed to contain the + /// continuous action data of the agents in the batch. + /// + internal class ContinuousActionOutputApplier : TensorApplier.IApplier + { + readonly ActionSpec m_ActionSpec; + + public ContinuousActionOutputApplier(ActionSpec actionSpec) + { + m_ActionSpec = actionSpec; + } + + public void Apply(TensorProxy tensorProxy, IList actionIds, Dictionary lastActions) + { + var actionSize = tensorProxy.shape[tensorProxy.shape.Length - 1]; + var agentIndex = 0; + for (var i = 0; i < actionIds.Count; i++) + { + var agentId = actionIds[i]; + if (lastActions.ContainsKey(agentId)) + { + var actionBuffer = lastActions[agentId]; + if (actionBuffer.IsEmpty()) + { + actionBuffer = new ActionBuffers(m_ActionSpec); + lastActions[agentId] = actionBuffer; + } + var continuousBuffer = actionBuffer.ContinuousActions; + for (var j = 0; j < actionSize; j++) + { + continuousBuffer[j] = tensorProxy.data[agentIndex, j]; + } + } + agentIndex++; + } + } + } + + /// + /// The Applier for the Discrete Action output tensor. + /// + internal class DiscreteActionOutputApplier : TensorApplier.IApplier + { + readonly ActionSpec m_ActionSpec; + + + public DiscreteActionOutputApplier(ActionSpec actionSpec, int seed, ITensorAllocator allocator) + { + m_ActionSpec = actionSpec; + } + + public void Apply(TensorProxy tensorProxy, IList actionIds, Dictionary lastActions) + { + var agentIndex = 0; + var actionSize = tensorProxy.shape[tensorProxy.shape.Length - 1]; + for (var i = 0; i < actionIds.Count; i++) + { + var agentId = actionIds[i]; + if (lastActions.ContainsKey(agentId)) + { + var actionBuffer = lastActions[agentId]; + if (actionBuffer.IsEmpty()) + { + actionBuffer = new ActionBuffers(m_ActionSpec); + lastActions[agentId] = actionBuffer; + } + var discreteBuffer = actionBuffer.DiscreteActions; + for (var j = 0; j < actionSize; j++) + { + discreteBuffer[j] = (int)tensorProxy.data[agentIndex, j]; + } + } + agentIndex++; + } + } + } + + + /// + /// The Applier for the Discrete Action output tensor. Uses multinomial to sample discrete + /// actions from the logits contained in the tensor. + /// + internal class LegacyDiscreteActionOutputApplier : TensorApplier.IApplier + { + readonly int[] m_ActionSize; + readonly Multinomial m_Multinomial; + readonly ActionSpec m_ActionSpec; + readonly int[] m_StartActionIndices; + readonly float[] m_CdfBuffer; + + + public LegacyDiscreteActionOutputApplier(ActionSpec actionSpec, int seed, ITensorAllocator allocator) + { + m_ActionSize = actionSpec.BranchSizes; + m_Multinomial = new Multinomial(seed); + m_ActionSpec = actionSpec; + m_StartActionIndices = Utilities.CumSum(m_ActionSize); + + // Scratch space for computing the cumulative distribution function. + // In order to reuse it, make it the size of the largest branch. + var largestBranch = Mathf.Max(m_ActionSize); + m_CdfBuffer = new float[largestBranch]; + } + + public void Apply(TensorProxy tensorProxy, IList actionIds, Dictionary lastActions) + { + var agentIndex = 0; + for (var i = 0; i < actionIds.Count; i++) + { + var agentId = actionIds[i]; + if (lastActions.ContainsKey(agentId)) + { + var actionBuffer = lastActions[agentId]; + if (actionBuffer.IsEmpty()) + { + actionBuffer = new ActionBuffers(m_ActionSpec); + lastActions[agentId] = actionBuffer; + } + var discreteBuffer = actionBuffer.DiscreteActions; + for (var j = 0; j < m_ActionSize.Length; j++) + { + ComputeCdf(tensorProxy, agentIndex, m_StartActionIndices[j], m_ActionSize[j]); + discreteBuffer[j] = m_Multinomial.Sample(m_CdfBuffer, m_ActionSize[j]); + } + } + agentIndex++; + } + } + + /// + /// Compute the cumulative distribution function for a given agent's action + /// given the log-probabilities. + /// The results are stored in m_CdfBuffer, which is the size of the largest action's number of branches. + /// + /// + /// Index of the agent being considered + /// Offset into the tensor's channel. + /// + internal void ComputeCdf(TensorProxy logProbs, int batch, int channelOffset, int branchSize) + { + // Find the class maximum + var maxProb = float.NegativeInfinity; + for (var cls = 0; cls < branchSize; ++cls) + { + maxProb = Mathf.Max(logProbs.data[batch, cls + channelOffset], maxProb); + } + + // Sum the log probabilities and compute CDF + var sumProb = 0.0f; + for (var cls = 0; cls < branchSize; ++cls) + { + sumProb += Mathf.Exp(logProbs.data[batch, cls + channelOffset] - maxProb); + m_CdfBuffer[cls] = sumProb; + } + } + } + + /// + /// The Applier for the Memory output tensor. Tensor is assumed to contain the new + /// memory data of the agents in the batch. + /// + internal class MemoryOutputApplier : TensorApplier.IApplier + { + Dictionary> m_Memories; + + public MemoryOutputApplier( + Dictionary> memories) + { + m_Memories = memories; + } + + public void Apply(TensorProxy tensorProxy, IList actionIds, Dictionary lastActions) + { + var agentIndex = 0; + var memorySize = tensorProxy.data.width; + for (var i = 0; i < actionIds.Count; i++) + { + var agentId = actionIds[i]; + List memory; + if (!m_Memories.TryGetValue(agentId, out memory) + || memory.Count < memorySize) + { + memory = new List(); + memory.AddRange(Enumerable.Repeat(0f, memorySize)); + } + + for (var j = 0; j < memorySize; j++) + { + memory[j] = tensorProxy.data[agentIndex, 0, j, 0]; + } + + m_Memories[agentId] = memory; + agentIndex++; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs.meta b/com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..251ad8ac4a76cdf85a94acc7fa04c18c1c863721 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 99d5dc2d52e442d1a1f466a246cfb28d +timeCreated: 1539118675 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs b/com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs new file mode 100644 index 0000000000000000000000000000000000000000..0bc1eba2b6163bd2eb72b47cbcd83a6752379edd --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs @@ -0,0 +1,443 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Unity.Barracuda; +using FailedCheck = Unity.MLAgents.Inference.BarracudaModelParamLoader.FailedCheck; + +namespace Unity.MLAgents.Inference +{ + /// + /// Barracuda Model extension methods. + /// + internal static class BarracudaModelExtensions + { + /// + /// Get array of the input tensor names of the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Array of the input tensor names of the model + public static string[] GetInputNames(this Model model) + { + var names = new List(); + + if (model == null) + return names.ToArray(); + + foreach (var input in model.inputs) + { + names.Add(input.name); + } + + foreach (var mem in model.memories) + { + names.Add(mem.input); + } + + names.Sort(StringComparer.InvariantCulture); + + return names.ToArray(); + } + + /// + /// Get the version of the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// The api version of the model + public static int GetVersion(this Model model) + { + return (int)model.GetTensorByName(TensorNames.VersionNumber)[0]; + } + + /// + /// Generates the Tensor inputs that are expected to be present in the Model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// TensorProxy IEnumerable with the expected Tensor inputs. + public static IReadOnlyList GetInputTensors(this Model model) + { + var tensors = new List(); + + if (model == null) + return tensors; + + foreach (var input in model.inputs) + { + tensors.Add(new TensorProxy + { + name = input.name, + valueType = TensorProxy.TensorType.FloatingPoint, + data = null, + shape = input.shape.Select(i => (long)i).ToArray() + }); + } + + tensors.Sort((el1, el2) => string.Compare(el1.name, el2.name, StringComparison.InvariantCulture)); + + return tensors; + } + + /// + /// Get number of visual observation inputs to the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Number of visual observation inputs to the model + public static int GetNumVisualInputs(this Model model) + { + var count = 0; + if (model == null) + return count; + + foreach (var input in model.inputs) + { + if (input.name.StartsWith(TensorNames.VisualObservationPlaceholderPrefix)) + { + count++; + } + } + + return count; + } + + /// + /// Get array of the output tensor names of the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// Array of the output tensor names of the model + public static string[] GetOutputNames(this Model model, bool deterministicInference = false) + { + var names = new List(); + + if (model == null) + { + return names.ToArray(); + } + + if (model.HasContinuousOutputs(deterministicInference)) + { + names.Add(model.ContinuousOutputName(deterministicInference)); + } + if (model.HasDiscreteOutputs(deterministicInference)) + { + names.Add(model.DiscreteOutputName(deterministicInference)); + } + + var modelVersion = model.GetVersion(); + var memory = (int)model.GetTensorByName(TensorNames.MemorySize)[0]; + if (memory > 0) + { + names.Add(TensorNames.RecurrentOutput); + } + + names.Sort(StringComparer.InvariantCulture); + + return names.ToArray(); + } + + /// + /// Check if the model has continuous action outputs. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// True if the model has continuous action outputs. + public static bool HasContinuousOutputs(this Model model, bool deterministicInference = false) + { + if (model == null) + return false; + if (!model.SupportsContinuousAndDiscrete()) + { + return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] > 0; + } + else + { + bool hasStochasticOutput = !deterministicInference && + model.outputs.Contains(TensorNames.ContinuousActionOutput); + bool hasDeterministicOutput = deterministicInference && + model.outputs.Contains(TensorNames.DeterministicContinuousActionOutput); + + return (hasStochasticOutput || hasDeterministicOutput) && + (int)model.GetTensorByName(TensorNames.ContinuousActionOutputShape)[0] > 0; + } + } + + /// + /// Continuous action output size of the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Size of continuous action output. + public static int ContinuousOutputSize(this Model model) + { + if (model == null) + return 0; + if (!model.SupportsContinuousAndDiscrete()) + { + return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] > 0 ? + (int)model.GetTensorByName(TensorNames.ActionOutputShapeDeprecated)[0] : 0; + } + else + { + var continuousOutputShape = model.GetTensorByName(TensorNames.ContinuousActionOutputShape); + return continuousOutputShape == null ? 0 : (int)continuousOutputShape[0]; + } + } + + /// + /// Continuous action output tensor name of the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// Tensor name of continuous action output. + public static string ContinuousOutputName(this Model model, bool deterministicInference = false) + { + if (model == null) + return null; + if (!model.SupportsContinuousAndDiscrete()) + { + return TensorNames.ActionOutputDeprecated; + } + else + { + return deterministicInference ? TensorNames.DeterministicContinuousActionOutput : TensorNames.ContinuousActionOutput; + } + } + + /// + /// Check if the model has discrete action outputs. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// True if the model has discrete action outputs. + public static bool HasDiscreteOutputs(this Model model, bool deterministicInference = false) + { + if (model == null) + return false; + if (!model.SupportsContinuousAndDiscrete()) + { + return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] == 0; + } + else + { + bool hasStochasticOutput = !deterministicInference && + model.outputs.Contains(TensorNames.DiscreteActionOutput); + bool hasDeterministicOutput = deterministicInference && + model.outputs.Contains(TensorNames.DeterministicDiscreteActionOutput); + return (hasStochasticOutput || hasDeterministicOutput) && + model.DiscreteOutputSize() > 0; + } + } + + /// + /// Discrete action output size of the model. This is equal to the sum of the branch sizes. + /// This method gets the tensor representing the list of branch size and returns the + /// sum of all the elements in the Tensor. + /// - In version 1.X this tensor contains a single number, the sum of all branch + /// size values. + /// - In version 2.X this tensor contains a 1D Tensor with each element corresponding + /// to a branch size. + /// Since this method does the sum of all elements in the tensor, the output + /// will be the same on both 1.X and 2.X. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Size of discrete action output. + public static int DiscreteOutputSize(this Model model) + { + if (model == null) + return 0; + if (!model.SupportsContinuousAndDiscrete()) + { + return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] > 0 ? + 0 : (int)model.GetTensorByName(TensorNames.ActionOutputShapeDeprecated)[0]; + } + else + { + var discreteOutputShape = model.GetTensorByName(TensorNames.DiscreteActionOutputShape); + if (discreteOutputShape == null) + { + return 0; + } + else + { + int result = 0; + for (int i = 0; i < discreteOutputShape.length; i++) + { + result += (int)discreteOutputShape[i]; + } + return result; + } + } + } + + /// + /// Discrete action output tensor name of the model. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// Tensor name of discrete action output. + public static string DiscreteOutputName(this Model model, bool deterministicInference = false) + { + if (model == null) + return null; + if (!model.SupportsContinuousAndDiscrete()) + { + return TensorNames.ActionOutputDeprecated; + } + else + { + return deterministicInference ? TensorNames.DeterministicDiscreteActionOutput : TensorNames.DiscreteActionOutput; + } + } + + /// + /// Check if the model supports both continuous and discrete actions. + /// If not, the model should be handled differently and use the deprecated fields. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// True if the model supports both continuous and discrete actions. + public static bool SupportsContinuousAndDiscrete(this Model model) + { + return model == null || + model.outputs.Contains(TensorNames.ContinuousActionOutput) || + model.outputs.Contains(TensorNames.DiscreteActionOutput); + } + + /// + /// Check if the model contains all the expected input/output tensors. + /// + /// + /// The Barracuda engine model for loading static parameters. + /// + /// Output list of failure messages + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// True if the model contains all the expected tensors. + /// TODO: add checks for deterministic actions + public static bool CheckExpectedTensors(this Model model, List failedModelChecks, bool deterministicInference = false) + { + // Check the presence of model version + var modelApiVersionTensor = model.GetTensorByName(TensorNames.VersionNumber); + if (modelApiVersionTensor == null) + { + failedModelChecks.Add( + FailedCheck.Warning($"Required constant \"{TensorNames.VersionNumber}\" was not found in the model file.") + ); + return false; + } + + // Check the presence of memory size + var memorySizeTensor = model.GetTensorByName(TensorNames.MemorySize); + if (memorySizeTensor == null) + { + failedModelChecks.Add( + FailedCheck.Warning($"Required constant \"{TensorNames.MemorySize}\" was not found in the model file.") + ); + return false; + } + + // Check the presence of action output tensor + if (!model.outputs.Contains(TensorNames.ActionOutputDeprecated) && + !model.outputs.Contains(TensorNames.ContinuousActionOutput) && + !model.outputs.Contains(TensorNames.DiscreteActionOutput) && + !model.outputs.Contains(TensorNames.DeterministicContinuousActionOutput) && + !model.outputs.Contains(TensorNames.DeterministicDiscreteActionOutput)) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain any Action Output Node.") + ); + return false; + } + + // Check the presence of action output shape tensor + if (!model.SupportsContinuousAndDiscrete()) + { + if (model.GetTensorByName(TensorNames.ActionOutputShapeDeprecated) == null) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain any Action Output Shape Node.") + ); + return false; + } + if (model.GetTensorByName(TensorNames.IsContinuousControlDeprecated) == null) + { + failedModelChecks.Add( + FailedCheck.Warning($"Required constant \"{TensorNames.IsContinuousControlDeprecated}\" was " + + "not found in the model file. " + + "This is only required for model that uses a deprecated model format.") + ); + return false; + } + } + else + { + if (model.outputs.Contains(TensorNames.ContinuousActionOutput)) + { + if (model.GetTensorByName(TensorNames.ContinuousActionOutputShape) == null) + { + failedModelChecks.Add( + FailedCheck.Warning("The model uses continuous action but does not contain Continuous Action Output Shape Node.") + ); + return false; + } + else if (!model.HasContinuousOutputs(deterministicInference)) + { + var actionType = deterministicInference ? "deterministic" : "stochastic"; + var actionName = deterministicInference ? "Deterministic" : ""; + failedModelChecks.Add( + FailedCheck.Warning($"The model uses {actionType} inference but does not contain {actionName} Continuous Action Output Tensor. Uncheck `Deterministic inference` flag..") + ); + return false; + } + } + + if (model.outputs.Contains(TensorNames.DiscreteActionOutput)) + { + if (model.GetTensorByName(TensorNames.DiscreteActionOutputShape) == null) + { + failedModelChecks.Add( + FailedCheck.Warning("The model uses discrete action but does not contain Discrete Action Output Shape Node.") + ); + return false; + } + else if (!model.HasDiscreteOutputs(deterministicInference)) + { + var actionType = deterministicInference ? "deterministic" : "stochastic"; + var actionName = deterministicInference ? "Deterministic" : ""; + failedModelChecks.Add( + FailedCheck.Warning($"The model uses {actionType} inference but does not contain {actionName} Discrete Action Output Tensor. Uncheck `Deterministic inference` flag.") + ); + return false; + } + } + } + return true; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs.meta b/com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d43474fb469e071d23fdbf940fbac3023fe9b740 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1193c3bef93464baca0d8ba2d6ce1754 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs b/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs new file mode 100644 index 0000000000000000000000000000000000000000..2d04c04e696e2f407850389d10c7a849ea0476dc --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs @@ -0,0 +1,904 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Policies; + +namespace Unity.MLAgents.Inference +{ + /// + /// Prepares the Tensors for the Learning Brain and exposes a list of failed checks if Model + /// and BrainParameters are incompatible. + /// + internal class BarracudaModelParamLoader + { + internal enum ModelApiVersion + { + /// + /// ML-Agents model version for versions 1.x.y + /// The observations are split between vector and visual observations + /// There are legacy action outputs for discrete and continuous actions + /// LSTM inputs and outputs are handled by Barracuda + /// + MLAgents1_0 = 2, + + /// + /// All observations are treated the same and named obs_{i} with i being + /// the sensor index + /// Legacy "action" output is no longer present + /// LSTM inputs and outputs are treated like regular inputs and outputs + /// and no longer managed by Barracuda + /// + MLAgents2_0 = 3, + MinSupportedVersion = MLAgents1_0, + MaxSupportedVersion = MLAgents2_0 + } + + internal class FailedCheck + { + public enum CheckTypeEnum + { + Info = 0, + Warning = 1, + Error = 2 + } + public CheckTypeEnum CheckType; + public string Message; + public static FailedCheck Info(string message) + { + return new FailedCheck { CheckType = CheckTypeEnum.Info, Message = message }; + } + + public static FailedCheck Warning(string message) + { + return new FailedCheck { CheckType = CheckTypeEnum.Warning, Message = message }; + } + + public static FailedCheck Error(string message) + { + return new FailedCheck { CheckType = CheckTypeEnum.Error, Message = message }; + } + } + + /// + /// Checks that a model has the appropriate version. + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// A FailedCheck containing the error message if the version of the model does not mach, else null + public static FailedCheck CheckModelVersion(Model model) + { + var modelApiVersion = model.GetVersion(); + if (modelApiVersion < (int)ModelApiVersion.MinSupportedVersion) + { + return FailedCheck.Error( + "Model was trained with a older version of the trainer than is supported. " + + "Either retrain with an newer trainer, or use an older version of com.unity.ml-agents.\n" + + $"Model version: {modelApiVersion} Minimum supported version: {(int)ModelApiVersion.MinSupportedVersion}" + ); + } + + if (modelApiVersion > (int)ModelApiVersion.MaxSupportedVersion) + { + return FailedCheck.Error( + "Model was trained with a newer version of the trainer than is supported. " + + "Either retrain with an older trainer, or update to a newer version of com.unity.ml-agents.\n" + + $"Model version: {modelApiVersion} Maximum supported version: {(int)ModelApiVersion.MaxSupportedVersion}" + ); + } + + var memorySize = (int)model.GetTensorByName(TensorNames.MemorySize)[0]; + + if (modelApiVersion == (int)ModelApiVersion.MLAgents1_0 && memorySize > 0) + { + // This block is to make sure that models that are trained with MLAgents version 1.x and have + // an LSTM (i.e. use the barracuda _c and _h inputs and outputs) will not work with MLAgents version + // 2.x. This is because Barracuda version 2.x will eventually drop support for the _c and _h inputs + // and only ML-Agents 2.x models will be compatible. + return FailedCheck.Error( + "Models from com.unity.ml-agents 1.x that use recurrent neural networks are not supported in newer versions. " + + "Either retrain with an newer trainer, or use an older version of com.unity.ml-agents.\n" + ); + } + return null; + } + + /// + /// Factory for the ModelParamLoader : Creates a ModelParamLoader and runs the checks + /// on it. + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Attached sensor components + /// Attached actuator components + /// Sum of the sizes of all ObservableAttributes. + /// BehaviorType or the Agent to check. + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// A IEnumerable of the checks that failed + public static IEnumerable CheckModel( + Model model, + BrainParameters brainParameters, + ISensor[] sensors, + ActuatorComponent[] actuatorComponents, + int observableAttributeTotalSize = 0, + BehaviorType behaviorType = BehaviorType.Default, + bool deterministicInference = false + ) + { + List failedModelChecks = new List(); + if (model == null) + { + var errorMsg = "There is no model for this Brain; cannot run inference. "; + if (behaviorType == BehaviorType.InferenceOnly) + { + errorMsg += "Either assign a model, or change to a different Behavior Type."; + } + else + { + errorMsg += "(But can still train)"; + } + failedModelChecks.Add(FailedCheck.Info(errorMsg)); + return failedModelChecks; + } + + var hasExpectedTensors = model.CheckExpectedTensors(failedModelChecks, deterministicInference); + if (!hasExpectedTensors) + { + return failedModelChecks; + } + + var modelApiVersion = model.GetVersion(); + var versionCheck = CheckModelVersion(model); + if (versionCheck != null) + { + failedModelChecks.Add(versionCheck); + } + + var memorySize = (int)model.GetTensorByName(TensorNames.MemorySize)[0]; + if (memorySize == -1) + { + failedModelChecks.Add(FailedCheck.Warning($"Missing node in the model provided : {TensorNames.MemorySize}" + )); + return failedModelChecks; + } + + if (modelApiVersion == (int)ModelApiVersion.MLAgents1_0) + { + failedModelChecks.AddRange( + CheckInputTensorPresenceLegacy(model, brainParameters, memorySize, sensors) + ); + failedModelChecks.AddRange( + CheckInputTensorShapeLegacy(model, brainParameters, sensors, observableAttributeTotalSize) + ); + } + else if (modelApiVersion == (int)ModelApiVersion.MLAgents2_0) + { + failedModelChecks.AddRange( + CheckInputTensorPresence(model, brainParameters, memorySize, sensors, deterministicInference) + ); + failedModelChecks.AddRange( + CheckInputTensorShape(model, brainParameters, sensors, observableAttributeTotalSize) + ); + } + + + failedModelChecks.AddRange( + CheckOutputTensorShape(model, brainParameters, actuatorComponents) + ); + + failedModelChecks.AddRange( + CheckOutputTensorPresence(model, memorySize, deterministicInference) + ); + return failedModelChecks; + } + + /// + /// Generates failed checks that correspond to inputs expected by the model that are not + /// present in the BrainParameters. Tests the models created with the API of version 1.X + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// + /// The memory size that the model is expecting. + /// + /// Array of attached sensor components + /// + /// A IEnumerable of the checks that failed + /// + static IEnumerable CheckInputTensorPresenceLegacy( + Model model, + BrainParameters brainParameters, + int memory, + ISensor[] sensors + ) + { + var failedModelChecks = new List(); + var tensorsNames = model.GetInputNames(); + + // If there is no Vector Observation Input but the Brain Parameters expect one. + if ((brainParameters.VectorObservationSize != 0) && + (!tensorsNames.Contains(TensorNames.VectorObservationPlaceholder))) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain a Vector Observation Placeholder Input. " + + "You must set the Vector Observation Space Size to 0.") + ); + } + + // If there are not enough Visual Observation Input compared to what the + // sensors expect. + var visObsIndex = 0; + for (var sensorIndex = 0; sensorIndex < sensors.Length; sensorIndex++) + { + var sensor = sensors[sensorIndex]; + if (sensor.GetObservationSpec().Shape.Length == 3) + { + if (!tensorsNames.Contains( + TensorNames.GetVisualObservationName(visObsIndex))) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain a Visual Observation Placeholder Input " + + $"for sensor component {visObsIndex} ({sensor.GetType().Name}).") + ); + } + visObsIndex++; + } + if (sensor.GetObservationSpec().Shape.Length == 2) + { + if (!tensorsNames.Contains( + TensorNames.GetObservationName(sensorIndex))) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain an Observation Placeholder Input " + + $"for sensor component {sensorIndex} ({sensor.GetType().Name}).") + ); + } + } + } + + var expectedVisualObs = model.GetNumVisualInputs(); + // Check if there's not enough visual sensors (too many would be handled above) + if (expectedVisualObs > visObsIndex) + { + failedModelChecks.Add( + FailedCheck.Warning($"The model expects {expectedVisualObs} visual inputs," + + $" but only found {visObsIndex} visual sensors.") + ); + } + + // If the model has a non-negative memory size but requires a recurrent input + if (memory > 0) + { + if (!tensorsNames.Any(x => x.EndsWith("_h")) || + !tensorsNames.Any(x => x.EndsWith("_c"))) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain a Recurrent Input Node but has memory_size.") + ); + } + } + + // If the model uses discrete control but does not have an input for action masks + if (model.HasDiscreteOutputs()) + { + if (!tensorsNames.Contains(TensorNames.ActionMaskPlaceholder)) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain an Action Mask but is using Discrete Control.") + ); + } + } + return failedModelChecks; + } + + /// + /// Generates failed checks that correspond to inputs expected by the model that are not + /// present in the BrainParameters. + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// + /// The memory size that the model is expecting. + /// + /// Array of attached sensor components + /// Inference only: set to true if the action selection from model should be + /// Deterministic. + /// + /// A IEnumerable of the checks that failed + /// + static IEnumerable CheckInputTensorPresence( + Model model, + BrainParameters brainParameters, + int memory, + ISensor[] sensors, + bool deterministicInference = false + ) + { + var failedModelChecks = new List(); + var tensorsNames = model.GetInputNames(); + for (var sensorIndex = 0; sensorIndex < sensors.Length; sensorIndex++) + { + if (!tensorsNames.Contains( + TensorNames.GetObservationName(sensorIndex))) + { + var sensor = sensors[sensorIndex]; + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain an Observation Placeholder Input " + + $"for sensor component {sensorIndex} ({sensor.GetType().Name}).") + ); + } + } + + // If the model has a non-negative memory size but requires a recurrent input + if (memory > 0) + { + var modelVersion = model.GetVersion(); + if (!tensorsNames.Any(x => x == TensorNames.RecurrentInPlaceholder)) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain a Recurrent Input Node but has memory_size.") + ); + } + } + + // If the model uses discrete control but does not have an input for action masks + if (model.HasDiscreteOutputs(deterministicInference)) + { + if (!tensorsNames.Contains(TensorNames.ActionMaskPlaceholder)) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain an Action Mask but is using Discrete Control.") + ); + } + } + return failedModelChecks; + } + + /// + /// Generates failed checks that correspond to outputs expected by the model that are not + /// present in the BrainParameters. + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// The memory size that the model is expecting/ + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// + /// A IEnumerable of the checks that failed + /// + static IEnumerable CheckOutputTensorPresence(Model model, int memory, bool deterministicInference = false) + { + var failedModelChecks = new List(); + + // If there is no Recurrent Output but the model is Recurrent. + if (memory > 0) + { + var allOutputs = model.GetOutputNames(deterministicInference).ToList(); + if (!allOutputs.Any(x => x == TensorNames.RecurrentOutput)) + { + failedModelChecks.Add( + FailedCheck.Warning("The model does not contain a Recurrent Output Node but has memory_size.") + ); + } + } + return failedModelChecks; + } + + /// + /// Checks that the shape of the visual observation input placeholder is the same as the corresponding sensor. + /// + /// The tensor that is expected by the model + /// The sensor that produces the visual observation. + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + /// + static FailedCheck CheckVisualObsShape( + TensorProxy tensorProxy, ISensor sensor) + { + var shape = sensor.GetObservationSpec().Shape; + var heightBp = shape[0]; + var widthBp = shape[1]; + var pixelBp = shape[2]; + var heightT = tensorProxy.Height; + var widthT = tensorProxy.Width; + var pixelT = tensorProxy.Channels; + if ((widthBp != widthT) || (heightBp != heightT) || (pixelBp != pixelT)) + { + return FailedCheck.Warning($"The visual Observation of the model does not match. " + + $"Received TensorProxy of shape [?x{widthBp}x{heightBp}x{pixelBp}] but " + + $"was expecting [?x{widthT}x{heightT}x{pixelT}] for the {sensor.GetName()} Sensor." + ); + } + return null; + } + + /// + /// Checks that the shape of the rank 2 observation input placeholder is the same as the corresponding sensor. + /// + /// The tensor that is expected by the model + /// The sensor that produces the visual observation. + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + /// + static FailedCheck CheckRankTwoObsShape( + TensorProxy tensorProxy, ISensor sensor) + { + var shape = sensor.GetObservationSpec().Shape; + var dim1Bp = shape[0]; + var dim2Bp = shape[1]; + var dim1T = tensorProxy.Channels; + var dim2T = tensorProxy.Width; + var dim3T = tensorProxy.Height; + if ((dim1Bp != dim1T) || (dim2Bp != dim2T)) + { + var proxyDimStr = $"[?x{dim1T}x{dim2T}]"; + if (dim3T > 1) + { + proxyDimStr = $"[?x{dim3T}x{dim2T}x{dim1T}]"; + } + return FailedCheck.Warning($"An Observation of the model does not match. " + + $"Received TensorProxy of shape [?x{dim1Bp}x{dim2Bp}] but " + + $"was expecting {proxyDimStr} for the {sensor.GetName()} Sensor." + ); + } + return null; + } + + /// + /// Checks that the shape of the rank 2 observation input placeholder is the same as the corresponding sensor. + /// + /// The tensor that is expected by the model + /// The sensor that produces the visual observation. + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + /// + static FailedCheck CheckRankOneObsShape( + TensorProxy tensorProxy, ISensor sensor) + { + var shape = sensor.GetObservationSpec().Shape; + var dim1Bp = shape[0]; + var dim1T = tensorProxy.Channels; + var dim2T = tensorProxy.Width; + var dim3T = tensorProxy.Height; + if ((dim1Bp != dim1T)) + { + var proxyDimStr = $"[?x{dim1T}]"; + if (dim2T > 1) + { + proxyDimStr = $"[?x{dim1T}x{dim2T}]"; + } + if (dim3T > 1) + { + proxyDimStr = $"[?x{dim3T}x{dim2T}x{dim1T}]"; + } + return FailedCheck.Warning($"An Observation of the model does not match. " + + $"Received TensorProxy of shape [?x{dim1Bp}] but " + + $"was expecting {proxyDimStr} for the {sensor.GetName()} Sensor." + ); + } + return null; + } + + /// + /// Generates failed checks that correspond to inputs shapes incompatibilities between + /// the model and the BrainParameters. Tests the models created with the API of version 1.X + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Attached sensors + /// Sum of the sizes of all ObservableAttributes. + /// A IEnumerable of the checks that failed + static IEnumerable CheckInputTensorShapeLegacy( + Model model, BrainParameters brainParameters, ISensor[] sensors, + int observableAttributeTotalSize) + { + var failedModelChecks = new List(); + var tensorTester = + new Dictionary>() + { + {TensorNames.VectorObservationPlaceholder, CheckVectorObsShapeLegacy}, + {TensorNames.PreviousActionPlaceholder, CheckPreviousActionShape}, + {TensorNames.RandomNormalEpsilonPlaceholder, ((bp, tensor, scs, i) => null)}, + {TensorNames.ActionMaskPlaceholder, ((bp, tensor, scs, i) => null)}, + {TensorNames.SequenceLengthPlaceholder, ((bp, tensor, scs, i) => null)}, + {TensorNames.RecurrentInPlaceholder, ((bp, tensor, scs, i) => null)}, + }; + + foreach (var mem in model.memories) + { + tensorTester[mem.input] = ((bp, tensor, scs, i) => null); + } + + var visObsIndex = 0; + for (var sensorIndex = 0; sensorIndex < sensors.Length; sensorIndex++) + { + var sens = sensors[sensorIndex]; + if (sens.GetObservationSpec().Shape.Length == 3) + { + tensorTester[TensorNames.GetVisualObservationName(visObsIndex)] = + (bp, tensor, scs, i) => CheckVisualObsShape(tensor, sens); + visObsIndex++; + } + if (sens.GetObservationSpec().Shape.Length == 2) + { + tensorTester[TensorNames.GetObservationName(sensorIndex)] = + (bp, tensor, scs, i) => CheckRankTwoObsShape(tensor, sens); + } + } + + // If the model expects an input but it is not in this list + foreach (var tensor in model.GetInputTensors()) + { + if (!tensorTester.ContainsKey(tensor.name)) + { + if (!tensor.name.Contains("visual_observation")) + { + failedModelChecks.Add( + FailedCheck.Warning("Model contains an unexpected input named : " + tensor.name) + ); + } + } + else + { + var tester = tensorTester[tensor.name]; + var error = tester.Invoke(brainParameters, tensor, sensors, observableAttributeTotalSize); + if (error != null) + { + failedModelChecks.Add(error); + } + } + } + return failedModelChecks; + } + + /// + /// Checks that the shape of the Vector Observation input placeholder is the same in the + /// model and in the Brain Parameters. Tests the models created with the API of version 1.X + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// The tensor that is expected by the model + /// Array of attached sensor components + /// Sum of the sizes of all ObservableAttributes. + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + /// + static FailedCheck CheckVectorObsShapeLegacy( + BrainParameters brainParameters, TensorProxy tensorProxy, ISensor[] sensors, + int observableAttributeTotalSize) + { + var vecObsSizeBp = brainParameters.VectorObservationSize; + var numStackedVector = brainParameters.NumStackedVectorObservations; + var totalVecObsSizeT = tensorProxy.shape[tensorProxy.shape.Length - 1]; + + var totalVectorSensorSize = 0; + foreach (var sens in sensors) + { + if ((sens.GetObservationSpec().Shape.Length == 1)) + { + totalVectorSensorSize += sens.GetObservationSpec().Shape[0]; + } + } + + if (totalVectorSensorSize != totalVecObsSizeT) + { + var sensorSizes = ""; + foreach (var sensorComp in sensors) + { + if (sensorComp.GetObservationSpec().Shape.Length == 1) + { + var vecSize = sensorComp.GetObservationSpec().Shape[0]; + if (sensorSizes.Length == 0) + { + sensorSizes = $"[{vecSize}"; + } + else + { + sensorSizes += $", {vecSize}"; + } + } + } + + sensorSizes += "]"; + return FailedCheck.Warning( + $"Vector Observation Size of the model does not match. Was expecting {totalVecObsSizeT} " + + $"but received: \n" + + $"Vector observations: {vecObsSizeBp} x {numStackedVector}\n" + + $"Total [Observable] attributes: {observableAttributeTotalSize}\n" + + $"Sensor sizes: {sensorSizes}." + ); + } + return null; + } + + /// + /// Generates failed checks that correspond to inputs shapes incompatibilities between + /// the model and the BrainParameters. + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Attached sensors + /// Sum of the sizes of all ObservableAttributes. + /// A IEnumerable of the checks that failed + static IEnumerable CheckInputTensorShape( + Model model, BrainParameters brainParameters, ISensor[] sensors, + int observableAttributeTotalSize) + { + var failedModelChecks = new List(); + var tensorTester = + new Dictionary>() + { + {TensorNames.PreviousActionPlaceholder, CheckPreviousActionShape}, + {TensorNames.RandomNormalEpsilonPlaceholder, ((bp, tensor, scs, i) => null)}, + {TensorNames.ActionMaskPlaceholder, ((bp, tensor, scs, i) => null)}, + {TensorNames.SequenceLengthPlaceholder, ((bp, tensor, scs, i) => null)}, + {TensorNames.RecurrentInPlaceholder, ((bp, tensor, scs, i) => null)}, + }; + + foreach (var mem in model.memories) + { + tensorTester[mem.input] = ((bp, tensor, scs, i) => null); + } + + for (var sensorIndex = 0; sensorIndex < sensors.Length; sensorIndex++) + { + var sens = sensors[sensorIndex]; + if (sens.GetObservationSpec().Rank == 3) + { + tensorTester[TensorNames.GetObservationName(sensorIndex)] = + (bp, tensor, scs, i) => CheckVisualObsShape(tensor, sens); + } + if (sens.GetObservationSpec().Rank == 2) + { + tensorTester[TensorNames.GetObservationName(sensorIndex)] = + (bp, tensor, scs, i) => CheckRankTwoObsShape(tensor, sens); + } + if (sens.GetObservationSpec().Rank == 1) + { + tensorTester[TensorNames.GetObservationName(sensorIndex)] = + (bp, tensor, scs, i) => CheckRankOneObsShape(tensor, sens); + } + } + + // If the model expects an input but it is not in this list + foreach (var tensor in model.GetInputTensors()) + { + if (!tensorTester.ContainsKey(tensor.name)) + { + failedModelChecks.Add(FailedCheck.Warning("Model contains an unexpected input named : " + tensor.name + )); + } + else + { + var tester = tensorTester[tensor.name]; + var error = tester.Invoke(brainParameters, tensor, sensors, observableAttributeTotalSize); + if (error != null) + { + failedModelChecks.Add(error); + } + } + } + return failedModelChecks; + } + + /// + /// Checks that the shape of the Previous Vector Action input placeholder is the same in the + /// model and in the Brain Parameters. + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// The tensor that is expected by the model + /// Array of attached sensor components (unused). + /// Sum of the sizes of all ObservableAttributes (unused). + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + static FailedCheck CheckPreviousActionShape( + BrainParameters brainParameters, TensorProxy tensorProxy, + ISensor[] sensors, int observableAttributeTotalSize) + { + var numberActionsBp = brainParameters.ActionSpec.NumDiscreteActions; + var numberActionsT = tensorProxy.shape[tensorProxy.shape.Length - 1]; + if (numberActionsBp != numberActionsT) + { + return FailedCheck.Warning("Previous Action Size of the model does not match. " + + $"Received {numberActionsBp} but was expecting {numberActionsT}." + ); + } + return null; + } + + /// + /// Generates failed checks that correspond to output shapes incompatibilities between + /// the model and the BrainParameters. + /// + /// + /// The Barracuda engine model for loading static parameters + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Array of attached actuator components. + /// + /// A IEnumerable of error messages corresponding to the incompatible shapes between model + /// and BrainParameters. + /// + static IEnumerable CheckOutputTensorShape( + Model model, + BrainParameters brainParameters, + ActuatorComponent[] actuatorComponents) + { + var failedModelChecks = new List(); + + // If the model expects an output but it is not in this list + var modelContinuousActionSize = model.ContinuousOutputSize(); + var continuousError = CheckContinuousActionOutputShape(brainParameters, actuatorComponents, modelContinuousActionSize); + if (continuousError != null) + { + failedModelChecks.Add(continuousError); + } + FailedCheck discreteError = null; + var modelApiVersion = model.GetVersion(); + if (modelApiVersion == (int)ModelApiVersion.MLAgents1_0) + { + var modelSumDiscreteBranchSizes = model.DiscreteOutputSize(); + discreteError = CheckDiscreteActionOutputShapeLegacy(brainParameters, actuatorComponents, modelSumDiscreteBranchSizes); + } + if (modelApiVersion == (int)ModelApiVersion.MLAgents2_0) + { + var modelDiscreteBranches = model.GetTensorByName(TensorNames.DiscreteActionOutputShape); + discreteError = CheckDiscreteActionOutputShape(brainParameters, actuatorComponents, modelDiscreteBranches); + } + + if (discreteError != null) + { + failedModelChecks.Add(discreteError); + } + return failedModelChecks; + } + + /// + /// Checks that the shape of the discrete action output is the same in the + /// model and in the Brain Parameters. + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Array of attached actuator components. + /// The Tensor of branch sizes. + /// + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + /// + static FailedCheck CheckDiscreteActionOutputShape( + BrainParameters brainParameters, ActuatorComponent[] actuatorComponents, Tensor modelDiscreteBranches) + { + var discreteActionBranches = brainParameters.ActionSpec.BranchSizes.ToList(); + foreach (var actuatorComponent in actuatorComponents) + { + var actionSpec = actuatorComponent.ActionSpec; + discreteActionBranches.AddRange(actionSpec.BranchSizes); + } + + int modelDiscreteBranchesLength = modelDiscreteBranches?.length ?? 0; + if (modelDiscreteBranchesLength != discreteActionBranches.Count) + { + return FailedCheck.Warning("Discrete Action Size of the model does not match. The BrainParameters expect " + + $"{discreteActionBranches.Count} branches but the model contains {modelDiscreteBranchesLength}." + ); + } + + for (int i = 0; i < modelDiscreteBranchesLength; i++) + { + if (modelDiscreteBranches != null && modelDiscreteBranches[i] != discreteActionBranches[i]) + { + return FailedCheck.Warning($"The number of Discrete Actions of branch {i} does not match. " + + $"Was expecting {discreteActionBranches[i]} but the model contains {modelDiscreteBranches[i]} " + ); + } + } + return null; + } + + /// + /// Checks that the shape of the discrete action output is the same in the + /// model and in the Brain Parameters. Tests the models created with the API of version 1.X + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Array of attached actuator components. + /// + /// The size of the discrete action output that is expected by the model. + /// + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + /// + static FailedCheck CheckDiscreteActionOutputShapeLegacy( + BrainParameters brainParameters, ActuatorComponent[] actuatorComponents, int modelSumDiscreteBranchSizes) + { + // TODO: check each branch size instead of sum of branch sizes + var sumOfDiscreteBranchSizes = brainParameters.ActionSpec.SumOfDiscreteBranchSizes; + + foreach (var actuatorComponent in actuatorComponents) + { + var actionSpec = actuatorComponent.ActionSpec; + sumOfDiscreteBranchSizes += actionSpec.SumOfDiscreteBranchSizes; + } + + if (modelSumDiscreteBranchSizes != sumOfDiscreteBranchSizes) + { + return FailedCheck.Warning("Discrete Action Size of the model does not match. The BrainParameters expect " + + $"{sumOfDiscreteBranchSizes} but the model contains {modelSumDiscreteBranchSizes}." + ); + } + return null; + } + + /// + /// Checks that the shape of the continuous action output is the same in the + /// model and in the Brain Parameters. + /// + /// + /// The BrainParameters that are used verify the compatibility with the InferenceEngine + /// + /// Array of attached actuator components. + /// + /// The size of the continuous action output that is expected by the model. + /// + /// If the Check failed, returns a string containing information about why the + /// check failed. If the check passed, returns null. + static FailedCheck CheckContinuousActionOutputShape( + BrainParameters brainParameters, ActuatorComponent[] actuatorComponents, int modelContinuousActionSize) + { + var numContinuousActions = brainParameters.ActionSpec.NumContinuousActions; + + foreach (var actuatorComponent in actuatorComponents) + { + var actionSpec = actuatorComponent.ActionSpec; + numContinuousActions += actionSpec.NumContinuousActions; + } + + if (modelContinuousActionSize != numContinuousActions) + { + return FailedCheck.Warning( + "Continuous Action Size of the model does not match. The BrainParameters and ActuatorComponents expect " + + $"{numContinuousActions} but the model contains {modelContinuousActionSize}." + ); + } + return null; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs.meta b/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8958faf1e5d4faeb568daa860e94f28fb37d6419 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 399c5e92395a1484cb2808ac397745e1 +timeCreated: 1539197357 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs b/com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs new file mode 100644 index 0000000000000000000000000000000000000000..68a997f2bbc9f2bdb6eadbe06243feed9b78a6e8 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs @@ -0,0 +1,284 @@ +using System.Collections.Generic; +using System; +using Unity.Barracuda; +using Unity.MLAgents.Inference.Utils; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Inference +{ + /// + /// Reshapes a Tensor so that its first dimension becomes equal to the current batch size + /// and initializes its content to be zeros. Will only work on 2-dimensional tensors. + /// The second dimension of the Tensor will not be modified. + /// + internal class BiDimensionalOutputGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + + public BiDimensionalOutputGenerator(ITensorAllocator allocator) + { + m_Allocator = allocator; + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + TensorUtils.ResizeTensor(tensorProxy, batchSize, m_Allocator); + } + } + + /// + /// Generates the Tensor corresponding to the BatchSize input : Will be a one dimensional + /// integer array of size 1 containing the batch size. + /// + internal class BatchSizeGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + + public BatchSizeGenerator(ITensorAllocator allocator) + { + m_Allocator = allocator; + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + tensorProxy.data?.Dispose(); + tensorProxy.data = m_Allocator.Alloc(new TensorShape(1, 1)); + tensorProxy.data[0] = batchSize; + } + } + + /// + /// Generates the Tensor corresponding to the SequenceLength input : Will be a one + /// dimensional integer array of size 1 containing 1. + /// Note : the sequence length is always one since recurrent networks only predict for + /// one step at the time. + /// + internal class SequenceLengthGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + + public SequenceLengthGenerator(ITensorAllocator allocator) + { + m_Allocator = allocator; + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + tensorProxy.shape = new long[0]; + tensorProxy.data?.Dispose(); + tensorProxy.data = m_Allocator.Alloc(new TensorShape(1, 1)); + tensorProxy.data[0] = 1; + } + } + + /// + /// Generates the Tensor corresponding to the Recurrent input : Will be a two + /// dimensional float array of dimension [batchSize x memorySize]. + /// It will use the Memory data contained in the agentInfo to fill the data + /// of the tensor. + /// + internal class RecurrentInputGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + Dictionary> m_Memories; + + public RecurrentInputGenerator( + ITensorAllocator allocator, + Dictionary> memories) + { + m_Allocator = allocator; + m_Memories = memories; + } + + public void Generate( + TensorProxy tensorProxy, int batchSize, IList infos) + { + TensorUtils.ResizeTensor(tensorProxy, batchSize, m_Allocator); + + var memorySize = tensorProxy.data.width; + + var agentIndex = 0; + for (var infoIndex = 0; infoIndex < infos.Count; infoIndex++) + { + var infoSensorPair = infos[infoIndex]; + var info = infoSensorPair.agentInfo; + List memory; + + if (info.done) + { + m_Memories.Remove(info.episodeId); + } + if (!m_Memories.TryGetValue(info.episodeId, out memory)) + { + for (var j = 0; j < memorySize; j++) + { + tensorProxy.data[agentIndex, 0, j, 0] = 0; + } + agentIndex++; + continue; + } + for (var j = 0; j < Math.Min(memorySize, memory.Count); j++) + { + if (j >= memory.Count) + { + break; + } + tensorProxy.data[agentIndex, 0, j, 0] = memory[j]; + } + agentIndex++; + } + } + } + + /// + /// Generates the Tensor corresponding to the Previous Action input : Will be a two + /// dimensional integer array of dimension [batchSize x actionSize]. + /// It will use the previous action data contained in the agentInfo to fill the data + /// of the tensor. + /// + internal class PreviousActionInputGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + + public PreviousActionInputGenerator(ITensorAllocator allocator) + { + m_Allocator = allocator; + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + TensorUtils.ResizeTensor(tensorProxy, batchSize, m_Allocator); + + var actionSize = tensorProxy.shape[tensorProxy.shape.Length - 1]; + var agentIndex = 0; + for (var infoIndex = 0; infoIndex < infos.Count; infoIndex++) + { + var infoSensorPair = infos[infoIndex]; + var info = infoSensorPair.agentInfo; + var pastAction = info.storedActions.DiscreteActions; + if (!pastAction.IsEmpty()) + { + for (var j = 0; j < actionSize; j++) + { + tensorProxy.data[agentIndex, j] = pastAction[j]; + } + } + + agentIndex++; + } + } + } + + /// + /// Generates the Tensor corresponding to the Action Mask input : Will be a two + /// dimensional float array of dimension [batchSize x numActionLogits]. + /// It will use the Action Mask data contained in the agentInfo to fill the data + /// of the tensor. + /// + internal class ActionMaskInputGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + + public ActionMaskInputGenerator(ITensorAllocator allocator) + { + m_Allocator = allocator; + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + TensorUtils.ResizeTensor(tensorProxy, batchSize, m_Allocator); + + var maskSize = tensorProxy.shape[tensorProxy.shape.Length - 1]; + var agentIndex = 0; + for (var infoIndex = 0; infoIndex < infos.Count; infoIndex++) + { + var infoSensorPair = infos[infoIndex]; + var agentInfo = infoSensorPair.agentInfo; + var maskList = agentInfo.discreteActionMasks; + for (var j = 0; j < maskSize; j++) + { + var isUnmasked = (maskList != null && maskList[j]) ? 0.0f : 1.0f; + tensorProxy.data[agentIndex, j] = isUnmasked; + } + agentIndex++; + } + } + } + + /// + /// Generates the Tensor corresponding to the Epsilon input : Will be a two + /// dimensional float array of dimension [batchSize x actionSize]. + /// It will use the generate random input data from a normal Distribution. + /// + internal class RandomNormalInputGenerator : TensorGenerator.IGenerator + { + readonly RandomNormal m_RandomNormal; + readonly ITensorAllocator m_Allocator; + + public RandomNormalInputGenerator(int seed, ITensorAllocator allocator) + { + m_RandomNormal = new RandomNormal(seed); + m_Allocator = allocator; + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + TensorUtils.ResizeTensor(tensorProxy, batchSize, m_Allocator); + TensorUtils.FillTensorWithRandomNormal(tensorProxy, m_RandomNormal); + } + } + + /// + /// Generates the Tensor corresponding to the Observation input : Will be a multi + /// dimensional float array. + /// It will use the Observation data contained in the sensors to fill the data + /// of the tensor. + /// + internal class ObservationGenerator : TensorGenerator.IGenerator + { + readonly ITensorAllocator m_Allocator; + List m_SensorIndices = new List(); + ObservationWriter m_ObservationWriter = new ObservationWriter(); + + public ObservationGenerator(ITensorAllocator allocator) + { + m_Allocator = allocator; + } + + public void AddSensorIndex(int sensorIndex) + { + m_SensorIndices.Add(sensorIndex); + } + + public void Generate(TensorProxy tensorProxy, int batchSize, IList infos) + { + TensorUtils.ResizeTensor(tensorProxy, batchSize, m_Allocator); + var agentIndex = 0; + for (var infoIndex = 0; infoIndex < infos.Count; infoIndex++) + { + var info = infos[infoIndex]; + if (info.agentInfo.done) + { + // If the agent is done, we might have a stale reference to the sensors + // e.g. a dependent object might have been disposed. + // To avoid this, just fill observation with zeroes instead of calling sensor.Write. + TensorUtils.FillTensorBatch(tensorProxy, agentIndex, 0.0f); + } + else + { + var tensorOffset = 0; + // Write each sensor consecutively to the tensor + for (var sensorIndexIndex = 0; sensorIndexIndex < m_SensorIndices.Count; sensorIndexIndex++) + { + var sensorIndex = m_SensorIndices[sensorIndexIndex]; + var sensor = info.sensors[sensorIndex]; + m_ObservationWriter.SetTarget(tensorProxy, agentIndex, tensorOffset); + var numWritten = sensor.Write(m_ObservationWriter); + tensorOffset += numWritten; + } + } + agentIndex++; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs.meta b/com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5f0b9469c208d1e6b48126ad9cb7a311bbc31e58 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c57a4989c7e54b93ab56293698d7d237 +timeCreated: 1539109542 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Inference/ModelRunner.cs b/com.unity.ml-agents/Runtime/Inference/ModelRunner.cs new file mode 100644 index 0000000000000000000000000000000000000000..e7d4c1c646313424ca475b4fe32e7f536b2f984e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/ModelRunner.cs @@ -0,0 +1,253 @@ +using System.Collections.Generic; +using Unity.Barracuda; +using UnityEngine.Profiling; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Inference +{ + internal struct AgentInfoSensorsPair + { + public AgentInfo agentInfo; + public List sensors; + } + + internal class ModelRunner + { + List m_Infos = new List(); + Dictionary m_LastActionsReceived = new Dictionary(); + List m_OrderedAgentsRequestingDecisions = new List(); + + ITensorAllocator m_TensorAllocator; + TensorGenerator m_TensorGenerator; + TensorApplier m_TensorApplier; + + NNModel m_Model; + string m_ModelName; + InferenceDevice m_InferenceDevice; + IWorker m_Engine; + bool m_Verbose = false; + bool m_DeterministicInference; + string[] m_OutputNames; + IReadOnlyList m_InferenceInputs; + List m_InferenceOutputs; + Dictionary m_InputsByName; + Dictionary> m_Memories = new Dictionary>(); + + SensorShapeValidator m_SensorShapeValidator = new SensorShapeValidator(); + + bool m_ObservationsInitialized; + + /// + /// Initializes the Brain with the Model that it will use when selecting actions for + /// the agents + /// + /// The Barracuda model to load + /// Description of the actions for the Agent. + /// Inference execution device. CPU is the fastest + /// option for most of ML Agents models. + /// The seed that will be used to initialize the RandomNormal + /// and Multinomial objects used when running inference. + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// Throws an error when the model is null + /// + public ModelRunner( + NNModel model, + ActionSpec actionSpec, + InferenceDevice inferenceDevice, + int seed = 0, + bool deterministicInference = false) + { + Model barracudaModel; + m_Model = model; + m_ModelName = model?.name; + m_InferenceDevice = inferenceDevice; + m_DeterministicInference = deterministicInference; + m_TensorAllocator = new TensorCachingAllocator(); + if (model != null) + { +#if BARRACUDA_VERBOSE + m_Verbose = true; +#endif + + D.logEnabled = m_Verbose; + + barracudaModel = ModelLoader.Load(model); + + var failedCheck = BarracudaModelParamLoader.CheckModelVersion( + barracudaModel + ); + if (failedCheck != null) + { + if (failedCheck.CheckType == BarracudaModelParamLoader.FailedCheck.CheckTypeEnum.Error) + { + throw new UnityAgentsException(failedCheck.Message); + } + } + + WorkerFactory.Type executionDevice; + switch (inferenceDevice) + { + case InferenceDevice.CPU: + executionDevice = WorkerFactory.Type.CSharp; + break; + case InferenceDevice.GPU: + executionDevice = WorkerFactory.Type.ComputePrecompiled; + break; + case InferenceDevice.Burst: + executionDevice = WorkerFactory.Type.CSharpBurst; + break; + case InferenceDevice.Default: // fallthrough + default: + executionDevice = WorkerFactory.Type.CSharpBurst; + break; + } + m_Engine = WorkerFactory.CreateWorker(executionDevice, barracudaModel, m_Verbose); + } + else + { + barracudaModel = null; + m_Engine = null; + } + + m_InferenceInputs = barracudaModel.GetInputTensors(); + m_OutputNames = barracudaModel.GetOutputNames(m_DeterministicInference); + + m_TensorGenerator = new TensorGenerator( + seed, m_TensorAllocator, m_Memories, barracudaModel, m_DeterministicInference); + m_TensorApplier = new TensorApplier( + actionSpec, seed, m_TensorAllocator, m_Memories, barracudaModel, m_DeterministicInference); + m_InputsByName = new Dictionary(); + m_InferenceOutputs = new List(); + } + + public InferenceDevice InferenceDevice + { + get { return m_InferenceDevice; } + } + + public NNModel Model + { + get { return m_Model; } + } + + void PrepareBarracudaInputs(IReadOnlyList infInputs) + { + m_InputsByName.Clear(); + for (var i = 0; i < infInputs.Count; i++) + { + var inp = infInputs[i]; + m_InputsByName[inp.name] = inp.data; + } + } + + public void Dispose() + { + if (m_Engine != null) + m_Engine.Dispose(); + m_TensorAllocator?.Reset(false); + } + + void FetchBarracudaOutputs(string[] names) + { + m_InferenceOutputs.Clear(); + foreach (var n in names) + { + var output = m_Engine.PeekOutput(n); + m_InferenceOutputs.Add(TensorUtils.TensorProxyFromBarracuda(output, n)); + } + } + + public void PutObservations(AgentInfo info, List sensors) + { +#if DEBUG + m_SensorShapeValidator.ValidateSensors(sensors); +#endif + m_Infos.Add(new AgentInfoSensorsPair + { + agentInfo = info, + sensors = sensors + }); + + // We add the episodeId to this list to maintain the order in which the decisions were requested + m_OrderedAgentsRequestingDecisions.Add(info.episodeId); + + if (!m_LastActionsReceived.ContainsKey(info.episodeId)) + { + m_LastActionsReceived[info.episodeId] = ActionBuffers.Empty; + } + if (info.done) + { + // If the agent is done, we remove the key from the last action dictionary since no action + // should be taken. + m_LastActionsReceived.Remove(info.episodeId); + } + } + + public void DecideBatch() + { + var currentBatchSize = m_Infos.Count; + if (currentBatchSize == 0) + { + return; + } + if (!m_ObservationsInitialized) + { + // Just grab the first agent in the collection (any will suffice, really). + // We check for an empty Collection above, so this will always return successfully. + var firstInfo = m_Infos[0]; + m_TensorGenerator.InitializeObservations(firstInfo.sensors, m_TensorAllocator); + m_ObservationsInitialized = true; + } + + Profiler.BeginSample("ModelRunner.DecideAction"); + Profiler.BeginSample(m_ModelName); + + Profiler.BeginSample($"GenerateTensors"); + // Prepare the input tensors to be feed into the engine + m_TensorGenerator.GenerateTensors(m_InferenceInputs, currentBatchSize, m_Infos); + Profiler.EndSample(); + + Profiler.BeginSample($"PrepareBarracudaInputs"); + PrepareBarracudaInputs(m_InferenceInputs); + Profiler.EndSample(); + + // Execute the Model + Profiler.BeginSample($"ExecuteGraph"); + m_Engine.Execute(m_InputsByName); + Profiler.EndSample(); + + Profiler.BeginSample($"FetchBarracudaOutputs"); + FetchBarracudaOutputs(m_OutputNames); + Profiler.EndSample(); + + Profiler.BeginSample($"ApplyTensors"); + // Update the outputs + m_TensorApplier.ApplyTensors(m_InferenceOutputs, m_OrderedAgentsRequestingDecisions, m_LastActionsReceived); + Profiler.EndSample(); + + Profiler.EndSample(); // end name + Profiler.EndSample(); // end ModelRunner.DecideAction + + m_Infos.Clear(); + + m_OrderedAgentsRequestingDecisions.Clear(); + } + + public bool HasModel(NNModel other, InferenceDevice otherInferenceDevice) + { + return m_Model == other && m_InferenceDevice == otherInferenceDevice; + } + + public ActionBuffers GetAction(int agentId) + { + if (m_LastActionsReceived.ContainsKey(agentId)) + { + return m_LastActionsReceived[agentId]; + } + return ActionBuffers.Empty; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/ModelRunner.cs.meta b/com.unity.ml-agents/Runtime/Inference/ModelRunner.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e4e8e67539617360ecc0cb9d2a72d3a29f59991d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/ModelRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f3f4b630ca3f4a4ba74922ec8249046 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/TensorApplier.cs b/com.unity.ml-agents/Runtime/Inference/TensorApplier.cs new file mode 100644 index 0000000000000000000000000000000000000000..a03b3d927e5cfa939bc3630f0271740d1c81e514 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorApplier.cs @@ -0,0 +1,112 @@ +using System.Collections.Generic; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; + + +namespace Unity.MLAgents.Inference +{ + /// + /// Mapping between the output tensor names and the method that will use the + /// output tensors and the Agents present in the batch to update their action, memories and + /// value estimates. + /// A TensorApplier implements a Dictionary of strings (node names) to an Action. + /// This action takes as input the tensor and the Dictionary of Agent to AgentInfo for + /// the current batch. + /// + internal class TensorApplier + { + /// + /// A tensor Applier's Execute method takes a tensor and a Dictionary of Agent to AgentInfo. + /// Uses the data contained inside the tensor to modify the state of the Agent. The Tensors + /// are assumed to have the batch size on the first dimension and the agents to be ordered + /// the same way in the dictionary and in the tensor. + /// + public interface IApplier + { + /// + /// Applies the values in the Tensor to the Agents present in the agentInfos + /// + /// + /// The Tensor containing the data to be applied to the Agents + /// + /// List of Agents Ids that will be updated using the tensor's data + /// Dictionary of AgentId to Actions to be updated + void Apply(TensorProxy tensorProxy, IList actionIds, Dictionary lastActions); + } + + readonly Dictionary m_Dict = new Dictionary(); + + /// + /// Returns a new TensorAppliers object. + /// + /// Description of the actions for the Agent. + /// The seed the Appliers will be initialized with. + /// Tensor allocator + /// Dictionary of AgentInfo.id to memory used to pass to the inference model. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + public TensorApplier( + ActionSpec actionSpec, + int seed, + ITensorAllocator allocator, + Dictionary> memories, + object barracudaModel = null, + bool deterministicInference = false) + { + // If model is null, no inference to run and exception is thrown before reaching here. + if (barracudaModel == null) + { + return; + } + + var model = (Model)barracudaModel; + if (!model.SupportsContinuousAndDiscrete()) + { + actionSpec.CheckAllContinuousOrDiscrete(); + } + if (actionSpec.NumContinuousActions > 0) + { + var tensorName = model.ContinuousOutputName(deterministicInference); + m_Dict[tensorName] = new ContinuousActionOutputApplier(actionSpec); + } + var modelVersion = model.GetVersion(); + if (actionSpec.NumDiscreteActions > 0) + { + var tensorName = model.DiscreteOutputName(deterministicInference); + if (modelVersion == (int)BarracudaModelParamLoader.ModelApiVersion.MLAgents1_0) + { + m_Dict[tensorName] = new LegacyDiscreteActionOutputApplier(actionSpec, seed, allocator); + } + if (modelVersion == (int)BarracudaModelParamLoader.ModelApiVersion.MLAgents2_0) + { + m_Dict[tensorName] = new DiscreteActionOutputApplier(actionSpec, seed, allocator); + } + } + m_Dict[TensorNames.RecurrentOutput] = new MemoryOutputApplier(memories); + } + + /// + /// Updates the state of the agents based on the data present in the tensor. + /// + /// Enumerable of tensors containing the data. + /// List of Agents Ids that will be updated using the tensor's data + /// Dictionary of AgentId to Actions to be updated + /// One of the tensor does not have an + /// associated applier. + public void ApplyTensors( + IReadOnlyList tensors, IList actionIds, Dictionary lastActions) + { + for (var tensorIndex = 0; tensorIndex < tensors.Count; tensorIndex++) + { + var tensor = tensors[tensorIndex]; + if (!m_Dict.ContainsKey(tensor.name)) + { + throw new UnityAgentsException( + $"Unknown tensorProxy expected as output : {tensor.name}"); + } + m_Dict[tensor.name].Apply(tensor, actionIds, lastActions); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/TensorApplier.cs.meta b/com.unity.ml-agents/Runtime/Inference/TensorApplier.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d95eb26a15d74d5f307831e58af4183a51177c60 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorApplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1bef4f4ae72645108f16614355473e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs b/com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..f1a3578bdb737450b1169b71701f494aa30d4331 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs @@ -0,0 +1,179 @@ +using System.Collections.Generic; +using Unity.Barracuda; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Inference +{ + /// + /// Mapping between Tensor names and generators. + /// A TensorGenerator implements a Dictionary of strings (node names) to an Action. + /// The Action take as argument the tensor, the current batch size and a Dictionary of + /// Agent to AgentInfo corresponding to the current batch. + /// Each Generator reshapes and fills the data of the tensor based of the data of the batch. + /// When the TensorProxy is an Input to the model, the shape of the Tensor will be modified + /// depending on the current batch size and the data of the Tensor will be filled using the + /// Dictionary of Agent to AgentInfo. + /// When the TensorProxy is an Output of the model, only the shape of the Tensor will be + /// modified using the current batch size. The data will be pre-filled with zeros. + /// + internal class TensorGenerator + { + public interface IGenerator + { + /// + /// Modifies the data inside a Tensor according to the information contained in the + /// AgentInfos contained in the current batch. + /// + /// The tensor the data and shape will be modified. + /// The number of agents present in the current batch. + /// + /// List of AgentInfos containing the information that will be used to populate + /// the tensor's data. + /// + void Generate( + TensorProxy tensorProxy, int batchSize, IList infos); + } + + readonly Dictionary m_Dict = new Dictionary(); + int m_ApiVersion; + + /// + /// Returns a new TensorGenerators object. + /// + /// The seed the Generators will be initialized with. + /// Tensor allocator. + /// Dictionary of AgentInfo.id to memory for use in the inference model. + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + public TensorGenerator( + int seed, + ITensorAllocator allocator, + Dictionary> memories, + object barracudaModel = null, + bool deterministicInference = false) + { + // If model is null, no inference to run and exception is thrown before reaching here. + if (barracudaModel == null) + { + return; + } + var model = (Model)barracudaModel; + + m_ApiVersion = model.GetVersion(); + + // Generator for Inputs + m_Dict[TensorNames.BatchSizePlaceholder] = + new BatchSizeGenerator(allocator); + m_Dict[TensorNames.SequenceLengthPlaceholder] = + new SequenceLengthGenerator(allocator); + m_Dict[TensorNames.RecurrentInPlaceholder] = + new RecurrentInputGenerator(allocator, memories); + + m_Dict[TensorNames.PreviousActionPlaceholder] = + new PreviousActionInputGenerator(allocator); + m_Dict[TensorNames.ActionMaskPlaceholder] = + new ActionMaskInputGenerator(allocator); + m_Dict[TensorNames.RandomNormalEpsilonPlaceholder] = + new RandomNormalInputGenerator(seed, allocator); + + + // Generators for Outputs + if (model.HasContinuousOutputs(deterministicInference)) + { + m_Dict[model.ContinuousOutputName(deterministicInference)] = new BiDimensionalOutputGenerator(allocator); + } + if (model.HasDiscreteOutputs(deterministicInference)) + { + m_Dict[model.DiscreteOutputName(deterministicInference)] = new BiDimensionalOutputGenerator(allocator); + } + m_Dict[TensorNames.RecurrentOutput] = new BiDimensionalOutputGenerator(allocator); + m_Dict[TensorNames.ValueEstimateOutput] = new BiDimensionalOutputGenerator(allocator); + } + + public void InitializeObservations(List sensors, ITensorAllocator allocator) + { + if (m_ApiVersion == (int)BarracudaModelParamLoader.ModelApiVersion.MLAgents1_0) + { + // Loop through the sensors on a representative agent. + // All vector observations use a shared ObservationGenerator since they are concatenated. + // All other observations use a unique ObservationInputGenerator + var visIndex = 0; + ObservationGenerator vecObsGen = null; + for (var sensorIndex = 0; sensorIndex < sensors.Count; sensorIndex++) + { + var sensor = sensors[sensorIndex]; + var rank = sensor.GetObservationSpec().Rank; + ObservationGenerator obsGen = null; + string obsGenName = null; + switch (rank) + { + case 1: + if (vecObsGen == null) + { + vecObsGen = new ObservationGenerator(allocator); + } + obsGen = vecObsGen; + obsGenName = TensorNames.VectorObservationPlaceholder; + break; + case 2: + // If the tensor is of rank 2, we use the index of the sensor + // to create the name + obsGen = new ObservationGenerator(allocator); + obsGenName = TensorNames.GetObservationName(sensorIndex); + break; + case 3: + // If the tensor is of rank 3, we use the "visual observation + // index", which only counts the rank 3 sensors + obsGen = new ObservationGenerator(allocator); + obsGenName = TensorNames.GetVisualObservationName(visIndex); + visIndex++; + break; + default: + throw new UnityAgentsException( + $"Sensor {sensor.GetName()} have an invalid rank {rank}"); + } + obsGen.AddSensorIndex(sensorIndex); + m_Dict[obsGenName] = obsGen; + } + } + + if (m_ApiVersion == (int)BarracudaModelParamLoader.ModelApiVersion.MLAgents2_0) + { + for (var sensorIndex = 0; sensorIndex < sensors.Count; sensorIndex++) + { + var obsGen = new ObservationGenerator(allocator); + var obsGenName = TensorNames.GetObservationName(sensorIndex); + obsGen.AddSensorIndex(sensorIndex); + m_Dict[obsGenName] = obsGen; + } + } + } + + /// + /// Populates the data of the tensor inputs given the data contained in the current batch + /// of agents. + /// + /// Enumerable of tensors that will be modified. + /// The number of agents present in the current batch + /// + /// List of AgentsInfos and Sensors that contains the + /// data that will be used to modify the tensors + /// One of the tensor does not have an + /// associated generator. + public void GenerateTensors( + IReadOnlyList tensors, int currentBatchSize, IList infos) + { + for (var tensorIndex = 0; tensorIndex < tensors.Count; tensorIndex++) + { + var tensor = tensors[tensorIndex]; + if (!m_Dict.ContainsKey(tensor.name)) + { + throw new UnityAgentsException( + $"Unknown tensorProxy expected as input : {tensor.name}"); + } + m_Dict[tensor.name].Generate(tensor, currentBatchSize, infos); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs.meta b/com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..db25d5da72293399f9ba00ce150dae8d699114e9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a24e86bc77c4a5088a5fd04d6d30e81 +timeCreated: 1537484304 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Inference/TensorNames.cs b/com.unity.ml-agents/Runtime/Inference/TensorNames.cs new file mode 100644 index 0000000000000000000000000000000000000000..48ae04b5f6e192a111ccd8f42e8c8438e8a4c04e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorNames.cs @@ -0,0 +1,50 @@ +namespace Unity.MLAgents.Inference +{ + /// + /// Contains the names of the input and output tensors for the Inference Brain. + /// + internal static class TensorNames + { + public const string BatchSizePlaceholder = "batch_size"; + public const string SequenceLengthPlaceholder = "sequence_length"; + public const string VectorObservationPlaceholder = "vector_observation"; + public const string RecurrentInPlaceholder = "recurrent_in"; + public const string VisualObservationPlaceholderPrefix = "visual_observation_"; + public const string ObservationPlaceholderPrefix = "obs_"; + public const string PreviousActionPlaceholder = "prev_action"; + public const string ActionMaskPlaceholder = "action_masks"; + public const string RandomNormalEpsilonPlaceholder = "epsilon"; + + public const string ValueEstimateOutput = "value_estimate"; + public const string RecurrentOutput = "recurrent_out"; + public const string MemorySize = "memory_size"; + public const string VersionNumber = "version_number"; + public const string ContinuousActionOutputShape = "continuous_action_output_shape"; + public const string DiscreteActionOutputShape = "discrete_action_output_shape"; + public const string ContinuousActionOutput = "continuous_actions"; + public const string DiscreteActionOutput = "discrete_actions"; + public const string DeterministicContinuousActionOutput = "deterministic_continuous_actions"; + public const string DeterministicDiscreteActionOutput = "deterministic_discrete_actions"; + + // Deprecated TensorNames entries for backward compatibility + public const string IsContinuousControlDeprecated = "is_continuous_control"; + public const string ActionOutputDeprecated = "action"; + public const string ActionOutputShapeDeprecated = "action_output_shape"; + + /// + /// Returns the name of the visual observation with a given index + /// + public static string GetVisualObservationName(int index) + { + return VisualObservationPlaceholderPrefix + index; + } + + /// + /// Returns the name of the observation with a given index + /// + public static string GetObservationName(int index) + { + return ObservationPlaceholderPrefix + index; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/TensorNames.cs.meta b/com.unity.ml-agents/Runtime/Inference/TensorNames.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6ddb324bf3803aac6207efda5049180b8c562893 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorNames.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b28a46ea97c2445794d29d5a8a718a4a +timeCreated: 1538158527 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Inference/TensorProxy.cs b/com.unity.ml-agents/Runtime/Inference/TensorProxy.cs new file mode 100644 index 0000000000000000000000000000000000000000..b36b765ca8273604b2dc578bddf68c36094d1988 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorProxy.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using Unity.Barracuda; +using Unity.MLAgents.Inference.Utils; + +namespace Unity.MLAgents.Inference +{ + /// + /// Tensor - A class to encapsulate a Tensor used for inference. + /// + /// This class contains the Array that holds the data array, the shapes, type and the + /// placeholder in the execution graph. All the fields are editable in the inspector, + /// allowing the user to specify everything but the data in a graphical way. + /// + [Serializable] + internal class TensorProxy + { + public enum TensorType + { + Integer, + FloatingPoint + }; + + static readonly Dictionary k_TypeMap = + new Dictionary() + { + {TensorType.FloatingPoint, typeof(float)}, + {TensorType.Integer, typeof(int)} + }; + + public string name; + public TensorType valueType; + + // Since Type is not serializable, we use the DisplayType for the Inspector + public Type DataType => k_TypeMap[valueType]; + public long[] shape; + public Tensor data; + + public long Height + { + get { return shape.Length == 4 ? shape[1] : shape[5]; } + } + + public long Width + { + get { return shape.Length == 4 ? shape[2] : shape[6]; } + } + + public long Channels + { + get { return shape.Length == 4 ? shape[3] : shape[7]; } + } + } + + internal static class TensorUtils + { + public static void ResizeTensor(TensorProxy tensor, int batch, ITensorAllocator allocator) + { + if (tensor.shape[0] == batch && + tensor.data != null && tensor.data.batch == batch) + { + return; + } + + tensor.data?.Dispose(); + tensor.shape[0] = batch; + + if (tensor.shape.Length == 4 || tensor.shape.Length == 8) + { + tensor.data = allocator.Alloc( + new TensorShape( + batch, + (int)tensor.Height, + (int)tensor.Width, + (int)tensor.Channels)); + } + else + { + tensor.data = allocator.Alloc( + new TensorShape( + batch, + (int)tensor.shape[tensor.shape.Length - 1])); + } + } + + internal static long[] TensorShapeFromBarracuda(TensorShape src) + { + if (src.height == 1 && src.width == 1) + { + return new long[] { src.batch, src.channels }; + } + + return new long[] { src.batch, src.height, src.width, src.channels }; + } + + public static TensorProxy TensorProxyFromBarracuda(Tensor src, string nameOverride = null) + { + var shape = TensorShapeFromBarracuda(src.shape); + return new TensorProxy + { + name = nameOverride ?? src.name, + valueType = TensorProxy.TensorType.FloatingPoint, + shape = shape, + data = src + }; + } + + /// + /// Fill a specific batch of a TensorProxy with a given value + /// + /// + /// The batch index to fill. + /// + public static void FillTensorBatch(TensorProxy tensorProxy, int batch, float fillValue) + { + var height = tensorProxy.data.height; + var width = tensorProxy.data.width; + var channels = tensorProxy.data.channels; + for (var h = 0; h < height; h++) + { + for (var w = 0; w < width; w++) + { + for (var c = 0; c < channels; c++) + { + tensorProxy.data[batch, h, w, c] = fillValue; + } + } + } + } + + /// + /// Fill a pre-allocated Tensor with random numbers + /// + /// The pre-allocated Tensor to fill + /// RandomNormal object used to populate tensor + /// + /// Throws when trying to fill a Tensor of type other than float + /// + /// + /// Throws when the Tensor is not allocated + /// + public static void FillTensorWithRandomNormal( + TensorProxy tensorProxy, RandomNormal randomNormal) + { + if (tensorProxy.DataType != typeof(float)) + { + throw new NotImplementedException("Only float data types are currently supported"); + } + + if (tensorProxy.data == null) + { + throw new ArgumentNullException(); + } + + for (var i = 0; i < tensorProxy.data.length; i++) + { + tensorProxy.data[i] = (float)randomNormal.NextDouble(); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/TensorProxy.cs.meta b/com.unity.ml-agents/Runtime/Inference/TensorProxy.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5e0dd9d08d2c4b29a3777b243787a97e140ec414 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/TensorProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 926149e757bc849689e00e12d8c6fbdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/Utils.meta b/com.unity.ml-agents/Runtime/Inference/Utils.meta new file mode 100644 index 0000000000000000000000000000000000000000..5431b3d6468328200572f93c093a8083cdcd75b1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7872e22895343467b9fe96d336a7edba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/Utils/Multinomial.cs b/com.unity.ml-agents/Runtime/Inference/Utils/Multinomial.cs new file mode 100644 index 0000000000000000000000000000000000000000..41603dd3baf718e931897815e40d52866ff8833b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/Utils/Multinomial.cs @@ -0,0 +1,59 @@ +namespace Unity.MLAgents.Inference.Utils +{ + /// + /// Multinomial - Draws samples from a multinomial distribution given a (potentially unscaled) + /// cumulative mass function (CMF). This means that the CMF need not "end" with probability + /// mass of 1.0. For instance: [0.1, 0.2, 0.5] is a valid (unscaled). What is important is + /// that it is a cumulative function, not a probability function. In other words, + /// entry[i] = P(x \le i), NOT P(i - 1 \le x \lt i). + /// (\le stands for less than or equal to while \lt is strictly less than). + /// + internal class Multinomial + { + readonly System.Random m_Random; + + /// + /// Constructor. + /// + /// + /// Seed for the random number generator used in the sampling process. + /// + public Multinomial(int seed) + { + m_Random = new System.Random(seed); + } + + /// + /// Samples from the Multinomial distribution defined by the provided cumulative + /// mass function. + /// + /// + /// Cumulative mass function, which may be unscaled. The entries in this array need + /// to be monotonic (always increasing). If the CMF is scaled, then the last entry in + /// the array will be 1.0. + /// + /// The number of possible branches, i.e. the effective size of the cmf array. + /// A sampled index from the CMF ranging from 0 to branchSize-1. + public int Sample(float[] cmf, int branchSize) + { + var p = (float)m_Random.NextDouble() * cmf[branchSize - 1]; + var cls = 0; + while (cmf[cls] < p) + { + ++cls; + } + + return cls; + } + + /// + /// Samples from the Multinomial distribution defined by the provided cumulative + /// mass function. + /// + /// A sampled index from the CMF ranging from 0 to cmf.Length-1. + public int Sample(float[] cmf) + { + return Sample(cmf, cmf.Length); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/Utils/Multinomial.cs.meta b/com.unity.ml-agents/Runtime/Inference/Utils/Multinomial.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2467eb50b3356986b13b461f52b5fe0efda2ea74 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/Utils/Multinomial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c9e297dad748408db9e5ce26b940fe3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Inference/Utils/RandomNormal.cs b/com.unity.ml-agents/Runtime/Inference/Utils/RandomNormal.cs new file mode 100644 index 0000000000000000000000000000000000000000..4b0e1e7e2fa230f8cdf610065c5a2b437af0933c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/Utils/RandomNormal.cs @@ -0,0 +1,56 @@ +using System; + +namespace Unity.MLAgents.Inference.Utils +{ + /// + /// RandomNormal - A random number generator that produces normally distributed random + /// numbers using the Marsaglia polar method: + /// https://en.wikipedia.org/wiki/Marsaglia_polar_method + /// TODO: worth overriding System.Random instead of aggregating? + /// + internal class RandomNormal + { + readonly double m_Mean; + readonly double m_Stddev; + readonly Random m_Random; + + public RandomNormal(int seed, float mean = 0.0f, float stddev = 1.0f) + { + m_Mean = mean; + m_Stddev = stddev; + m_Random = new Random(seed); + } + + // Each iteration produces two numbers. Hold one here for next call + bool m_HasSpare; + double m_SpareUnscaled; + + /// + /// Return the next random double number. + /// + /// Next random double number. + public double NextDouble() + { + if (m_HasSpare) + { + m_HasSpare = false; + return m_SpareUnscaled * m_Stddev + m_Mean; + } + + double u, v, s; + do + { + u = m_Random.NextDouble() * 2.0 - 1.0; + v = m_Random.NextDouble() * 2.0 - 1.0; + s = u * u + v * v; + } + while (s >= 1.0 || Math.Abs(s) < double.Epsilon); + + s = Math.Sqrt(-2.0 * Math.Log(s) / s); + m_SpareUnscaled = u * s; + m_HasSpare = true; + + return v * s * m_Stddev + m_Mean; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Inference/Utils/RandomNormal.cs.meta b/com.unity.ml-agents/Runtime/Inference/Utils/RandomNormal.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3cd152462dc785134ddb0915fe3602b0e08e8c20 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Inference/Utils/RandomNormal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df8528cf20f0e4c64a4a7596eccc1631 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/InplaceArray.cs b/com.unity.ml-agents/Runtime/InplaceArray.cs new file mode 100644 index 0000000000000000000000000000000000000000..91208136d8511420a6c1aa5a5f78a3a2bac6f16b --- /dev/null +++ b/com.unity.ml-agents/Runtime/InplaceArray.cs @@ -0,0 +1,240 @@ +using System; +using System.Collections.Generic; + +namespace Unity.MLAgents +{ + /// + /// An array-like object that stores up to four elements. + /// This is a value type that does not allocate any additional memory. + /// + /// + /// This does not implement any interfaces such as IList, in order to avoid any accidental boxing allocations. + /// + /// + public struct InplaceArray : IEquatable> where T : struct + { + private const int k_MaxLength = 4; + private readonly int m_Length; + + private T m_Elem0; + private T m_Elem1; + private T m_Elem2; + private T m_Elem3; + + /// + /// Create a length-1 array. + /// + /// + public InplaceArray(T elem0) + { + m_Length = 1; + m_Elem0 = elem0; + m_Elem1 = new T(); + m_Elem2 = new T(); + m_Elem3 = new T(); + } + + /// + /// Create a length-2 array. + /// + /// + /// + public InplaceArray(T elem0, T elem1) + { + m_Length = 2; + m_Elem0 = elem0; + m_Elem1 = elem1; + m_Elem2 = new T(); + m_Elem3 = new T(); + } + + /// + /// Create a length-3 array. + /// + /// + /// + /// + public InplaceArray(T elem0, T elem1, T elem2) + { + m_Length = 3; + m_Elem0 = elem0; + m_Elem1 = elem1; + m_Elem2 = elem2; + m_Elem3 = new T(); + } + + /// + /// Create a length-3 array. + /// + /// + /// + /// + /// + public InplaceArray(T elem0, T elem1, T elem2, T elem3) + { + m_Length = 4; + m_Elem0 = elem0; + m_Elem1 = elem1; + m_Elem2 = elem2; + m_Elem3 = elem3; + } + + /// + /// Construct an InplaceArray from an IList (e.g. Array or List). + /// The source must be non-empty and have at most 4 elements. + /// + /// + /// + /// + public static InplaceArray FromList(IList elems) + { + switch (elems.Count) + { + case 1: + return new InplaceArray(elems[0]); + case 2: + return new InplaceArray(elems[0], elems[1]); + case 3: + return new InplaceArray(elems[0], elems[1], elems[2]); + case 4: + return new InplaceArray(elems[0], elems[1], elems[2], elems[3]); + default: + throw new ArgumentOutOfRangeException(); + } + } + + /// + /// Per-element access. + /// + /// + /// + public T this[int index] + { + get + { + if (index >= Length) + { + throw new IndexOutOfRangeException(); + } + + switch (index) + { + case 0: + return m_Elem0; + case 1: + return m_Elem1; + case 2: + return m_Elem2; + case 3: + return m_Elem3; + default: + throw new IndexOutOfRangeException(); + } + } + + set + { + if (index >= Length) + { + throw new IndexOutOfRangeException(); + } + + switch (index) + { + case 0: + m_Elem0 = value; + break; + case 1: + m_Elem1 = value; + break; + case 2: + m_Elem2 = value; + break; + case 3: + m_Elem3 = value; + break; + default: + throw new IndexOutOfRangeException(); + } + } + } + + /// + /// The length of the array. + /// + public int Length + { + get => m_Length; + } + + /// + /// Returns a string representation of the array's elements. + /// + /// + /// + public override string ToString() + { + switch (m_Length) + { + case 1: + return $"[{m_Elem0}]"; + case 2: + return $"[{m_Elem0}, {m_Elem1}]"; + case 3: + return $"[{m_Elem0}, {m_Elem1}, {m_Elem2}]"; + case 4: + return $"[{m_Elem0}, {m_Elem1}, {m_Elem2}, {m_Elem3}]"; + default: + throw new IndexOutOfRangeException(); + } + } + + /// + /// Check that the arrays have the same length and have all equal values. + /// + /// + /// + /// Whether the arrays are equivalent. + public static bool operator ==(InplaceArray lhs, InplaceArray rhs) + { + return lhs.Equals(rhs); + } + + /// + /// Check that the arrays are not equivalent. + /// + /// + /// + /// Whether the arrays are not equivalent + public static bool operator !=(InplaceArray lhs, InplaceArray rhs) => !lhs.Equals(rhs); + + /// + /// Check that the arrays are equivalent. + /// + /// + /// Whether the arrays are not equivalent + public override bool Equals(object other) => other is InplaceArray other1 && this.Equals(other1); + + /// + /// Check that the arrays are equivalent. + /// + /// + /// Whether the arrays are not equivalent + public bool Equals(InplaceArray other) + { + // See https://montemagno.com/optimizing-c-struct-equality-with-iequatable/ + var thisTuple = (m_Elem0, m_Elem1, m_Elem2, m_Elem3, Length); + var otherTuple = (other.m_Elem0, other.m_Elem1, other.m_Elem2, other.m_Elem3, other.Length); + return thisTuple.Equals(otherTuple); + } + + /// + /// Get a hashcode for the array. + /// + /// + public override int GetHashCode() + { + return (m_Elem0, m_Elem1, m_Elem2, m_Elem3, Length).GetHashCode(); + } + } +} diff --git a/com.unity.ml-agents/Runtime/InplaceArray.cs.meta b/com.unity.ml-agents/Runtime/InplaceArray.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3e4ab0c9287cbbfb41ce9d089b3c35eb3494cae1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/InplaceArray.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c1a80abee18a41c8aee89aeb33f5985d +timeCreated: 1615506199 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations.meta b/com.unity.ml-agents/Runtime/Integrations.meta new file mode 100644 index 0000000000000000000000000000000000000000..f218be2521d7e64cf9072cc4f5d3b600b498b4cb --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f8f4fd0bc35f4e8f9867228591f663e3 +timeCreated: 1618359419 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3.meta b/com.unity.ml-agents/Runtime/Integrations/Match3.meta new file mode 100644 index 0000000000000000000000000000000000000000..27b09a9eff9083a935aaf3db28bdf80dae66eba9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 569f8fa2b7dd477c9b71f09e9d633832 +timeCreated: 1600465975 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/AbstractBoard.cs b/com.unity.ml-agents/Runtime/Integrations/Match3/AbstractBoard.cs new file mode 100644 index 0000000000000000000000000000000000000000..d2f218a3f752af6e5172e1728a6c54c61d8e3b06 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/AbstractBoard.cs @@ -0,0 +1,312 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using UnityEngine; +using Debug = UnityEngine.Debug; + +namespace Unity.MLAgents.Integrations.Match3 +{ + /// + /// Representation of the AbstractBoard dimensions, and number of cell and special types. + /// + public struct BoardSize + { + /// + /// Number of rows on the board + /// + public int Rows; + + /// + /// Number of columns on the board + /// + public int Columns; + + /// + /// Maximum number of different types of cells (colors, pieces, etc). + /// + public int NumCellTypes; + + /// + /// Maximum number of special types. This can be zero, in which case + /// all cells of the same type are assumed to be equivalent. + /// + public int NumSpecialTypes; + + /// + /// Check that all fields of the left-hand BoardSize are less than or equal to the field of the right-hand BoardSize + /// + /// + /// + /// True if all fields are less than or equal. + public static bool operator <=(BoardSize lhs, BoardSize rhs) + { + return lhs.Rows <= rhs.Rows && lhs.Columns <= rhs.Columns && lhs.NumCellTypes <= rhs.NumCellTypes && + lhs.NumSpecialTypes <= rhs.NumSpecialTypes; + } + + /// + /// Check that all fields of the left-hand BoardSize are greater than or equal to the field of the right-hand BoardSize + /// + /// + /// + /// True if all fields are greater than or equal. + public static bool operator >=(BoardSize lhs, BoardSize rhs) + { + return lhs.Rows >= rhs.Rows && lhs.Columns >= rhs.Columns && lhs.NumCellTypes >= rhs.NumCellTypes && + lhs.NumSpecialTypes >= rhs.NumSpecialTypes; + } + + /// + /// Return a string representation of the BoardSize. + /// + /// + public override string ToString() + { + return + $"Rows: {Rows}, Columns: {Columns}, NumCellTypes: {NumCellTypes}, NumSpecialTypes: {NumSpecialTypes}"; + } + } + + /// + /// An adapter between ML Agents and a Match-3 game. + /// + public abstract class AbstractBoard : MonoBehaviour + { + /// + /// Return the maximum size of the board. This is used to determine the size of observations and actions, + /// so the returned values must not change. + /// + /// + public abstract BoardSize GetMaxBoardSize(); + + /// + /// Return the current size of the board. The values must less than or equal to the values returned from + /// . + /// By default, this will return ; if your board doesn't change size, you don't need to + /// override it. + /// + /// + public virtual BoardSize GetCurrentBoardSize() + { + return GetMaxBoardSize(); + } + + /// + /// Returns the "color" of the piece at the given row and column. + /// This should be between 0 and BoardSize.NumCellTypes-1 (inclusive). + /// The actual order of the values doesn't matter. + /// + /// + /// + /// + public abstract int GetCellType(int row, int col); + + /// + /// Returns the special type of the piece at the given row and column. + /// This should be between 0 and BoardSize.NumSpecialTypes (inclusive). + /// The actual order of the values doesn't matter. + /// + /// + /// + /// + public abstract int GetSpecialType(int row, int col); + + /// + /// Check whether the particular Move is valid for the game. + /// The actual results will depend on the rules of the game, but we provide + /// that handles basic match3 rules with no special or immovable pieces. + /// + /// + /// Moves that would go outside of are filtered out before they are + /// passed to IsMoveValid(). + /// + /// The move to check. + /// + public abstract bool IsMoveValid(Move m); + + /// + /// Instruct the game to make the given . Returns true if the move was made. + /// Note that during training, a move that was marked as invalid may occasionally still be + /// requested. If this happens, it is safe to do nothing and request another move. + /// + /// The move to carry out. + /// + public abstract bool MakeMove(Move m); + + /// + /// Return the total number of moves possible for the board. + /// + /// + public int NumMoves() + { + return Move.NumPotentialMoves(GetMaxBoardSize()); + } + + /// + /// An optional callback for when the all moves are invalid. Ideally, the game state should + /// be changed before this happens, but this is a way to get notified if not. + /// + public Action OnNoValidMovesAction; + + /// + /// Iterate through all moves on the board. + /// + /// + public IEnumerable AllMoves() + { + var maxBoardSize = GetMaxBoardSize(); + var currentBoardSize = GetCurrentBoardSize(); + + var currentMove = Move.FromMoveIndex(0, maxBoardSize); + for (var i = 0; i < NumMoves(); i++) + { + if (currentMove.InRangeForBoard(currentBoardSize)) + { + yield return currentMove; + } + currentMove.Next(maxBoardSize); + } + } + + /// + /// Iterate through all valid moves on the board. + /// + /// + public IEnumerable ValidMoves() + { + var maxBoardSize = GetMaxBoardSize(); + var currentBoardSize = GetCurrentBoardSize(); + + var currentMove = Move.FromMoveIndex(0, maxBoardSize); + for (var i = 0; i < NumMoves(); i++) + { + if (currentMove.InRangeForBoard(currentBoardSize) && IsMoveValid(currentMove)) + { + yield return currentMove; + } + currentMove.Next(maxBoardSize); + } + } + + /// + /// Returns true if swapping the cells specified by the move would result in + /// 3 or more cells of the same type in a row. This assumes that all pieces are allowed + /// to be moved; to add extra logic, incorporate it into your method. + /// + /// + /// + public bool SimpleIsMoveValid(Move move) + { + using (TimerStack.Instance.Scoped("SimpleIsMoveValid")) + { + var moveVal = GetCellType(move.Row, move.Column); + var (otherRow, otherCol) = move.OtherCell(); + var oppositeVal = GetCellType(otherRow, otherCol); + + // Simple check - if the values are the same, don't match + // This might not be valid for all games + { + if (moveVal == oppositeVal) + { + return false; + } + } + + bool moveMatches = CheckHalfMove(otherRow, otherCol, moveVal, move.Direction); + if (moveMatches) + { + // early out + return true; + } + + bool otherMatches = CheckHalfMove(move.Row, move.Column, oppositeVal, move.OtherDirection()); + return otherMatches; + } + } + + /// + /// Check if one of the cells that is swapped during a move matches 3 or more. + /// Since these checks are similar for each cell, we consider the move as two "half moves". + /// + /// + /// + /// + /// + /// + bool CheckHalfMove(int newRow, int newCol, int newValue, Direction incomingDirection) + { + var currentBoardSize = GetCurrentBoardSize(); + int matchedLeft = 0, matchedRight = 0, matchedUp = 0, matchedDown = 0; + + if (incomingDirection != Direction.Right) + { + for (var c = newCol - 1; c >= 0; c--) + { + if (GetCellType(newRow, c) == newValue) + matchedLeft++; + else + break; + } + } + + if (incomingDirection != Direction.Left) + { + for (var c = newCol + 1; c < currentBoardSize.Columns; c++) + { + if (GetCellType(newRow, c) == newValue) + matchedRight++; + else + break; + } + } + + if (incomingDirection != Direction.Down) + { + for (var r = newRow + 1; r < currentBoardSize.Rows; r++) + { + if (GetCellType(r, newCol) == newValue) + matchedUp++; + else + break; + } + } + + if (incomingDirection != Direction.Up) + { + for (var r = newRow - 1; r >= 0; r--) + { + if (GetCellType(r, newCol) == newValue) + matchedDown++; + else + break; + } + } + + if ((matchedUp + matchedDown >= 2) || (matchedLeft + matchedRight >= 2)) + { + return true; + } + + return false; + } + + /// + /// Make sure that the current BoardSize isn't larger than the original value of . + /// If it is, log a warning. + /// + /// + [Conditional("DEBUG")] + internal void CheckBoardSizes(BoardSize originalMaxBoardSize) + { + var currentBoardSize = GetCurrentBoardSize(); + if (!(currentBoardSize <= originalMaxBoardSize)) + { + Debug.LogWarning( + "Current BoardSize is larger than maximum board size was on initialization. This may cause unexpected results.\n" + + $"Original GetMaxBoardSize() result: {originalMaxBoardSize}\n" + + $"GetCurrentBoardSize() result: {currentBoardSize}" + ); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/AbstractBoard.cs.meta b/com.unity.ml-agents/Runtime/Integrations/Match3/AbstractBoard.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..42019368a138e8d64c5a8017c161fc47fa980b8b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/AbstractBoard.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6222defa70dc4c08aaeafd0be4e821d2 +timeCreated: 1600466051 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Actuator.cs b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Actuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..9bd60bd5717e6f0ccd73714a960d10c39115a8d1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Actuator.cs @@ -0,0 +1,188 @@ +using Unity.MLAgents.Actuators; +using Debug = UnityEngine.Debug; + + +namespace Unity.MLAgents.Integrations.Match3 +{ + /// + /// Actuator for a Match3 game. It translates valid moves (defined by AbstractBoard.IsMoveValid()) + /// in action masks, and applies the action to the board via AbstractBoard.MakeMove(). + /// + public class Match3Actuator : IActuator, IBuiltInActuator + { + AbstractBoard m_Board; + System.Random m_Random; + ActionSpec m_ActionSpec; + bool m_ForceHeuristic; + BoardSize m_MaxBoardSize; + + /// + /// Create a Match3Actuator. + /// + /// + /// Whether the inference action should be ignored and the Agent's Heuristic + /// should be called. This should only be used for generating comparison stats of the Heuristic. + /// The seed used to initialize . + /// + public Match3Actuator(AbstractBoard board, + bool forceHeuristic, + int seed, + string name) + { + m_Board = board; + m_MaxBoardSize = m_Board.GetMaxBoardSize(); + Name = name; + + m_ForceHeuristic = forceHeuristic; + + var numMoves = Move.NumPotentialMoves(m_MaxBoardSize); + m_ActionSpec = ActionSpec.MakeDiscrete(numMoves); + m_Random = new System.Random(seed); + } + + /// + public ActionSpec ActionSpec => m_ActionSpec; + + /// + public void OnActionReceived(ActionBuffers actions) + { + m_Board.CheckBoardSizes(m_MaxBoardSize); + if (m_ForceHeuristic) + { + Heuristic(actions); + } + var moveIndex = actions.DiscreteActions[0]; + + Move move = Move.FromMoveIndex(moveIndex, m_MaxBoardSize); + m_Board.MakeMove(move); + } + + /// + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + var currentBoardSize = m_Board.GetCurrentBoardSize(); + m_Board.CheckBoardSizes(m_MaxBoardSize); + const int branch = 0; + bool foundValidMove = false; + using (TimerStack.Instance.Scoped("WriteDiscreteActionMask")) + { + var numMoves = m_Board.NumMoves(); + + var currentMove = Move.FromMoveIndex(0, m_MaxBoardSize); + for (var i = 0; i < numMoves; i++) + { + // Check that the move is allowed for the current boardSize (e.g. it won't move a piece out of + // bounds), and that it's allowed by the game itself. + if (currentMove.InRangeForBoard(currentBoardSize) && m_Board.IsMoveValid(currentMove)) + { + foundValidMove = true; + } + else + { + actionMask.SetActionEnabled(branch, i, false); + } + currentMove.Next(m_MaxBoardSize); + } + + if (!foundValidMove) + { + // If all the moves are invalid and we mask all the actions out, this will cause an assert + // later on in IDiscreteActionMask. Instead, fire a callback to the user if they provided one, + // (or log a warning if not) and leave the last action unmasked. This isn't great, but + // an invalid move should be easier to handle than an exception.. + if (m_Board.OnNoValidMovesAction != null) + { + m_Board.OnNoValidMovesAction(); + } + else + { + Debug.LogWarning( + "No valid moves are available. The last action will be left unmasked, so " + + "an invalid move will be passed to AbstractBoard.MakeMove()." + ); + } + actionMask.SetActionEnabled(branch, numMoves - 1, true); + } + } + } + + /// + public string Name { get; } + + /// + public void ResetData() + { + } + + /// + public BuiltInActuatorType GetBuiltInActuatorType() + { + return BuiltInActuatorType.Match3Actuator; + } + + /// + public void Heuristic(in ActionBuffers actionsOut) + { + var discreteActions = actionsOut.DiscreteActions; + discreteActions[0] = GreedyMove(); + } + + /// + /// Returns a valid move that gives the highest value for EvalMovePoints(). If multiple moves have the same + /// value, one of them will be chosen with uniform probability. + /// + /// + /// By default, EvalMovePoints() returns 1, so all valid moves are equally likely. Inherit from this class and + /// override EvalMovePoints() to use your game's scoring as a better estimate. + /// + /// + internal int GreedyMove() + { + var bestMoveIndex = 0; + var bestMovePoints = -1; + var numMovesAtCurrentScore = 0; + + foreach (var move in m_Board.ValidMoves()) + { + var movePoints = EvalMovePoints(move); + if (movePoints < bestMovePoints) + { + // Worse, skip + continue; + } + + if (movePoints > bestMovePoints) + { + // Better, keep + bestMovePoints = movePoints; + bestMoveIndex = move.MoveIndex; + numMovesAtCurrentScore = 1; + } + else + { + // Tied for best - use reservoir sampling to make sure we select from equal moves uniformly. + // See https://en.wikipedia.org/wiki/Reservoir_sampling#Simple_algorithm + numMovesAtCurrentScore++; + var randVal = m_Random.Next(0, numMovesAtCurrentScore); + if (randVal == 0) + { + // Keep the new one + bestMoveIndex = move.MoveIndex; + } + } + } + + return bestMoveIndex; + } + + /// + /// Method to be overridden when evaluating how many points a specific move will generate. + /// + /// The move to evaluate. + /// The number of points the move generates. + protected virtual int EvalMovePoints(Move move) + { + return 1; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Actuator.cs.meta b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Actuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4052f5e51fa4da65a4cd0b21d36953e74d0b1113 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Actuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9083fa4c35dc499aa5a86d8e7447c7cf +timeCreated: 1600906373 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3ActuatorComponent.cs b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3ActuatorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..8dfa7e496e749d83f190048d6242d174700d9b9b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3ActuatorComponent.cs @@ -0,0 +1,81 @@ +using System; +using Unity.MLAgents.Actuators; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Integrations.Match3 +{ + /// + /// Actuator component for a Match3 game. Generates a Match3Actuator at runtime. + /// + [AddComponentMenu("ML Agents/Match 3 Actuator", (int)MenuGroup.Actuators)] + public class Match3ActuatorComponent : ActuatorComponent + { + [HideInInspector, SerializeField, FormerlySerializedAs("ActuatorName")] + string m_ActuatorName = "Match3 Actuator"; + + /// + /// Name of the generated Match3Actuator object. + /// Note that changing this at runtime does not affect how the Agent sorts the actuators. + /// + public string ActuatorName + { + get => m_ActuatorName; + set => m_ActuatorName = value; + } + + [HideInInspector, SerializeField, FormerlySerializedAs("RandomSeed")] + int m_RandomSeed = -1; + + /// + /// A random seed used in the actuator's heuristic, if needed. + /// + public int RandomSeed + { + get => m_RandomSeed; + set => m_RandomSeed = value; + } + + [HideInInspector, SerializeField, FormerlySerializedAs("ForceHeuristic")] + [Tooltip("Force using the Agent's Heuristic() method to decide the action. This should only be used in testing.")] + bool m_ForceHeuristic; + + /// + /// Force using the Agent's Heuristic() method to decide the action. This should only be used in testing. + /// + public bool ForceHeuristic + { + get => m_ForceHeuristic; + set => m_ForceHeuristic = value; + } + + /// + public override IActuator[] CreateActuators() + { + var board = GetComponent(); + if (!board) + { + return Array.Empty(); + } + + var seed = m_RandomSeed == -1 ? gameObject.GetInstanceID() : m_RandomSeed + 1; + return new IActuator[] { new Match3Actuator(board, m_ForceHeuristic, seed, m_ActuatorName) }; + } + + /// + public override ActionSpec ActionSpec + { + get + { + var board = GetComponent(); + if (board == null) + { + return ActionSpec.MakeContinuous(0); + } + + var numMoves = Move.NumPotentialMoves(board.GetMaxBoardSize()); + return ActionSpec.MakeDiscrete(numMoves); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3ActuatorComponent.cs.meta b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3ActuatorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c592f8be7a4ac6f587251d6c4627152ab26b2f01 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3ActuatorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 08e4b0da54cb4d56bfcbae22dd49ab8d +timeCreated: 1600906388 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Sensor.cs b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Sensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..4252bd9b50d4db6abd15331372c32a1463e20f91 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Sensor.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections.Generic; +using Unity.MLAgents.Sensors; +using UnityEngine; + +namespace Unity.MLAgents.Integrations.Match3 +{ + /// + /// Delegate that provides integer values at a given (x,y) coordinate. + /// + /// + /// + public delegate int GridValueProvider(int x, int y); + + /// + /// Type of observations to generate. + /// + /// + public enum Match3ObservationType + { + /// + /// Generate a one-hot encoding of the cell type for each cell on the board. If there are special types, + /// these will also be one-hot encoded. + /// + Vector, + + /// + /// Generate a one-hot encoding of the cell type for each cell on the board, but arranged as + /// a Rows x Columns visual observation. If there are special types, these will also be one-hot encoded. + /// + UncompressedVisual, + + /// + /// Generate a one-hot encoding of the cell type for each cell on the board, but arranged as + /// a Rows x Columns visual observation. If there are special types, these will also be one-hot encoded. + /// During training, these will be sent as a concatenated series of PNG images, with 3 channels per image. + /// + CompressedVisual + } + + /// + /// Sensor for Match3 games. Can generate either vector, compressed visual, + /// or uncompressed visual observations. Uses a GridValueProvider to determine the observation values. + /// + public class Match3Sensor : ISensor, IBuiltInSensor, IDisposable + { + Match3ObservationType m_ObservationType; + ObservationSpec m_ObservationSpec; + string m_Name; + + AbstractBoard m_Board; + BoardSize m_MaxBoardSize; + GridValueProvider m_GridValues; + int m_OneHotSize; + + Texture2D m_ObservationTexture; + OneHotToTextureUtil m_TextureUtil; + + /// + /// Create a sensor for the GridValueProvider with the specified observation type. + /// + /// + /// Use Match3Sensor.CellTypeSensor() or Match3Sensor.SpecialTypeSensor() instead of calling + /// the constructor directly. + /// + /// The abstract board. + /// The GridValueProvider, should be either board.GetCellType or board.GetSpecialType. + /// The number of possible values that the GridValueProvider can return. + /// Whether to produce vector or visual observations + /// Name of the sensor. + public Match3Sensor(AbstractBoard board, GridValueProvider gvp, int oneHotSize, Match3ObservationType obsType, string name) + { + var maxBoardSize = board.GetMaxBoardSize(); + m_Name = name; + m_MaxBoardSize = maxBoardSize; + m_GridValues = gvp; + m_OneHotSize = oneHotSize; + m_Board = board; + + m_ObservationType = obsType; + m_ObservationSpec = obsType == Match3ObservationType.Vector + ? ObservationSpec.Vector(maxBoardSize.Rows * maxBoardSize.Columns * oneHotSize) + : ObservationSpec.Visual(maxBoardSize.Rows, maxBoardSize.Columns, oneHotSize); + } + + /// + /// Create a sensor that encodes the board cells as observations. + /// + /// The abstract board. + /// Whether to produce vector or visual observations + /// Name of the sensor. + /// + public static Match3Sensor CellTypeSensor(AbstractBoard board, Match3ObservationType obsType, string name) + { + var maxBoardSize = board.GetMaxBoardSize(); + return new Match3Sensor(board, board.GetCellType, maxBoardSize.NumCellTypes, obsType, name); + } + + /// + /// Create a sensor that encodes the cell special types as observations. Returns null if the board's + /// NumSpecialTypes is 0 (indicating the sensor isn't needed). + /// + /// The abstract board. + /// Whether to produce vector or visual observations + /// Name of the sensor. + /// + public static Match3Sensor SpecialTypeSensor(AbstractBoard board, Match3ObservationType obsType, string name) + { + var maxBoardSize = board.GetMaxBoardSize(); + if (maxBoardSize.NumSpecialTypes == 0) + { + return null; + } + var specialSize = maxBoardSize.NumSpecialTypes + 1; + return new Match3Sensor(board, board.GetSpecialType, specialSize, obsType, name); + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public int Write(ObservationWriter writer) + { + m_Board.CheckBoardSizes(m_MaxBoardSize); + var currentBoardSize = m_Board.GetCurrentBoardSize(); + + int offset = 0; + var isVisual = m_ObservationType != Match3ObservationType.Vector; + + // This is equivalent to + // for (var r = 0; r < m_MaxBoardSize.Rows; r++) + // for (var c = 0; c < m_MaxBoardSize.Columns; c++) + // if (r < currentBoardSize.Rows && c < currentBoardSize.Columns) + // WriteOneHot + // else + // WriteZero + // but rearranged to avoid the branching. + + for (var r = 0; r < currentBoardSize.Rows; r++) + { + for (var c = 0; c < currentBoardSize.Columns; c++) + { + var val = m_GridValues(r, c); + writer.WriteOneHot(offset, r, c, val, m_OneHotSize, isVisual); + offset += m_OneHotSize; + } + + for (var c = currentBoardSize.Columns; c < m_MaxBoardSize.Columns; c++) + { + writer.WriteZero(offset, r, c, m_OneHotSize, isVisual); + offset += m_OneHotSize; + } + } + + for (var r = currentBoardSize.Rows; r < m_MaxBoardSize.Columns; r++) + { + for (var c = 0; c < m_MaxBoardSize.Columns; c++) + { + writer.WriteZero(offset, r, c, m_OneHotSize, isVisual); + offset += m_OneHotSize; + } + } + + return offset; + } + + /// + public byte[] GetCompressedObservation() + { + m_Board.CheckBoardSizes(m_MaxBoardSize); + var height = m_MaxBoardSize.Rows; + var width = m_MaxBoardSize.Columns; + if (ReferenceEquals(null, m_ObservationTexture)) + { + m_ObservationTexture = new Texture2D(width, height, TextureFormat.RGB24, false); + } + + if (ReferenceEquals(null, m_TextureUtil)) + { + m_TextureUtil = new OneHotToTextureUtil(height, width); + } + var bytesOut = new List(); + var currentBoardSize = m_Board.GetCurrentBoardSize(); + + // Encode the cell types or special types as batches of PNGs + // This is potentially wasteful, e.g. if there are 4 cell types and 1 special type, we could + // fit in in 2 images, but we'll use 3 total (2 PNGs for the 4 cell type channels, and 1 for + // the special types). + var numCellImages = (m_OneHotSize + 2) / 3; + for (var i = 0; i < numCellImages; i++) + { + m_TextureUtil.EncodeToTexture( + m_GridValues, + m_ObservationTexture, + 3 * i, + currentBoardSize.Rows, + currentBoardSize.Columns + ); + bytesOut.AddRange(m_ObservationTexture.EncodeToPNG()); + } + + return bytesOut.ToArray(); + } + + /// + public void Update() + { + } + + /// + public void Reset() + { + } + + internal SensorCompressionType GetCompressionType() + { + return m_ObservationType == Match3ObservationType.CompressedVisual ? + SensorCompressionType.PNG : + SensorCompressionType.None; + } + + /// + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(GetCompressionType()); + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.Match3Sensor; + } + + /// + /// Clean up the owned Texture2D. + /// + public void Dispose() + { + if (!ReferenceEquals(null, m_ObservationTexture)) + { + Utilities.DestroyTexture(m_ObservationTexture); + m_ObservationTexture = null; + } + } + } + + /// + /// Utility class for converting a 2D array of ints representing a one-hot encoding into + /// a texture, suitable for conversion to PNGs for observations. + /// Works by encoding 3 values at a time as pixels in the texture, thus it should be + /// called (maxValue + 2) / 3 times, increasing the channelOffset by 3 each time. + /// + internal class OneHotToTextureUtil + { + Color[] m_Colors; + int m_MaxHeight; + int m_MaxWidth; + private static Color[] s_OneHotColors = { Color.red, Color.green, Color.blue }; + + public OneHotToTextureUtil(int maxHeight, int maxWidth) + { + m_Colors = new Color[maxHeight * maxWidth]; + m_MaxHeight = maxHeight; + m_MaxWidth = maxWidth; + } + + public void EncodeToTexture( + GridValueProvider gridValueProvider, + Texture2D texture, + int channelOffset, + int currentHeight, + int currentWidth + ) + { + var i = 0; + // There's an implicit flip converting to PNG from texture, so make sure we + // counteract that when forming the texture by iterating through h in reverse. + for (var h = m_MaxHeight - 1; h >= 0; h--) + { + for (var w = 0; w < m_MaxWidth; w++) + { + var colorVal = Color.black; + if (h < currentHeight && w < currentWidth) + { + int oneHotValue = gridValueProvider(h, w); + if (oneHotValue >= channelOffset && oneHotValue < channelOffset + 3) + { + colorVal = s_OneHotColors[oneHotValue - channelOffset]; + } + } + m_Colors[i++] = colorVal; + } + } + texture.SetPixels(m_Colors); + } + } + + /// + /// Utility methods for writing one-hot observations. + /// + internal static class ObservationWriterMatch3Extensions + { + public static void WriteOneHot(this ObservationWriter writer, int offset, int row, int col, int value, int oneHotSize, bool isVisual) + { + if (isVisual) + { + for (var i = 0; i < oneHotSize; i++) + { + writer[row, col, i] = (i == value) ? 1.0f : 0.0f; + } + } + else + { + for (var i = 0; i < oneHotSize; i++) + { + writer[offset] = (i == value) ? 1.0f : 0.0f; + offset++; + } + } + } + + public static void WriteZero(this ObservationWriter writer, int offset, int row, int col, int oneHotSize, bool isVisual) + { + if (isVisual) + { + for (var i = 0; i < oneHotSize; i++) + { + writer[row, col, i] = 0.0f; + } + } + else + { + for (var i = 0; i < oneHotSize; i++) + { + writer[offset] = 0.0f; + offset++; + } + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Sensor.cs.meta b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Sensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b440cac0fc7bd9e81f502d6a3becc8bdcde5db20 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3Sensor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 795ad5f211e344e5bf3049abd9499721 +timeCreated: 1600906663 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3SensorComponent.cs b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3SensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..8afd4d0edcc83964ed7261eb5bee67b374e567d3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3SensorComponent.cs @@ -0,0 +1,77 @@ +using System; +using Unity.MLAgents.Sensors; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Integrations.Match3 +{ + /// + /// Sensor component for a Match3 game. + /// + [AddComponentMenu("ML Agents/Match 3 Sensor", (int)MenuGroup.Sensors)] + public class Match3SensorComponent : SensorComponent, IDisposable + { + [HideInInspector, SerializeField, FormerlySerializedAs("SensorName")] + string m_SensorName = "Match3 Sensor"; + + /// + /// Name of the generated Match3Sensor object. + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get => m_SensorName; + set => m_SensorName = value; + } + + [HideInInspector, SerializeField, FormerlySerializedAs("ObservationType")] + Match3ObservationType m_ObservationType = Match3ObservationType.Vector; + + /// + /// Type of observation to generate. + /// + public Match3ObservationType ObservationType + { + get => m_ObservationType; + set => m_ObservationType = value; + } + + private ISensor[] m_Sensors; + + /// + public override ISensor[] CreateSensors() + { + // Clean up any existing sensors + Dispose(); + + var board = GetComponent(); + if (!board) + { + return Array.Empty(); + } + var cellSensor = Match3Sensor.CellTypeSensor(board, m_ObservationType, m_SensorName + " (cells)"); + // This can be null if BoardSize.NumSpecialTypes is 0 + var specialSensor = Match3Sensor.SpecialTypeSensor(board, m_ObservationType, m_SensorName + " (special)"); + m_Sensors = specialSensor != null + ? new ISensor[] { cellSensor, specialSensor } + : new ISensor[] { cellSensor }; + return m_Sensors; + } + + /// + /// Clean up the sensors created by CreateSensors(). + /// + public void Dispose() + { + if (m_Sensors != null) + { + for (var i = 0; i < m_Sensors.Length; i++) + { + ((Match3Sensor)m_Sensors[i]).Dispose(); + } + + m_Sensors = null; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Match3SensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3SensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d2d2713eefad4b5dbe30173a33186389cafd45c4 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Match3SensorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 530d2f105aa145bd8a00e021bdd925fd +timeCreated: 1600906676 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Move.cs b/com.unity.ml-agents/Runtime/Integrations/Match3/Move.cs new file mode 100644 index 0000000000000000000000000000000000000000..d4aac5f854cc99815e71e722d8a23d89a8268254 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Move.cs @@ -0,0 +1,277 @@ +using System; +using UnityEngine; + +namespace Unity.MLAgents.Integrations.Match3 +{ + /// + /// Directions for a Move. + /// + public enum Direction + { + /// + /// Move up (increasing row direction). + /// + Up, + + /// + /// Move down (decreasing row direction). + /// + Down, // -row direction + + /// + /// Move left (decreasing column direction). + /// + Left, // -column direction + + /// + /// Move right (increasing column direction). + /// + Right, // +column direction + } + + /// + /// Struct that encapsulates a swap of adjacent cells. + /// A Move can be constructed from either a starting row, column, and direction, + /// or from a "move index" between 0 and NumPotentialMoves()-1. + /// Moves are enumerated as the internal edges of the game grid. + /// Left/right moves come first. There are (maxCols - 1) * maxRows of these. + /// Up/down moves are next. There are (maxRows - 1) * maxCols of these. + /// + public struct Move + { + /// + /// Index of the move, from 0 to NumPotentialMoves-1. + /// + public int MoveIndex; + + /// + /// Row of the cell that will be moved. + /// + public int Row; + + /// + /// Column of the cell that will be moved. + /// + public int Column; + + /// + /// Direction that the cell will be moved. + /// + public Direction Direction; + + /// + /// Construct a Move from its move index and the board size. + /// This is useful for iterating through all the Moves on a board, or constructing + /// the Move corresponding to an Agent decision. + /// + /// Must be between 0 and NumPotentialMoves(maxRows, maxCols). + /// + /// + /// + public static Move FromMoveIndex(int moveIndex, BoardSize maxBoardSize) + { + var maxRows = maxBoardSize.Rows; + var maxCols = maxBoardSize.Columns; + + if (moveIndex < 0 || moveIndex >= NumPotentialMoves(maxBoardSize)) + { + throw new ArgumentOutOfRangeException("moveIndex"); + } + Direction dir; + int row, col; + if (moveIndex < (maxCols - 1) * maxRows) + { + dir = Direction.Right; + col = moveIndex % (maxCols - 1); + row = moveIndex / (maxCols - 1); + } + else + { + dir = Direction.Up; + var offset = moveIndex - (maxCols - 1) * maxRows; + col = offset % maxCols; + row = offset / maxCols; + } + return new Move + { + MoveIndex = moveIndex, + Direction = dir, + Row = row, + Column = col + }; + } + + /// + /// Increment the Move to the next MoveIndex, and update the Row, Column, and Direction accordingly. + /// + /// + public void Next(BoardSize maxBoardSize) + { + var maxRows = maxBoardSize.Rows; + var maxCols = maxBoardSize.Columns; + + var switchoverIndex = (maxCols - 1) * maxRows; + + MoveIndex++; + if (MoveIndex < switchoverIndex) + { + Column++; + if (Column == maxCols - 1) + { + Row++; + Column = 0; + } + } + else if (MoveIndex == switchoverIndex) + { + // switch from moving right to moving up + Row = 0; + Column = 0; + Direction = Direction.Up; + } + else + { + Column++; + if (Column == maxCols) + { + Row++; + Column = 0; + } + } + } + + /// + /// Construct a Move from the row, column, direction, and board size. + /// + /// + /// + /// + /// + /// + public static Move FromPositionAndDirection(int row, int col, Direction dir, BoardSize maxBoardSize) + { + // Check for out-of-bounds + if (row < 0 || row >= maxBoardSize.Rows) + { + throw new IndexOutOfRangeException($"row was {row}, but must be between 0 and {maxBoardSize.Rows - 1}."); + } + + if (col < 0 || col >= maxBoardSize.Columns) + { + throw new IndexOutOfRangeException($"col was {col}, but must be between 0 and {maxBoardSize.Columns - 1}."); + } + + // Check moves that would go out of bounds e.g. col == 0 and dir == Left + if ( + row == 0 && dir == Direction.Down || + row == maxBoardSize.Rows - 1 && dir == Direction.Up || + col == 0 && dir == Direction.Left || + col == maxBoardSize.Columns - 1 && dir == Direction.Right + ) + { + throw new IndexOutOfRangeException($"Cannot move cell at row={row} col={col} in Direction={dir}"); + } + + // Normalize - only consider Right and Up + if (dir == Direction.Left) + { + dir = Direction.Right; + col = col - 1; + } + else if (dir == Direction.Down) + { + dir = Direction.Up; + row = row - 1; + } + + int moveIndex; + if (dir == Direction.Right) + { + moveIndex = col + row * (maxBoardSize.Columns - 1); + } + else + { + var offset = (maxBoardSize.Columns - 1) * maxBoardSize.Rows; + moveIndex = offset + col + row * maxBoardSize.Columns; + } + + return new Move + { + Row = row, + Column = col, + Direction = dir, + MoveIndex = moveIndex, + }; + } + + /// + /// Check if the move is valid for the given board size. + /// This will be passed the return value from AbstractBoard.GetCurrentBoardSize(). + /// + /// + /// + public bool InRangeForBoard(BoardSize boardSize) + { + var (otherRow, otherCol) = OtherCell(); + // Get the maximum row and column this move would affect. + var maxMoveRow = Mathf.Max(Row, otherRow); + var maxMoveCol = Mathf.Max(Column, otherCol); + return maxMoveRow < boardSize.Rows && maxMoveCol < boardSize.Columns; + } + + /// + /// Get the other row and column that correspond to this move. + /// + /// + /// + public (int Row, int Column) OtherCell() + { + switch (Direction) + { + case Direction.Up: + return (Row + 1, Column); + case Direction.Down: + return (Row - 1, Column); + case Direction.Left: + return (Row, Column - 1); + case Direction.Right: + return (Row, Column + 1); + default: + throw new ArgumentOutOfRangeException(); + } + } + + /// + /// Get the opposite direction of this move. + /// + /// + /// + public Direction OtherDirection() + { + switch (Direction) + { + case Direction.Up: + return Direction.Down; + case Direction.Down: + return Direction.Up; + case Direction.Left: + return Direction.Right; + case Direction.Right: + return Direction.Left; + default: + throw new ArgumentOutOfRangeException(); + } + } + + /// + /// Return the number of potential moves for a board of the given size. + /// This is equivalent to the number of internal edges in the board. + /// + /// + /// + public static int NumPotentialMoves(BoardSize maxBoardSize) + { + return maxBoardSize.Rows * (maxBoardSize.Columns - 1) + (maxBoardSize.Rows - 1) * (maxBoardSize.Columns); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Integrations/Match3/Move.cs.meta b/com.unity.ml-agents/Runtime/Integrations/Match3/Move.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1457c24b13647dcb16a00be1cfc10caf769df8ce --- /dev/null +++ b/com.unity.ml-agents/Runtime/Integrations/Match3/Move.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 41d6d7b9e07c4ef1ae075c74a906906b +timeCreated: 1600466100 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/MLAgentsSettings.cs b/com.unity.ml-agents/Runtime/MLAgentsSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..a86cb3635cbed03413de73a835d23b972eeac8d9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/MLAgentsSettings.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using System.Runtime.CompilerServices; + + +[assembly: InternalsVisibleTo("Unity.ML-Agents.DevTests.Editor")] +namespace Unity.MLAgents +{ + internal class MLAgentsSettings : ScriptableObject + { + [SerializeField] + private bool m_ConnectTrainer = true; + [SerializeField] + private int m_EditorPort = 5004; + + public bool ConnectTrainer + { + get { return m_ConnectTrainer; } + set + { + m_ConnectTrainer = value; + OnChange(); + } + } + + public int EditorPort + { + get { return m_EditorPort; } + set + { + m_EditorPort = value; + OnChange(); + } + } + + internal void OnChange() + { + if (MLAgentsSettingsManager.Settings == this) + MLAgentsSettingsManager.ApplySettings(); + } + } +} diff --git a/com.unity.ml-agents/Runtime/MLAgentsSettings.cs.meta b/com.unity.ml-agents/Runtime/MLAgentsSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..90c1507a50764545784db79c7b58d5d331430af0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/MLAgentsSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71515ce028aaa4b4cb6bee13e96ef6f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/MLAgentsSettingsManager.cs b/com.unity.ml-agents/Runtime/MLAgentsSettingsManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..86abeed74a0217d34c2023f344fc5b87491cb2ed --- /dev/null +++ b/com.unity.ml-agents/Runtime/MLAgentsSettingsManager.cs @@ -0,0 +1,94 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#else +using System.Linq; +#endif + +namespace Unity.MLAgents +{ +#if UNITY_EDITOR + [InitializeOnLoad] +#endif + internal static class MLAgentsSettingsManager + { + internal static event Action OnSettingsChange; + internal const string EditorBuildSettingsConfigKey = "com.unity.ml-agents.settings"; + private static MLAgentsSettings s_Settings; + + + // setter will trigger callback for refreshing editor UI if using editor + public static MLAgentsSettings Settings + { + get + { + if (s_Settings == null) + { + Initialize(); + } + return s_Settings; + } + set + { + Debug.Assert(value != null); +#if UNITY_EDITOR + if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(value))) + { + EditorBuildSettings.AddConfigObject(EditorBuildSettingsConfigKey, value, true); + } +#endif + s_Settings = value; + ApplySettings(); + } + } + + static MLAgentsSettingsManager() + { + Initialize(); + } + + static void Initialize() + { +#if UNITY_EDITOR + InitializeInEditor(); +#else + InitializeInPlayer(); +#endif + } + +#if UNITY_EDITOR + internal static void InitializeInEditor() + { + var settings = ScriptableObject.CreateInstance(); + if (EditorBuildSettings.TryGetConfigObject(EditorBuildSettingsConfigKey, + out MLAgentsSettings settingsAsset)) + { + if (settingsAsset != null) + { + settings = settingsAsset; + } + } + Settings = settings; + } + +#else + internal static void InitializeInPlayer() + { + Settings = Resources.FindObjectsOfTypeAll().FirstOrDefault() ?? ScriptableObject.CreateInstance(); + } + +#endif + + internal static void ApplySettings() + { + OnSettingsChange?.Invoke(); + } + + internal static void Destroy() + { + s_Settings = null; + OnSettingsChange = null; + } + } +} diff --git a/com.unity.ml-agents/Runtime/MLAgentsSettingsManager.cs.meta b/com.unity.ml-agents/Runtime/MLAgentsSettingsManager.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9a6f0c3a12fa659618406d8081a8d9ed317dd3d2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/MLAgentsSettingsManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be40451993af54e3c84c7113140fdf2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/MultiAgentGroupIdCounter.cs b/com.unity.ml-agents/Runtime/MultiAgentGroupIdCounter.cs new file mode 100644 index 0000000000000000000000000000000000000000..47aa61299e040f2c4e606ce859abdce920f78f94 --- /dev/null +++ b/com.unity.ml-agents/Runtime/MultiAgentGroupIdCounter.cs @@ -0,0 +1,13 @@ +using System.Threading; + +namespace Unity.MLAgents +{ + internal static class MultiAgentGroupIdCounter + { + static int s_Counter; + public static int GetGroupId() + { + return Interlocked.Increment(ref s_Counter); + } + } +} diff --git a/com.unity.ml-agents/Runtime/MultiAgentGroupIdCounter.cs.meta b/com.unity.ml-agents/Runtime/MultiAgentGroupIdCounter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b4298cdc957d4448065604bbedc2330033b5b560 --- /dev/null +++ b/com.unity.ml-agents/Runtime/MultiAgentGroupIdCounter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5661ffdb6c7704e84bc785572dcd5bd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Policies.meta b/com.unity.ml-agents/Runtime/Policies.meta new file mode 100644 index 0000000000000000000000000000000000000000..6353357f7bce8fbda1e88e420d6f26835ba0d27d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c3d1b36de8f74c9e8ab29c8f23f58ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs b/com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs new file mode 100644 index 0000000000000000000000000000000000000000..96a15b50d85876d7779933725f0b9e6130236441 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs @@ -0,0 +1,144 @@ +using Unity.Barracuda; +using System.Collections.Generic; +using System.Diagnostics; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Policies +{ + /// + /// Where to perform inference. + /// + public enum InferenceDevice + { + /// + /// Default inference. This is currently the same as Burst, but may change in the future. + /// + Default = 0, + + /// + /// GPU inference. Corresponds to WorkerFactory.Type.ComputePrecompiled in Barracuda. + /// + GPU = 1, + + /// + /// CPU inference using Burst. Corresponds to WorkerFactory.Type.CSharpBurst in Barracuda. + /// + Burst = 2, + + /// + /// CPU inference. Corresponds to in WorkerFactory.Type.CSharp Barracuda. + /// Burst is recommended instead; this is kept for legacy compatibility. + /// + CPU = 3, + } + + /// + /// The Barracuda Policy uses a Barracuda Model to make decisions at + /// every step. It uses a ModelRunner that is shared across all + /// Barracuda Policies that use the same model and inference devices. + /// + internal class BarracudaPolicy : IPolicy + { + protected ModelRunner m_ModelRunner; + ActionBuffers m_LastActionBuffer; + + int m_AgentId; + /// + /// Inference only: set to true if the action selection from model should be + /// deterministic. + /// + bool m_DeterministicInference; + + /// + /// Sensor shapes for the associated Agents. All Agents must have the same shapes for their Sensors. + /// + List m_SensorShapes; + ActionSpec m_ActionSpec; + + private string m_BehaviorName; + + /// + /// List of actuators, only used for analytics + /// + private IList m_Actuators; + + /// + /// Whether or not we've tried to send analytics for this model. We only ever try to send once per policy, + /// and do additional deduplication in the analytics code. + /// + private bool m_AnalyticsSent; + + /// + /// Instantiate a BarracudaPolicy with the necessary objects for it to run. + /// + /// The action spec of the behavior. + /// The actuators used for this behavior. + /// The Neural Network to use. + /// Which device Barracuda will run on. + /// The name of the behavior. + /// Inference only: set to true if the action selection from model should be + /// deterministic. + public BarracudaPolicy( + ActionSpec actionSpec, + IList actuators, + NNModel model, + InferenceDevice inferenceDevice, + string behaviorName, + bool deterministicInference = false + ) + { + var modelRunner = Academy.Instance.GetOrCreateModelRunner(model, actionSpec, inferenceDevice, deterministicInference); + m_ModelRunner = modelRunner; + m_BehaviorName = behaviorName; + m_ActionSpec = actionSpec; + m_Actuators = actuators; + m_DeterministicInference = deterministicInference; + } + + /// + public void RequestDecision(AgentInfo info, List sensors) + { + SendAnalytics(sensors); + m_AgentId = info.episodeId; + m_ModelRunner?.PutObservations(info, sensors); + } + + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + void SendAnalytics(IList sensors) + { + if (!m_AnalyticsSent) + { + m_AnalyticsSent = true; + Analytics.InferenceAnalytics.InferenceModelSet( + m_ModelRunner.Model, + m_BehaviorName, + m_ModelRunner.InferenceDevice, + sensors, + m_ActionSpec, + m_Actuators + ); + } + } + + /// + public ref readonly ActionBuffers DecideAction() + { + if (m_ModelRunner == null) + { + m_LastActionBuffer = ActionBuffers.Empty; + } + else + { + m_ModelRunner?.DecideBatch(); + m_LastActionBuffer = m_ModelRunner.GetAction(m_AgentId); + } + return ref m_LastActionBuffer; + } + + public void Dispose() + { + } + } +} diff --git a/com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs.meta b/com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..014a05302df5ba5118dd65ff307fe2d3a891c4a3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8eb047b11855142d2be2cc458bef3264 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs b/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..b0d369b910a082e0cdba7b3088ea5d53b08820cc --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs @@ -0,0 +1,294 @@ +using Unity.Barracuda; +using System; +using UnityEngine; +using UnityEngine.Serialization; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors.Reflection; + +namespace Unity.MLAgents.Policies +{ + /// + /// Defines what type of behavior the Agent will be using + /// + [Serializable] + public enum BehaviorType + { + /// + /// The Agent will use the remote process for decision making. + /// if unavailable, will use inference and if no model is provided, will use + /// the heuristic. + /// + Default, + + /// + /// The Agent will always use its heuristic + /// + HeuristicOnly, + + /// + /// The Agent will always use inference with the provided + /// neural network model. + /// + InferenceOnly + } + + /// + /// Options for controlling how the Agent class is searched for s. + /// + public enum ObservableAttributeOptions + { + /// + /// All ObservableAttributes on the Agent will be ignored. This is the + /// default behavior. If there are no ObservableAttributes on the + /// Agent, this will result in the fastest initialization time. + /// + Ignore, + + /// + /// Only members on the declared class will be examined; members that are + /// inherited are ignored. This is a reasonable tradeoff between + /// performance and flexibility. + /// + /// This corresponds to setting the + /// [BindingFlags.DeclaredOnly](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.bindingflags?view=netcore-3.1) + /// when examining the fields and properties of the Agent class instance. + /// + ExcludeInherited, + + /// + /// All members on the class will be examined. This can lead to slower + /// startup times. + /// + ExamineAll + } + + /// + /// A component for setting an instance's behavior and + /// brain properties. + /// + /// At runtime, this component generates the agent's policy objects + /// according to the settings you specified in the Editor. + [AddComponentMenu("ML Agents/Behavior Parameters", (int)MenuGroup.Default)] + public class BehaviorParameters : MonoBehaviour + { + [HideInInspector, SerializeField] + BrainParameters m_BrainParameters = new BrainParameters(); + + /// + /// Delegate for receiving events about Policy Updates. + /// + /// Whether or not the current policy is running in heuristic mode. + public delegate void PolicyUpdated(bool isInHeuristicMode); + + /// + /// Event that fires when an Agent's policy is updated. + /// + internal event PolicyUpdated OnPolicyUpdated; + + /// + /// The associated for this behavior. + /// + public BrainParameters BrainParameters + { + get { return m_BrainParameters; } + internal set { m_BrainParameters = value; } + } + + [HideInInspector, SerializeField] + NNModel m_Model; + + /// + /// The neural network model used when in inference mode. + /// This should not be set at runtime; use + /// to set it instead. + /// + public NNModel Model + { + get { return m_Model; } + set { m_Model = value; UpdateAgentPolicy(); } + } + + [HideInInspector, SerializeField] + InferenceDevice m_InferenceDevice = InferenceDevice.Default; + + /// + /// How inference is performed for this Agent's model. + /// This should not be set at runtime; use + /// to set it instead. + /// + public InferenceDevice InferenceDevice + { + get { return m_InferenceDevice; } + set { m_InferenceDevice = value; UpdateAgentPolicy(); } + } + + [HideInInspector, SerializeField] + BehaviorType m_BehaviorType; + + /// + /// The BehaviorType for the Agent. + /// + public BehaviorType BehaviorType + { + get { return m_BehaviorType; } + set { m_BehaviorType = value; UpdateAgentPolicy(); } + } + + [HideInInspector, SerializeField] + string m_BehaviorName = "My Behavior"; + + /// + /// The name of this behavior, which is used as a base name. See + /// for the full name. + /// This should not be set at runtime; use + /// to set it instead. + /// + public string BehaviorName + { + get { return m_BehaviorName; } + set { m_BehaviorName = value; UpdateAgentPolicy(); } + } + + /// + /// The team ID for this behavior. + /// + [HideInInspector, SerializeField, FormerlySerializedAs("m_TeamID")] + public int TeamId; + // TODO properties here instead of Agent + + [FormerlySerializedAs("m_useChildSensors")] + [HideInInspector] + [SerializeField] + [Tooltip("Use all Sensor components attached to child GameObjects of this Agent.")] + bool m_UseChildSensors = true; + + [HideInInspector] + [SerializeField] + [Tooltip("Use all Actuator components attached to child GameObjects of this Agent.")] + bool m_UseChildActuators = true; + + /// + /// Whether or not to use all the sensor components attached to child GameObjects of the agent. + /// Note that changing this after the Agent has been initialized will not have any effect. + /// + public bool UseChildSensors + { + get { return m_UseChildSensors; } + set { m_UseChildSensors = value; } + } + + [HideInInspector] + [SerializeField] + [Tooltip("Set action selection to deterministic, Only applies to inference from within unity.")] + private bool m_DeterministicInference = false; + + /// + /// Whether to select actions deterministically during inference from the provided neural network. + /// + public bool DeterministicInference + { + get { return m_DeterministicInference; } + set { m_DeterministicInference = value; } + } + + /// + /// Whether or not to use all the actuator components attached to child GameObjects of the agent. + /// Note that changing this after the Agent has been initialized will not have any effect. + /// + public bool UseChildActuators + { + get { return m_UseChildActuators; } + set { m_UseChildActuators = value; } + } + + [HideInInspector, SerializeField] + ObservableAttributeOptions m_ObservableAttributeHandling = ObservableAttributeOptions.Ignore; + + /// + /// Determines how the Agent class is searched for s. + /// + public ObservableAttributeOptions ObservableAttributeHandling + { + get { return m_ObservableAttributeHandling; } + set { m_ObservableAttributeHandling = value; } + } + + /// + /// Returns the behavior name, concatenated with any other metadata (i.e. team id). + /// + public string FullyQualifiedBehaviorName + { + get { return m_BehaviorName + "?team=" + TeamId; } + } + + void Awake() + { + OnPolicyUpdated += mode => { }; + } + + internal IPolicy GeneratePolicy(ActionSpec actionSpec, ActuatorManager actuatorManager) + { + switch (m_BehaviorType) + { + case BehaviorType.HeuristicOnly: + return new HeuristicPolicy(actuatorManager, actionSpec); + case BehaviorType.InferenceOnly: + { + if (m_Model == null) + { + var behaviorType = BehaviorType.InferenceOnly.ToString(); + throw new UnityAgentsException( + $"Can't use Behavior Type {behaviorType} without a model. " + + "Either assign a model, or change to a different Behavior Type." + ); + } + return new BarracudaPolicy(actionSpec, actuatorManager, m_Model, m_InferenceDevice, m_BehaviorName, m_DeterministicInference); + } + case BehaviorType.Default: + if (Academy.Instance.IsCommunicatorOn) + { + return new RemotePolicy(actionSpec, actuatorManager, FullyQualifiedBehaviorName); + } + if (m_Model != null) + { + return new BarracudaPolicy(actionSpec, actuatorManager, m_Model, m_InferenceDevice, m_BehaviorName, m_DeterministicInference); + } + else + { + return new HeuristicPolicy(actuatorManager, actionSpec); + } + default: + return new HeuristicPolicy(actuatorManager, actionSpec); + } + } + + /// + /// Query the behavior parameters in order to see if the Agent is running in Heuristic Mode. + /// + /// true if the Agent is running in Heuristic mode. + public bool IsInHeuristicMode() + { + if (BehaviorType == BehaviorType.HeuristicOnly) + { + return true; + } + + return BehaviorType == BehaviorType.Default && + ReferenceEquals(Model, null) && + (!Academy.IsInitialized || + Academy.IsInitialized && + !Academy.Instance.IsCommunicatorOn); + } + + internal void UpdateAgentPolicy() + { + var agent = GetComponent(); + if (agent == null) + { + return; + } + agent.ReloadPolicy(); + OnPolicyUpdated?.Invoke(IsInHeuristicMode()); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs.meta b/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..507c417e97363973a49783181ec92a2a9de28f41 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d1c4e0b1822b495aa52bc52839ecb30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs b/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..882521a892d0c63a24517e59209a32ea9bc0568d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs @@ -0,0 +1,192 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; +using Unity.MLAgents.Actuators; + +namespace Unity.MLAgents.Policies +{ + /// + /// This is deprecated. Agents can now use both continuous and discrete actions together. + /// + [Obsolete("Continuous and discrete actions on the same Agent are now supported; see ActionSpec.")] + internal enum SpaceType + { + /// + /// Discrete action space: a fixed number of options are available. + /// + Discrete, + + /// + /// Continuous action space: each action can take on a float value. + /// + Continuous + } + + /// + /// Holds information about the brain. It defines what are the inputs and outputs of the + /// decision process. + /// + /// + /// Set brain parameters for an instance using the + /// component attached to the agent's [GameObject]. + /// + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + /// + [Serializable] + public class BrainParameters : ISerializationCallbackReceiver + { + /// + /// The number of the observations that are added in + /// + /// + /// + /// The length of the vector containing observation values. + /// + [FormerlySerializedAs("vectorObservationSize")] + public int VectorObservationSize = 1; + + /// + /// Stacking refers to concatenating the observations across multiple frames. This field + /// indicates the number of frames to concatenate across. + /// + [FormerlySerializedAs("numStackedVectorObservations")] + [Range(1, 50)] public int NumStackedVectorObservations = 1; + + [SerializeField] + internal ActionSpec m_ActionSpec = new ActionSpec(0, null); + + /// + /// The specification of the Actions for the BrainParameters. + /// + public ActionSpec ActionSpec + { + get { return m_ActionSpec; } + set + { + m_ActionSpec.NumContinuousActions = value.NumContinuousActions; + m_ActionSpec.BranchSizes = value.BranchSizes; + SyncDeprecatedActionFields(); + } + } + + /// + /// (Deprecated) The number of possible actions. + /// + /// The size specified is interpreted differently depending on whether + /// the agent uses the continuous or the discrete actions. + /// + /// For the continuous actions: the length of the float vector that represents + /// the action. + /// For the discrete actions: the number of branches. + /// + [Obsolete("VectorActionSize has been deprecated, please use ActionSpec instead.")] + [SerializeField] + [FormerlySerializedAs("vectorActionSize")] + internal int[] VectorActionSize = new[] { 1 }; + + /// + /// The list of strings describing what the actions correspond to. + /// + [FormerlySerializedAs("vectorActionDescriptions")] + public string[] VectorActionDescriptions; + + /// + /// (Deprecated) Defines if the action is discrete or continuous. + /// + [Obsolete("VectorActionSpaceType has been deprecated, please use ActionSpec instead.")] + [SerializeField] + [FormerlySerializedAs("vectorActionSpaceType")] + internal SpaceType VectorActionSpaceType = SpaceType.Discrete; + + [SerializeField] + [HideInInspector] + internal bool hasUpgradedBrainParametersWithActionSpec; + + /// + /// Deep clones the BrainParameter object. + /// + /// A new BrainParameter object with the same values as the original. + public BrainParameters Clone() + { + // Disable deprecation warnings so we can read/write the old fields. +#pragma warning disable CS0618 + return new BrainParameters + { + VectorObservationSize = VectorObservationSize, + NumStackedVectorObservations = NumStackedVectorObservations, + VectorActionDescriptions = (string[])VectorActionDescriptions.Clone(), + ActionSpec = new ActionSpec(ActionSpec.NumContinuousActions, ActionSpec.BranchSizes), + VectorActionSize = (int[])VectorActionSize.Clone(), + VectorActionSpaceType = VectorActionSpaceType, + }; +#pragma warning restore CS0618 + } + + /// + /// Propagate ActionSpec fields from deprecated fields + /// + private void UpdateToActionSpec() + { + // Disable deprecation warnings so we can read the old fields. +#pragma warning disable CS0618 + if (!hasUpgradedBrainParametersWithActionSpec + && m_ActionSpec.NumContinuousActions == 0 + && m_ActionSpec.NumDiscreteActions == 0) + { + if (VectorActionSpaceType == SpaceType.Continuous) + { + m_ActionSpec.NumContinuousActions = VectorActionSize[0]; + } + if (VectorActionSpaceType == SpaceType.Discrete) + { + m_ActionSpec.BranchSizes = (int[])VectorActionSize.Clone(); + } + } + hasUpgradedBrainParametersWithActionSpec = true; +#pragma warning restore CS0618 + } + + /// + /// Sync values in ActionSpec fields to deprecated fields + /// + private void SyncDeprecatedActionFields() + { + // Disable deprecation warnings so we can read the old fields. +#pragma warning disable CS0618 + + if (m_ActionSpec.NumContinuousActions == 0) + { + VectorActionSize = (int[])ActionSpec.BranchSizes.Clone(); + VectorActionSpaceType = SpaceType.Discrete; + } + else if (m_ActionSpec.NumDiscreteActions == 0) + { + VectorActionSize = new[] { m_ActionSpec.NumContinuousActions }; + VectorActionSpaceType = SpaceType.Continuous; + } + else + { + VectorActionSize = null; + } +#pragma warning restore CS0618 + } + + /// + /// Called by Unity immediately before serializing this object. + /// + public void OnBeforeSerialize() + { + UpdateToActionSpec(); + SyncDeprecatedActionFields(); + } + + /// + /// Called by Unity immediately after deserializing this object. + /// + public void OnAfterDeserialize() + { + UpdateToActionSpec(); + SyncDeprecatedActionFields(); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs.meta b/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f6305491734d44d0ebdb5915e518edcfff9f99b6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6108a41e9be04c238d7babaed4476134 +timeCreated: 1538758934 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Policies/HeuristicPolicy.cs b/com.unity.ml-agents/Runtime/Policies/HeuristicPolicy.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e5333874a68c4646c7875fd6d7efe891da7994a --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/HeuristicPolicy.cs @@ -0,0 +1,142 @@ +using System.Collections.Generic; +using System; +using System.Collections; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Policies +{ + /// + /// The Heuristic Policy uses a hard-coded Heuristic method + /// to take decisions each time the RequestDecision method is + /// called. + /// + internal class HeuristicPolicy : IPolicy + { + ActuatorManager m_ActuatorManager; + ActionBuffers m_ActionBuffers; + bool m_Done; + bool m_DecisionRequested; + + ObservationWriter m_ObservationWriter = new ObservationWriter(); + NullList m_NullList = new NullList(); + + + public HeuristicPolicy(ActuatorManager actuatorManager, ActionSpec actionSpec) + { + m_ActuatorManager = actuatorManager; + var numContinuousActions = actionSpec.NumContinuousActions; + var numDiscreteActions = actionSpec.NumDiscreteActions; + var continuousDecision = new ActionSegment(new float[numContinuousActions], 0, numContinuousActions); + var discreteDecision = new ActionSegment(new int[numDiscreteActions], 0, numDiscreteActions); + m_ActionBuffers = new ActionBuffers(continuousDecision, discreteDecision); + } + + /// + public void RequestDecision(AgentInfo info, List sensors) + { + StepSensors(sensors); + m_Done = info.done; + m_DecisionRequested = true; + } + + /// + public ref readonly ActionBuffers DecideAction() + { + if (!m_Done && m_DecisionRequested) + { + m_ActionBuffers.Clear(); + m_ActuatorManager.ApplyHeuristic(m_ActionBuffers); + } + m_DecisionRequested = false; + return ref m_ActionBuffers; + } + + public void Dispose() + { + } + + /// + /// Trivial implementation of the IList interface that does nothing. + /// This is only used for "writing" observations that we will discard. + /// + internal class NullList : IList + { + public IEnumerator GetEnumerator() + { + throw new NotImplementedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Add(float item) + { + } + + public void Clear() + { + } + + public bool Contains(float item) + { + return false; + } + + public void CopyTo(float[] array, int arrayIndex) + { + throw new NotImplementedException(); + } + + public bool Remove(float item) + { + return false; + } + + public int Count { get; } + public bool IsReadOnly { get; } + public int IndexOf(float item) + { + return -1; + } + + public void Insert(int index, float item) + { + } + + public void RemoveAt(int index) + { + } + + public float this[int index] + { + get { return 0.0f; } + set { } + } + } + + /// + /// Run ISensor.Write or ISensor.GetCompressedObservation for each sensor + /// The output is currently unused, but this makes the sensor usage consistent + /// between training and inference. + /// + /// + void StepSensors(List sensors) + { + foreach (var sensor in sensors) + { + if (sensor.GetCompressionSpec().SensorCompressionType == SensorCompressionType.None) + { + m_ObservationWriter.SetTarget(m_NullList, sensor.GetObservationSpec(), 0); + sensor.Write(m_ObservationWriter); + } + else + { + sensor.GetCompressedObservation(); + } + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Policies/HeuristicPolicy.cs.meta b/com.unity.ml-agents/Runtime/Policies/HeuristicPolicy.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ae074f5727d993fb7ee184a4a5d8b9e1ea0b6b6d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/HeuristicPolicy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a55e3cea7fd643109e42f5f4c9a1425 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Policies/IPolicy.cs b/com.unity.ml-agents/Runtime/Policies/IPolicy.cs new file mode 100644 index 0000000000000000000000000000000000000000..4079a1f25ae418ee6b08e7801c2009c2161c58ee --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/IPolicy.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Policies +{ + /// + /// IPolicy is connected to a single Agent. Each time the agent needs + /// a decision, it will request a decision to the Policy. The decision + /// will not be taken immediately but will be taken before or when + /// DecideAction is called. + /// + internal interface IPolicy : IDisposable + { + /// + /// Signals the Brain that the Agent needs a Decision. The Policy + /// will make the decision at a later time to allow possible + /// batching of requests. + /// + /// + /// + void RequestDecision(AgentInfo info, List sensors); + + /// + /// Signals the Policy that if the Decision has not been taken yet, + /// it must be taken now. The Brain is expected to update the actions + /// of the Agents at this point the latest. + /// + ref readonly ActionBuffers DecideAction(); + } +} diff --git a/com.unity.ml-agents/Runtime/Policies/IPolicy.cs.meta b/com.unity.ml-agents/Runtime/Policies/IPolicy.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f43c4ddc8bb13b945853588983c2a5810ca875a2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/IPolicy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56e263dd566be41d6b81d0b46895a0dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs b/com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs new file mode 100644 index 0000000000000000000000000000000000000000..faa8a37e60ae843fe0b41ebf467ad0b655ec6340 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using System.Diagnostics; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Analytics; + + +namespace Unity.MLAgents.Policies +{ + /// + /// The Remote Policy only works when training. + /// When training your Agents, the RemotePolicy will be controlled by Python. + /// + internal class RemotePolicy : IPolicy + { + int m_AgentId; + string m_FullyQualifiedBehaviorName; + ActionSpec m_ActionSpec; + ActionBuffers m_LastActionBuffer; + bool m_AnalyticsSent; + + internal ICommunicator m_Communicator; + + /// + /// List of actuators, only used for analytics + /// + private IList m_Actuators; + + public RemotePolicy( + ActionSpec actionSpec, + IList actuators, + string fullyQualifiedBehaviorName) + { + m_FullyQualifiedBehaviorName = fullyQualifiedBehaviorName; + m_Communicator = Academy.Instance.Communicator; + m_Communicator?.SubscribeBrain(m_FullyQualifiedBehaviorName, actionSpec); + m_ActionSpec = actionSpec; + m_Actuators = actuators; + } + + /// + public void RequestDecision(AgentInfo info, List sensors) + { + SendAnalytics(sensors); + m_AgentId = info.episodeId; + m_Communicator?.PutObservations(m_FullyQualifiedBehaviorName, info, sensors); + } + + [Conditional("MLA_UNITY_ANALYTICS_MODULE")] + void SendAnalytics(IList sensors) + { + if (!m_AnalyticsSent) + { + m_AnalyticsSent = true; + TrainingAnalytics.RemotePolicyInitialized( + m_FullyQualifiedBehaviorName, + sensors, + m_ActionSpec, + m_Actuators + ); + } + } + + /// + public ref readonly ActionBuffers DecideAction() + { + m_Communicator?.DecideBatch(); + var actions = m_Communicator?.GetActions(m_FullyQualifiedBehaviorName, m_AgentId); + m_LastActionBuffer = actions == null ? ActionBuffers.Empty : (ActionBuffers)actions; + return ref m_LastActionBuffer; + } + + public void Dispose() + { + } + } +} diff --git a/com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs.meta b/com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..08996fa8a24457935858ab3b1a7b5aae474a4bd0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f1ffc0e0bec14a1eaca4c709b3ba230 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/RecursionChecker.cs b/com.unity.ml-agents/Runtime/RecursionChecker.cs new file mode 100644 index 0000000000000000000000000000000000000000..ac411fa837149370201dede2a9362da7b191a0d2 --- /dev/null +++ b/com.unity.ml-agents/Runtime/RecursionChecker.cs @@ -0,0 +1,35 @@ +using System; + +namespace Unity.MLAgents +{ + internal class RecursionChecker : IDisposable + { + private bool m_IsRunning; + private string m_MethodName; + + public RecursionChecker(string methodName) + { + m_MethodName = methodName; + } + + public IDisposable Start() + { + if (m_IsRunning) + { + throw new UnityAgentsException( + $"{m_MethodName} called recursively. " + + "This might happen if you call EnvironmentStep() or EndEpisode() from custom " + + "code such as CollectObservations() or OnActionReceived()." + ); + } + m_IsRunning = true; + return this; + } + + public void Dispose() + { + // Reset the flag when we're done (or if an exception occurred). + m_IsRunning = false; + } + } +} diff --git a/com.unity.ml-agents/Runtime/RecursionChecker.cs.meta b/com.unity.ml-agents/Runtime/RecursionChecker.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4b2363f80906b8ccf68a5dfcd06d80e7f43d2ce7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/RecursionChecker.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 49ebd06532b24078a6edda823aeff5d2 +timeCreated: 1602731302 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sampler.cs b/com.unity.ml-agents/Runtime/Sampler.cs new file mode 100644 index 0000000000000000000000000000000000000000..15a83937d1a1b78ffb6b41402b094185d7e5a7ff --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sampler.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using Unity.MLAgents.Inference.Utils; +using Random = System.Random; + +namespace Unity.MLAgents +{ + /// + /// Takes a list of floats that encode a sampling distribution and returns the sampling function. + /// + internal static class SamplerFactory + { + public static Func CreateUniformSampler(float min, float max, int seed) + { + Random distr = new Random(seed); + return () => min + (float)distr.NextDouble() * (max - min); + } + + public static Func CreateGaussianSampler(float mean, float stddev, int seed) + { + RandomNormal distr = new RandomNormal(seed, mean, stddev); + return () => (float)distr.NextDouble(); + } + + public static Func CreateMultiRangeUniformSampler(IList intervals, int seed) + { + //RNG + Random distr = new Random(seed); + // Will be used to normalize intervalFuncs + float sumIntervalSizes = 0; + //The number of intervals + int numIntervals = (intervals.Count / 2); + // List that will store interval lengths + float[] intervalSizes = new float[numIntervals]; + // List that will store uniform distributions + IList> intervalFuncs = new Func[numIntervals]; + // Collect all intervals and store as uniform distrus + // Collect all interval sizes + for (int i = 0; i < numIntervals; i++) + { + var min = intervals[2 * i]; + var max = intervals[2 * i + 1]; + var intervalSize = max - min; + sumIntervalSizes += intervalSize; + intervalSizes[i] = intervalSize; + intervalFuncs[i] = () => min + (float)distr.NextDouble() * intervalSize; + } + // Normalize interval lengths + for (int i = 0; i < numIntervals; i++) + { + intervalSizes[i] = intervalSizes[i] / sumIntervalSizes; + } + // Build cmf for intervals + for (int i = 1; i < numIntervals; i++) + { + intervalSizes[i] += intervalSizes[i - 1]; + } + Multinomial intervalDistr = new Multinomial(seed + 1); + float MultiRange() + { + int sampledInterval = intervalDistr.Sample(intervalSizes); + return intervalFuncs[sampledInterval].Invoke(); + } + + return MultiRange; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sampler.cs.meta b/com.unity.ml-agents/Runtime/Sampler.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..950e28c5b679a43193a313640b699ff9a46e446f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sampler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39ce0ea5a8b2e47f696f6efc807029f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SensorHelper.cs b/com.unity.ml-agents/Runtime/SensorHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..45cf0fe9353d5feee6b1da797f741f09fbd618e5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SensorHelper.cs @@ -0,0 +1,129 @@ +using Unity.Barracuda; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Utility methods related to implementations. + /// + public static class SensorHelper + { + /// + /// Generates the observations for the provided sensor, and returns true if they equal the + /// expected values. If they are unequal, errorMessage is also set. + /// This should not generally be used in production code. It is only intended for + /// simplifying unit tests. + /// + /// + /// + /// + /// + public static bool CompareObservation(ISensor sensor, float[] expected, out string errorMessage) + { + var numExpected = expected.Length; + const float fill = -1337f; + var output = new float[numExpected]; + for (var i = 0; i < numExpected; i++) + { + output[i] = fill; + } + + if (numExpected > 0) + { + if (fill != output[0]) + { + errorMessage = "Error setting output buffer."; + return false; + } + } + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(output, sensor.GetObservationSpec(), 0); + + // Make sure ObservationWriter didn't touch anything + if (numExpected > 0) + { + if (fill != output[0]) + { + errorMessage = "ObservationWriter.SetTarget modified a buffer it shouldn't have."; + return false; + } + } + + sensor.Write(writer); + for (var i = 0; i < output.Length; i++) + { + if (expected[i] != output[i]) + { + errorMessage = $"Expected and actual differed in position {i}. Expected: {expected[i]} Actual: {output[i]} "; + return false; + } + } + + errorMessage = null; + return true; + } + + /// + /// Generates the observations for the provided sensor, and returns true if they equal the + /// expected values. If they are unequal, errorMessage is also set. + /// This should not generally be used in production code. It is only intended for + /// simplifying unit tests. + /// + /// + /// + /// + /// + public static bool CompareObservation(ISensor sensor, float[,,] expected, out string errorMessage) + { + var tensorShape = new TensorShape(0, expected.GetLength(0), expected.GetLength(1), expected.GetLength(2)); + var numExpected = tensorShape.height * tensorShape.width * tensorShape.channels; + const float fill = -1337f; + var output = new float[numExpected]; + for (var i = 0; i < numExpected; i++) + { + output[i] = fill; + } + + if (numExpected > 0) + { + if (fill != output[0]) + { + errorMessage = "Error setting output buffer."; + return false; + } + } + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(output, sensor.GetObservationSpec(), 0); + + // Make sure ObservationWriter didn't touch anything + if (numExpected > 0) + { + if (fill != output[0]) + { + errorMessage = "ObservationWriter.SetTarget modified a buffer it shouldn't have."; + return false; + } + } + + sensor.Write(writer); + for (var h = 0; h < tensorShape.height; h++) + { + for (var w = 0; w < tensorShape.width; w++) + { + for (var c = 0; c < tensorShape.channels; c++) + { + if (expected[h, w, c] != output[tensorShape.Index(0, h, w, c)]) + { + errorMessage = $"Expected and actual differed in position [{h}, {w}, {c}]. " + + $"Expected: {expected[h, w, c]} Actual: {output[tensorShape.Index(0, h, w, c)]} "; + return false; + } + } + } + } + errorMessage = null; + return true; + } + } +} diff --git a/com.unity.ml-agents/Runtime/SensorHelper.cs.meta b/com.unity.ml-agents/Runtime/SensorHelper.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c331abd0b6a4be0050e5fe40f8cdc0b18f43b578 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SensorHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c1189c0af42c46f7b533350d49ad3e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors.meta b/com.unity.ml-agents/Runtime/Sensors.meta new file mode 100644 index 0000000000000000000000000000000000000000..06dbaab14820fb87e11ebda54b8d459604b4d8c9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c79ae05164e94259bd28ad71dbd3afa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/BoxOverlapChecker.cs b/com.unity.ml-agents/Runtime/Sensors/BoxOverlapChecker.cs new file mode 100644 index 0000000000000000000000000000000000000000..5ec58b13589f14a5c3e50247d7bfc2932b48438c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/BoxOverlapChecker.cs @@ -0,0 +1,264 @@ +using System; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// The grid perception strategy that uses box overlap to detect objects. + /// + internal class BoxOverlapChecker : IGridPerception + { + Vector3 m_CellScale; + Vector3Int m_GridSize; + bool m_RotateWithAgent; + LayerMask m_ColliderMask; + GameObject m_CenterObject; + GameObject m_AgentGameObject; + string[] m_DetectableTags; + int m_InitialColliderBufferSize; + int m_MaxColliderBufferSize; + + int m_NumCells; + Vector3 m_HalfCellScale; + Vector3 m_CellCenterOffset; + Vector3[] m_CellLocalPositions; + +#if MLA_UNITY_PHYSICS_MODULE + Collider[] m_ColliderBuffer; + + public event Action GridOverlapDetectedAll; + public event Action GridOverlapDetectedClosest; + public event Action GridOverlapDetectedDebug; +#endif + + public BoxOverlapChecker( + Vector3 cellScale, + Vector3Int gridSize, + bool rotateWithAgent, + LayerMask colliderMask, + GameObject centerObject, + GameObject agentGameObject, + string[] detectableTags, + int initialColliderBufferSize, + int maxColliderBufferSize) + { + m_CellScale = cellScale; + m_GridSize = gridSize; + m_RotateWithAgent = rotateWithAgent; + m_ColliderMask = colliderMask; + m_CenterObject = centerObject; + m_AgentGameObject = agentGameObject; + m_DetectableTags = detectableTags; + m_InitialColliderBufferSize = initialColliderBufferSize; + m_MaxColliderBufferSize = maxColliderBufferSize; + + m_NumCells = gridSize.x * gridSize.z; + m_HalfCellScale = new Vector3(cellScale.x / 2f, cellScale.y, cellScale.z / 2f); + m_CellCenterOffset = new Vector3((gridSize.x - 1f) / 2, 0, (gridSize.z - 1f) / 2); +#if MLA_UNITY_PHYSICS_MODULE + m_ColliderBuffer = new Collider[Math.Min(m_MaxColliderBufferSize, m_InitialColliderBufferSize)]; +#endif + + InitCellLocalPositions(); + } + + public bool RotateWithAgent + { + get { return m_RotateWithAgent; } + set { m_RotateWithAgent = value; } + } + + public LayerMask ColliderMask + { + get { return m_ColliderMask; } + set { m_ColliderMask = value; } + } + + /// + /// Initializes the local location of the cells + /// + void InitCellLocalPositions() + { + m_CellLocalPositions = new Vector3[m_NumCells]; + + for (int i = 0; i < m_NumCells; i++) + { + m_CellLocalPositions[i] = GetCellLocalPosition(i); + } + } + + public Vector3 GetCellLocalPosition(int cellIndex) + { + float x = (cellIndex / m_GridSize.z - m_CellCenterOffset.x) * m_CellScale.x; + float z = (cellIndex % m_GridSize.z - m_CellCenterOffset.z) * m_CellScale.z; + return new Vector3(x, 0, z); + } + + public Vector3 GetCellGlobalPosition(int cellIndex) + { + if (m_RotateWithAgent) + { + return m_CenterObject.transform.TransformPoint(m_CellLocalPositions[cellIndex]); + } + else + { + return m_CellLocalPositions[cellIndex] + m_CenterObject.transform.position; + } + } + + public Quaternion GetGridRotation() + { + return m_RotateWithAgent ? m_CenterObject.transform.rotation : Quaternion.identity; + } + + public void Perceive() + { +#if MLA_UNITY_PHYSICS_MODULE + for (var cellIndex = 0; cellIndex < m_NumCells; cellIndex++) + { + var cellCenter = GetCellGlobalPosition(cellIndex); + var numFound = BufferResizingOverlapBoxNonAlloc(cellCenter, m_HalfCellScale, GetGridRotation()); + + if (GridOverlapDetectedAll != null) + { + ParseCollidersAll(m_ColliderBuffer, numFound, cellIndex, cellCenter, GridOverlapDetectedAll); + } + if (GridOverlapDetectedClosest != null) + { + ParseCollidersClosest(m_ColliderBuffer, numFound, cellIndex, cellCenter, GridOverlapDetectedClosest); + } + } +#endif + } + + public void UpdateGizmo() + { +#if MLA_UNITY_PHYSICS_MODULE + for (var cellIndex = 0; cellIndex < m_NumCells; cellIndex++) + { + var cellCenter = GetCellGlobalPosition(cellIndex); + var numFound = BufferResizingOverlapBoxNonAlloc(cellCenter, m_HalfCellScale, GetGridRotation()); + + ParseCollidersClosest(m_ColliderBuffer, numFound, cellIndex, cellCenter, GridOverlapDetectedDebug); + } +#endif + } + +#if MLA_UNITY_PHYSICS_MODULE + /// + /// This method attempts to perform the Physics.OverlapBoxNonAlloc and will double the size of the Collider buffer + /// if the number of Colliders in the buffer after the call is equal to the length of the buffer. + /// + /// + /// + /// + /// + int BufferResizingOverlapBoxNonAlloc(Vector3 cellCenter, Vector3 halfCellScale, Quaternion rotation) + { + int numFound; + // Since we can only get a fixed number of results, requery + // until we're sure we can hold them all (or until we hit the max size). + while (true) + { + numFound = Physics.OverlapBoxNonAlloc(cellCenter, halfCellScale, m_ColliderBuffer, rotation, m_ColliderMask); + if (numFound == m_ColliderBuffer.Length && m_ColliderBuffer.Length < m_MaxColliderBufferSize) + { + m_ColliderBuffer = new Collider[Math.Min(m_MaxColliderBufferSize, m_ColliderBuffer.Length * 2)]; + m_InitialColliderBufferSize = m_ColliderBuffer.Length; + } + else + { + break; + } + } + return numFound; + } + + /// + /// Parses the array of colliders found within a cell. Finds the closest gameobject to the agent root reference within the cell + /// + void ParseCollidersClosest(Collider[] foundColliders, int numFound, int cellIndex, Vector3 cellCenter, Action detectedAction) + { + GameObject closestColliderGo = null; + var minDistanceSquared = float.MaxValue; + + for (var i = 0; i < numFound; i++) + { + var currentColliderGo = foundColliders[i].gameObject; + + // Continue if the current collider go is the root reference + if (ReferenceEquals(currentColliderGo, m_AgentGameObject)) + { + continue; + } + + var closestColliderPoint = foundColliders[i].ClosestPointOnBounds(cellCenter); + var currentDistanceSquared = (closestColliderPoint - m_CenterObject.transform.position).sqrMagnitude; + + if (currentDistanceSquared >= minDistanceSquared) + { + continue; + } + + // Checks if our colliders contain a detectable object + var index = -1; + for (var ii = 0; ii < m_DetectableTags.Length; ii++) + { + if (currentColliderGo.CompareTag(m_DetectableTags[ii])) + { + index = ii; + break; + } + } + if (index > -1 && currentDistanceSquared < minDistanceSquared) + { + minDistanceSquared = currentDistanceSquared; + closestColliderGo = currentColliderGo; + } + } + + if (!ReferenceEquals(closestColliderGo, null)) + { + detectedAction.Invoke(closestColliderGo, cellIndex); + } + } + + /// + /// Parses all colliders in the array of colliders found within a cell. + /// + void ParseCollidersAll(Collider[] foundColliders, int numFound, int cellIndex, Vector3 cellCenter, Action detectedAction) + { + for (int i = 0; i < numFound; i++) + { + var currentColliderGo = foundColliders[i].gameObject; + if (!ReferenceEquals(currentColliderGo, m_AgentGameObject)) + { + detectedAction.Invoke(currentColliderGo, cellIndex); + } + } + } + +#endif + + public void RegisterSensor(GridSensorBase sensor) + { +#if MLA_UNITY_PHYSICS_MODULE + if (sensor.GetProcessCollidersMethod() == ProcessCollidersMethod.ProcessAllColliders) + { + GridOverlapDetectedAll += sensor.ProcessDetectedObject; + } + else + { + GridOverlapDetectedClosest += sensor.ProcessDetectedObject; + } +#endif + } + + public void RegisterDebugSensor(GridSensorBase debugSensor) + { +#if MLA_UNITY_PHYSICS_MODULE + GridOverlapDetectedDebug += debugSensor.ProcessDetectedObject; +#endif + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/BoxOverlapChecker.cs.meta b/com.unity.ml-agents/Runtime/Sensors/BoxOverlapChecker.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1d20815c0ec63004e0972c2906c030cee0287a32 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/BoxOverlapChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e039296229a084578823e21bce9cf834 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/BufferSensor.cs b/com.unity.ml-agents/Runtime/Sensors/BufferSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..09db85d22405ee69a0d9b393ddb88a0daf82bbf8 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/BufferSensor.cs @@ -0,0 +1,114 @@ +using System; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A Sensor that allows to observe a variable number of entities. + /// + public class BufferSensor : ISensor, IBuiltInSensor + { + private string m_Name; + private int m_MaxNumObs; + private int m_ObsSize; + float[] m_ObservationBuffer; + int m_CurrentNumObservables; + ObservationSpec m_ObservationSpec; + + + /// + /// Creates the BufferSensor. + /// + /// The maximum number of observations to be appended to this BufferSensor. + /// The size of each observation appended to the BufferSensor. + /// The name of the sensor. + public BufferSensor(int maxNumberObs, int obsSize, string name) + { + m_Name = name; + m_MaxNumObs = maxNumberObs; + m_ObsSize = obsSize; + m_ObservationBuffer = new float[m_ObsSize * m_MaxNumObs]; + m_CurrentNumObservables = 0; + m_ObservationSpec = ObservationSpec.VariableLength(m_MaxNumObs, m_ObsSize); + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + /// Appends an observation to the buffer. If the buffer is full (maximum number + /// of observation is reached) the observation will be ignored. the length of + /// the provided observation array must be equal to the observation size of + /// the buffer sensor. + /// + /// The float array observation + public void AppendObservation(float[] obs) + { + if (obs.Length != m_ObsSize) + { + throw new UnityAgentsException( + "The BufferSensor was expecting an observation of size " + + $"{m_ObsSize} but received {obs.Length} observations instead." + ); + } + if (m_CurrentNumObservables >= m_MaxNumObs) + { + return; + } + for (int i = 0; i < obs.Length; i++) + { + m_ObservationBuffer[m_CurrentNumObservables * m_ObsSize + i] = obs[i]; + } + m_CurrentNumObservables++; + } + + /// + public int Write(ObservationWriter writer) + { + for (int i = 0; i < m_ObsSize * m_MaxNumObs; i++) + { + writer[i] = m_ObservationBuffer[i]; + } + return m_ObsSize * m_MaxNumObs; + } + + /// + public virtual byte[] GetCompressedObservation() + { + return null; + } + + /// + public void Update() + { + Reset(); + } + + /// + public void Reset() + { + m_CurrentNumObservables = 0; + Array.Clear(m_ObservationBuffer, 0, m_ObservationBuffer.Length); + } + + /// + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.BufferSensor; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/BufferSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/BufferSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..327456d2ee4613204f2328959a30aa3ab8f12066 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/BufferSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 034f05c858e684e5498d9a548c9d1fc5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/BufferSensorComponent.cs b/com.unity.ml-agents/Runtime/Sensors/BufferSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..8be049e8a2dc1ad918b65f8f79cdc8211af7691f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/BufferSensorComponent.cs @@ -0,0 +1,68 @@ +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A SensorComponent that creates a . + /// + [AddComponentMenu("ML Agents/Buffer Sensor", (int)MenuGroup.Sensors)] + public class BufferSensorComponent : SensorComponent + { + /// + /// Name of the generated object. + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + [HideInInspector, SerializeField] + private string m_SensorName = "BufferSensor"; + + /// + /// This is how many floats each entities will be represented with. This number + /// is fixed and all entities must have the same representation. + /// + public int ObservableSize + { + get { return m_ObservableSize; } + set { m_ObservableSize = value; } + } + [HideInInspector, SerializeField] + private int m_ObservableSize; + + /// + /// This is the maximum number of entities the `BufferSensor` will be able to + /// collect. + /// + public int MaxNumObservables + { + get { return m_MaxNumObservables; } + set { m_MaxNumObservables = value; } + } + [HideInInspector, SerializeField] + private int m_MaxNumObservables; + + private BufferSensor m_Sensor; + + /// + public override ISensor[] CreateSensors() + { + m_Sensor = new BufferSensor(MaxNumObservables, ObservableSize, m_SensorName); + return new ISensor[] { m_Sensor }; + } + + /// + /// Appends an observation to the buffer. If the buffer is full (maximum number + /// of observation is reached) the observation will be ignored. the length of + /// the provided observation array must be equal to the observation size of + /// the buffer sensor. + /// + /// The float array observation + public void AppendObservation(float[] obs) + { + m_Sensor.AppendObservation(obs); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/BufferSensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Sensors/BufferSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..69bee5ca08963d2114010ba87de1b28487d0929d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/BufferSensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd8012d5925524537b27131fef517017 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/CameraSensor.cs b/com.unity.ml-agents/Runtime/Sensors/CameraSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..ddf3d0000be0c2326f53d603da2e9e1ab4e581dc --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/CameraSensor.cs @@ -0,0 +1,184 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A sensor that wraps a Camera object to generate visual observations for an agent. + /// + public class CameraSensor : ISensor, IBuiltInSensor, IDisposable + { + Camera m_Camera; + int m_Width; + int m_Height; + bool m_Grayscale; + string m_Name; + private ObservationSpec m_ObservationSpec; + SensorCompressionType m_CompressionType; + Texture2D m_Texture; + + /// + /// The Camera used for rendering the sensor observations. + /// + public Camera Camera + { + get { return m_Camera; } + set { m_Camera = value; } + } + + /// + /// The compression type used by the sensor. + /// + public SensorCompressionType CompressionType + { + get { return m_CompressionType; } + set { m_CompressionType = value; } + } + + /// + /// Creates and returns the camera sensor. + /// + /// Camera object to capture images from. + /// The width of the generated visual observation. + /// The height of the generated visual observation. + /// Whether to convert the generated image to grayscale or keep color. + /// The name of the camera sensor. + /// The compression to apply to the generated image. + /// The type of observation. + public CameraSensor( + Camera camera, int width, int height, bool grayscale, string name, SensorCompressionType compression, ObservationType observationType = ObservationType.Default) + { + m_Camera = camera; + m_Width = width; + m_Height = height; + m_Grayscale = grayscale; + m_Name = name; + var channels = grayscale ? 1 : 3; + m_ObservationSpec = ObservationSpec.Visual(height, width, channels, observationType); + m_CompressionType = compression; + m_Texture = new Texture2D(width, height, TextureFormat.RGB24, false); + } + + /// + /// Accessor for the name of the sensor. + /// + /// Sensor name. + public string GetName() + { + return m_Name; + } + + /// + /// Returns a description of the observations that will be generated by the sensor. + /// The shape will be h x w x 1 for grayscale and h x w x 3 for color. + /// The dimensions have translational equivariance along width and height, + /// and no property along the channels dimension. + /// + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + /// Generates a compressed image. This can be valuable in speeding-up training. + /// + /// Compressed image. + public byte[] GetCompressedObservation() + { + using (TimerStack.Instance.Scoped("CameraSensor.GetCompressedObservation")) + { + ObservationToTexture(m_Camera, m_Texture, m_Width, m_Height); + // TODO support more types here, e.g. JPG + var compressed = m_Texture.EncodeToPNG(); + return compressed; + } + } + + /// + /// Writes out the generated, uncompressed image to the provided . + /// + /// Where the observation is written to. + /// + public int Write(ObservationWriter writer) + { + using (TimerStack.Instance.Scoped("CameraSensor.WriteToTensor")) + { + ObservationToTexture(m_Camera, m_Texture, m_Width, m_Height); + var numWritten = writer.WriteTexture(m_Texture, m_Grayscale); + return numWritten; + } + } + + /// + public void Update() { } + + /// + public void Reset() { } + + /// + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(m_CompressionType); + } + + /// + /// Renders a Camera instance to a 2D texture at the corresponding resolution. + /// + /// Camera. + /// Texture2D to render to. + /// Width of resulting 2D texture. + /// Height of resulting 2D texture. + public static void ObservationToTexture(Camera obsCamera, Texture2D texture2D, int width, int height) + { + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) + { + Debug.LogError("GraphicsDeviceType is Null. This will likely crash when trying to render."); + } + + var oldRec = obsCamera.rect; + obsCamera.rect = new Rect(0f, 0f, 1f, 1f); + var depth = 24; + var format = RenderTextureFormat.Default; + var readWrite = RenderTextureReadWrite.Default; + + var tempRt = + RenderTexture.GetTemporary(width, height, depth, format, readWrite); + + var prevActiveRt = RenderTexture.active; + var prevCameraRt = obsCamera.targetTexture; + + // render to offscreen texture (readonly from CPU side) + RenderTexture.active = tempRt; + obsCamera.targetTexture = tempRt; + + obsCamera.Render(); + + texture2D.ReadPixels(new Rect(0, 0, texture2D.width, texture2D.height), 0, 0); + + obsCamera.targetTexture = prevCameraRt; + obsCamera.rect = oldRec; + RenderTexture.active = prevActiveRt; + RenderTexture.ReleaseTemporary(tempRt); + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.CameraSensor; + } + + /// + /// Clean up the owned Texture2D. + /// + public void Dispose() + { + if (!ReferenceEquals(null, m_Texture)) + { + Utilities.DestroyTexture(m_Texture); + m_Texture = null; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/CameraSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/CameraSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1a0314b8f776bfc2ec2ef60f4a0cf9cbb5ec419c --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/CameraSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41cb6bf4b09974bf583f5b2fef0c08a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/CameraSensorComponent.cs b/com.unity.ml-agents/Runtime/Sensors/CameraSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..f6b53f087eaa062308dea49c074893d53df32011 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/CameraSensorComponent.cs @@ -0,0 +1,179 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A SensorComponent that creates a . + /// + [AddComponentMenu("ML Agents/Camera Sensor", (int)MenuGroup.Sensors)] + public class CameraSensorComponent : SensorComponent, IDisposable + { + [HideInInspector, SerializeField, FormerlySerializedAs("camera")] + Camera m_Camera; + + CameraSensor m_Sensor; + + /// + /// Camera object that provides the data to the sensor. + /// + public Camera Camera + { + get { return m_Camera; } + set { m_Camera = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("sensorName")] + string m_SensorName = "CameraSensor"; + + /// + /// Name of the generated object. + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("width")] + int m_Width = 84; + + /// + /// Width of the generated observation. + /// Note that changing this after the sensor is created has no effect. + /// + public int Width + { + get { return m_Width; } + set { m_Width = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("height")] + int m_Height = 84; + + /// + /// Height of the generated observation. + /// Note that changing this after the sensor is created has no effect. + /// + public int Height + { + get { return m_Height; } + set { m_Height = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("grayscale")] + bool m_Grayscale; + + /// + /// Whether to generate grayscale images or color. + /// Note that changing this after the sensor is created has no effect. + /// + public bool Grayscale + { + get { return m_Grayscale; } + set { m_Grayscale = value; } + } + + [HideInInspector, SerializeField] + ObservationType m_ObservationType; + + /// + /// The type of the observation. + /// + public ObservationType ObservationType + { + get { return m_ObservationType; } + set { m_ObservationType = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField] + bool m_RuntimeCameraEnable; + + + /// + /// Controls the whether the camera sensor's attached camera + /// is enabled during runtime. Overrides the camera object enabled status. + /// Disabled for improved performance. Disabled by default. + /// + public bool RuntimeCameraEnable + { + get { return m_RuntimeCameraEnable; } + set { m_RuntimeCameraEnable = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField] + [Range(1, 50)] + [Tooltip("Number of camera frames that will be stacked before being fed to the neural network.")] + int m_ObservationStacks = 1; + + [HideInInspector, SerializeField, FormerlySerializedAs("compression")] + SensorCompressionType m_Compression = SensorCompressionType.PNG; + + /// + /// The compression type to use for the sensor. + /// + public SensorCompressionType CompressionType + { + get { return m_Compression; } + set { m_Compression = value; UpdateSensor(); } + } + + /// + /// Whether to stack previous observations. Using 1 means no previous observations. + /// Note that changing this after the sensor is created has no effect. + /// + public int ObservationStacks + { + get { return m_ObservationStacks; } + set { m_ObservationStacks = value; } + } + + void Start() + { + UpdateSensor(); + } + + /// + /// Creates the + /// + /// The created object for this component. + public override ISensor[] CreateSensors() + { + Dispose(); + m_Sensor = new CameraSensor(m_Camera, m_Width, m_Height, Grayscale, m_SensorName, m_Compression, m_ObservationType); + + if (ObservationStacks != 1) + { + return new ISensor[] { new StackingSensor(m_Sensor, ObservationStacks) }; + } + return new ISensor[] { m_Sensor }; + } + + /// + /// Update fields that are safe to change on the Sensor at runtime. + /// + internal void UpdateSensor() + { + if (m_Sensor != null) + { + m_Sensor.Camera = m_Camera; + m_Sensor.CompressionType = m_Compression; + m_Sensor.Camera.enabled = m_RuntimeCameraEnable; + } + } + + /// + /// Clean up the sensor created by CreateSensors(). + /// + public void Dispose() + { + if (!ReferenceEquals(m_Sensor, null)) + { + m_Sensor.Dispose(); + m_Sensor = null; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/CameraSensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Sensors/CameraSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..307dc6495244fec3cb7e340d0cad52ce036a411b --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/CameraSensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 282f342c2ab144bf38be65d4d0c4e07d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/CompressionSpec.cs b/com.unity.ml-agents/Runtime/Sensors/CompressionSpec.cs new file mode 100644 index 0000000000000000000000000000000000000000..76e283a14a94db777efcb574ea30b53912b21a00 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/CompressionSpec.cs @@ -0,0 +1,113 @@ +using System.Linq; +namespace Unity.MLAgents.Sensors +{ + /// + /// The compression setting for visual/camera observations. + /// + public enum SensorCompressionType + { + /// + /// No compression. Data is preserved as float arrays. + /// + None, + + /// + /// PNG format. Data will be stored in binary format. + /// + PNG + } + + /// + /// A description of the compression used for observations. + /// + /// + /// Most ISensor implementations can't take advantage of compression, + /// and should return CompressionSpec.Default() from their ISensor.GetCompressionSpec() methods. + /// Visual observations, or mulitdimensional categorical observations (for example, image segmentation + /// or the piece types in a match-3 game board) can use PNG compression reduce the amount of + /// data transferred between Unity and the trainer. + /// + public struct CompressionSpec + { + internal SensorCompressionType m_SensorCompressionType; + + /// + /// The compression type that the sensor will use for its observations. + /// + public SensorCompressionType SensorCompressionType + { + get => m_SensorCompressionType; + } + + internal int[] m_CompressedChannelMapping; + + /// + /// The mapping of the channels in compressed data to the actual channel after decompression. + /// + /// + /// The mapping is a list of integer index with the same length as + /// the number of output observation layers (channels), including padding if there's any. + /// Each index indicates the actual channel the layer will go into. + /// Layers with the same index will be averaged, and layers with negative index will be dropped. + /// For example, mapping for CameraSensor using grayscale and stacking of two: [0, 0, 0, 1, 1, 1] + /// Mapping for GridSensor of 4 channels and stacking of two: [0, 1, 2, 3, -1, -1, 4, 5, 6, 7, -1, -1] + /// + public int[] CompressedChannelMapping + { + get => m_CompressedChannelMapping; + } + + /// + /// Return a CompressionSpec indicating possible compression. + /// + /// The compression type to use. + /// Optional mapping mapping of the channels in compressed data to the + /// actual channel after decompression. + public CompressionSpec(SensorCompressionType sensorCompressionType, int[] compressedChannelMapping = null) + { + m_SensorCompressionType = sensorCompressionType; + m_CompressedChannelMapping = compressedChannelMapping; + } + + /// + /// Return a CompressionSpec indicating no compression. This is recommended for most sensors. + /// + /// + public static CompressionSpec Default() + { + return new CompressionSpec + { + m_SensorCompressionType = SensorCompressionType.None, + m_CompressedChannelMapping = null + }; + } + + /// + /// Return whether the compressed channel mapping is "trivial"; if so it doesn't need to be sent to the + /// trainer. + /// + /// + internal bool IsTrivialMapping() + { + var mapping = CompressedChannelMapping; + if (mapping == null) + { + return true; + } + // check if mapping equals zero mapping + if (mapping.Length == 3 && mapping.All(m => m == 0)) + { + return true; + } + // check if mapping equals identity mapping + for (var i = 0; i < mapping.Length; i++) + { + if (mapping[i] != i) + { + return false; + } + } + return true; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/CompressionSpec.cs.meta b/com.unity.ml-agents/Runtime/Sensors/CompressionSpec.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3bbac496d7e37c0973b07b2b880f8a645394a9d4 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/CompressionSpec.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0ddff1d1b7ad4170acb1a10272d4a8c2 +timeCreated: 1616006929 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/GridSensorBase.cs b/com.unity.ml-agents/Runtime/Sensors/GridSensorBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..a37861e2716a2acfe454f4c28dadb42550e5cbc8 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/GridSensorBase.cs @@ -0,0 +1,348 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Profiling; + +namespace Unity.MLAgents.Sensors +{ + /// + /// The way the GridSensor process detected colliders in a cell. + /// + public enum ProcessCollidersMethod + { + /// + /// Get data from all colliders detected in a cell + /// + ProcessAllColliders, + + /// + /// Get data from the collider closest to the agent + /// + ProcessClosestColliders + } + + /// + /// Grid-based sensor. + /// + public class GridSensorBase : ISensor, IBuiltInSensor, IDisposable + { + string m_Name; + Vector3 m_CellScale; + Vector3Int m_GridSize; + string[] m_DetectableTags; + SensorCompressionType m_CompressionType; + ObservationSpec m_ObservationSpec; + internal IGridPerception m_GridPerception; + + // Buffers + float[] m_PerceptionBuffer; + Color[] m_PerceptionColors; + Texture2D m_PerceptionTexture; + float[] m_CellDataBuffer; + + // Utility Constants Calculated on Init + int m_NumCells; + int m_CellObservationSize; + Vector3 m_CellCenterOffset; + + + /// + /// Create a GridSensorBase with the specified configuration. + /// + /// The sensor name + /// The scale of each cell in the grid + /// Number of cells on each side of the grid + /// Tags to be detected by the sensor + /// Compression type + public GridSensorBase( + string name, + Vector3 cellScale, + Vector3Int gridSize, + string[] detectableTags, + SensorCompressionType compression + ) + { + m_Name = name; + m_CellScale = cellScale; + m_GridSize = gridSize; + m_DetectableTags = detectableTags; + CompressionType = compression; + + if (m_GridSize.y != 1) + { + throw new UnityAgentsException("GridSensor only supports 2D grids."); + } + + m_NumCells = m_GridSize.x * m_GridSize.z; + m_CellObservationSize = GetCellObservationSize(); + m_ObservationSpec = ObservationSpec.Visual(m_GridSize.x, m_GridSize.z, m_CellObservationSize); + m_PerceptionTexture = new Texture2D(m_GridSize.x, m_GridSize.z, TextureFormat.RGB24, false); + + ResetPerceptionBuffer(); + } + + /// + /// The compression type used by the sensor. + /// + public SensorCompressionType CompressionType + { + get { return m_CompressionType; } + set + { + if (!IsDataNormalized() && value == SensorCompressionType.PNG) + { + Debug.LogWarning($"Compression type {value} is only supported with normalized data. " + + "The sensor will not compress the data."); + return; + } + m_CompressionType = value; + } + } + + internal float[] PerceptionBuffer + { + get { return m_PerceptionBuffer; } + } + + /// + /// The tags which the sensor dectects. + /// + protected string[] DetectableTags + { + get { return m_DetectableTags; } + } + + /// + public void Reset() { } + + /// + /// Clears the perception buffer before loading in new data. + /// + public void ResetPerceptionBuffer() + { + if (m_PerceptionBuffer != null) + { + Array.Clear(m_PerceptionBuffer, 0, m_PerceptionBuffer.Length); + Array.Clear(m_CellDataBuffer, 0, m_CellDataBuffer.Length); + } + else + { + m_PerceptionBuffer = new float[m_CellObservationSize * m_NumCells]; + m_CellDataBuffer = new float[m_CellObservationSize]; + m_PerceptionColors = new Color[m_NumCells]; + } + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(CompressionType); + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.GridSensor; + } + + /// + public byte[] GetCompressedObservation() + { + using (TimerStack.Instance.Scoped("GridSensor.GetCompressedObservation")) + { + var allBytes = new List(); + var numImages = (m_CellObservationSize + 2) / 3; + for (int i = 0; i < numImages; i++) + { + var channelIndex = 3 * i; + GridValuesToTexture(channelIndex, Math.Min(3, m_CellObservationSize - channelIndex)); + allBytes.AddRange(m_PerceptionTexture.EncodeToPNG()); + } + + return allBytes.ToArray(); + } + } + + /// + /// Convert observation values to texture for PNG compression. + /// + void GridValuesToTexture(int channelIndex, int numChannelsToAdd) + { + for (int i = 0; i < m_NumCells; i++) + { + for (int j = 0; j < numChannelsToAdd; j++) + { + m_PerceptionColors[i][j] = m_PerceptionBuffer[i * m_CellObservationSize + channelIndex + j]; + } + } + m_PerceptionTexture.SetPixels(m_PerceptionColors); + } + + /// + /// Get the observation values of the detected game object. + /// Default is to record the detected tag index. + /// + /// This method can be overridden to encode the observation differently or get custom data from the object. + /// When overriding this method, and + /// might also need to change accordingly. + /// + /// The game object that was detected within a certain cell + /// The index of the detectedObject's tag in the DetectableObjects list + /// The buffer to write the observation values. + /// The buffer size is configured by . + /// + /// + /// Here is an example of overriding GetObjectData to get the velocity of a potential Rigidbody: + /// + /// protected override void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer) + /// { + /// if (tagIndex == Array.IndexOf(DetectableTags, "RigidBodyObject")) + /// { + /// Rigidbody rigidbody = detectedObject.GetComponent<Rigidbody>(); + /// dataBuffer[0] = rigidbody.velocity.x; + /// dataBuffer[1] = rigidbody.velocity.y; + /// dataBuffer[2] = rigidbody.velocity.z; + /// } + /// } + /// + /// + protected virtual void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer) + { + dataBuffer[0] = tagIndex + 1; + } + + /// + /// Get the observation size for each cell. This will be the size of dataBuffer for . + /// If overriding , override this method as well to the custom observation size. + /// + /// The observation size of each cell. + protected virtual int GetCellObservationSize() + { + return 1; + } + + /// + /// Whether the data is normalized within [0, 1]. The sensor can only use PNG compression if the data is normailzed. + /// If overriding , override this method as well according to the custom observation values. + /// + /// Bool value indicating whether data is normalized. + protected virtual bool IsDataNormalized() + { + return false; + } + + /// + /// Whether to process all detected colliders in a cell. Default to false and only use the one closest to the agent. + /// If overriding , consider override this method when needed. + /// + /// Bool value indicating whether to process all detected colliders in a cell. + protected internal virtual ProcessCollidersMethod GetProcessCollidersMethod() + { + return ProcessCollidersMethod.ProcessClosestColliders; + } + + /// + /// If using PNG compression, check if the values are normalized. + /// + void ValidateValues(float[] dataValues, GameObject detectedObject) + { + if (m_CompressionType != SensorCompressionType.PNG) + { + return; + } + + for (int j = 0; j < dataValues.Length; j++) + { + if (dataValues[j] < 0 || dataValues[j] > 1) + throw new UnityAgentsException($"When using compression type {m_CompressionType} the data value has to be normalized between 0-1. " + + $"Received value[{dataValues[j]}] for {detectedObject.name}"); + } + } + + /// + /// Collect data from the detected object if a detectable tag is matched. + /// + internal void ProcessDetectedObject(GameObject detectedObject, int cellIndex) + { + Profiler.BeginSample("GridSensor.ProcessDetectedObject"); + for (var i = 0; i < m_DetectableTags.Length; i++) + { + if (!ReferenceEquals(detectedObject, null) && detectedObject.CompareTag(m_DetectableTags[i])) + { + if (GetProcessCollidersMethod() == ProcessCollidersMethod.ProcessAllColliders) + { + Array.Copy(m_PerceptionBuffer, cellIndex * m_CellObservationSize, m_CellDataBuffer, 0, m_CellObservationSize); + } + else + { + Array.Clear(m_CellDataBuffer, 0, m_CellDataBuffer.Length); + } + + GetObjectData(detectedObject, i, m_CellDataBuffer); + ValidateValues(m_CellDataBuffer, detectedObject); + Array.Copy(m_CellDataBuffer, 0, m_PerceptionBuffer, cellIndex * m_CellObservationSize, m_CellObservationSize); + break; + } + } + Profiler.EndSample(); + } + + /// + public void Update() + { + ResetPerceptionBuffer(); + using (TimerStack.Instance.Scoped("GridSensor.Update")) + { + if (m_GridPerception != null) + { + m_GridPerception.Perceive(); + } + } + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public int Write(ObservationWriter writer) + { + using (TimerStack.Instance.Scoped("GridSensor.Write")) + { + int index = 0; + for (var h = m_GridSize.z - 1; h >= 0; h--) + { + for (var w = 0; w < m_GridSize.x; w++) + { + for (var d = 0; d < m_CellObservationSize; d++) + { + writer[h, w, d] = m_PerceptionBuffer[index]; + index++; + } + } + } + return index; + } + } + + /// + /// Clean up the internal objects. + /// + public void Dispose() + { + if (!ReferenceEquals(null, m_PerceptionTexture)) + { + Utilities.DestroyTexture(m_PerceptionTexture); + m_PerceptionTexture = null; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/GridSensorBase.cs.meta b/com.unity.ml-agents/Runtime/Sensors/GridSensorBase.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..623d17202d5056f3cbaa7e2f59c020a0199c85d9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/GridSensorBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2454efb6b02aa414dae2cb8573e87682 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/GridSensorComponent.cs b/com.unity.ml-agents/Runtime/Sensors/GridSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..004a04f39637dc6490f2215e2c5c0722496caf24 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/GridSensorComponent.cs @@ -0,0 +1,310 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A SensorComponent that creates a . + /// + [AddComponentMenu("ML Agents/Grid Sensor", (int)MenuGroup.Sensors)] + public class GridSensorComponent : SensorComponent + { + // dummy sensor only used for debug gizmo + GridSensorBase m_DebugSensor; + List m_Sensors; + internal IGridPerception m_GridPerception; + + [HideInInspector, SerializeField] + protected internal string m_SensorName = "GridSensor"; + /// + /// Name of the generated object. + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + + [HideInInspector, SerializeField] + internal Vector3 m_CellScale = new Vector3(1f, 0.01f, 1f); + + /// + /// The scale of each grid cell. + /// Note that changing this after the sensor is created has no effect. + /// + public Vector3 CellScale + { + get { return m_CellScale; } + set { m_CellScale = value; } + } + + [HideInInspector, SerializeField] + internal Vector3Int m_GridSize = new Vector3Int(16, 1, 16); + /// + /// The number of grid on each side. + /// Note that changing this after the sensor is created has no effect. + /// + public Vector3Int GridSize + { + get { return m_GridSize; } + set + { + if (value.y != 1) + { + m_GridSize = new Vector3Int(value.x, 1, value.z); + } + else + { + m_GridSize = value; + } + } + } + + [HideInInspector, SerializeField] + internal bool m_RotateWithAgent = true; + /// + /// Rotate the grid based on the direction the agent is facing. + /// + public bool RotateWithAgent + { + get { return m_RotateWithAgent; } + set { m_RotateWithAgent = value; } + } + + [HideInInspector, SerializeField] + internal GameObject m_AgentGameObject; + /// + /// The reference of the root of the agent. This is used to disambiguate objects with + /// the same tag as the agent. Defaults to current GameObject. + /// + public GameObject AgentGameObject + { + get { return (m_AgentGameObject == null ? gameObject : m_AgentGameObject); } + set { m_AgentGameObject = value; } + } + + [HideInInspector, SerializeField] + internal string[] m_DetectableTags; + /// + /// List of tags that are detected. + /// Note that changing this after the sensor is created has no effect. + /// + public string[] DetectableTags + { + get { return m_DetectableTags; } + set { m_DetectableTags = value; } + } + + [HideInInspector, SerializeField] + internal LayerMask m_ColliderMask; + /// + /// The layer mask. + /// + public LayerMask ColliderMask + { + get { return m_ColliderMask; } + set { m_ColliderMask = value; } + } + + [HideInInspector, SerializeField] + internal int m_MaxColliderBufferSize = 500; + /// + /// The absolute max size of the Collider buffer used in the non-allocating Physics calls. In other words + /// the Collider buffer will never grow beyond this number even if there are more Colliders in the Grid Cell. + /// Note that changing this after the sensor is created has no effect. + /// + public int MaxColliderBufferSize + { + get { return m_MaxColliderBufferSize; } + set { m_MaxColliderBufferSize = value; } + } + + [HideInInspector, SerializeField] + internal int m_InitialColliderBufferSize = 4; + /// + /// The Estimated Max Number of Colliders to expect per cell. This number is used to + /// pre-allocate an array of Colliders in order to take advantage of the OverlapBoxNonAlloc + /// Physics API. If the number of colliders found is >= InitialColliderBufferSize the array + /// will be resized to double its current size. The hard coded absolute size is 500. + /// Note that changing this after the sensor is created has no effect. + /// + public int InitialColliderBufferSize + { + get { return m_InitialColliderBufferSize; } + set { m_InitialColliderBufferSize = value; } + } + + [HideInInspector, SerializeField] + internal Color[] m_DebugColors; + /// + /// Array of Colors used for the grid gizmos. + /// + public Color[] DebugColors + { + get { return m_DebugColors; } + set { m_DebugColors = value; } + } + + [HideInInspector, SerializeField] + internal float m_GizmoYOffset = 0f; + /// + /// The height of the gizmos grid. + /// + public float GizmoYOffset + { + get { return m_GizmoYOffset; } + set { m_GizmoYOffset = value; } + } + + [HideInInspector, SerializeField] + internal bool m_ShowGizmos = false; + /// + /// Whether to show gizmos or not. + /// + public bool ShowGizmos + { + get { return m_ShowGizmos; } + set { m_ShowGizmos = value; } + } + + [HideInInspector, SerializeField] + internal SensorCompressionType m_CompressionType = SensorCompressionType.PNG; + /// + /// The compression type to use for the sensor. + /// + public SensorCompressionType CompressionType + { + get { return m_CompressionType; } + set { m_CompressionType = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField] + [Range(1, 50)] + [Tooltip("Number of frames of observations that will be stacked before being fed to the neural network.")] + internal int m_ObservationStacks = 1; + /// + /// Whether to stack previous observations. Using 1 means no previous observations. + /// Note that changing this after the sensor is created has no effect. + /// + public int ObservationStacks + { + get { return m_ObservationStacks; } + set { m_ObservationStacks = value; } + } + + /// + public override ISensor[] CreateSensors() + { + m_GridPerception = new BoxOverlapChecker( + m_CellScale, + m_GridSize, + m_RotateWithAgent, + m_ColliderMask, + gameObject, + AgentGameObject, + m_DetectableTags, + m_InitialColliderBufferSize, + m_MaxColliderBufferSize + ); + + // debug data is positive int value and will trigger data validation exception if SensorCompressionType is not None. + m_DebugSensor = new GridSensorBase("DebugGridSensor", m_CellScale, m_GridSize, m_DetectableTags, SensorCompressionType.None); + m_GridPerception.RegisterDebugSensor(m_DebugSensor); + + m_Sensors = GetGridSensors().ToList(); + if (m_Sensors == null || m_Sensors.Count < 1) + { + throw new UnityAgentsException("GridSensorComponent received no sensors. Specify at least one observation type (OneHot/Counting) to use grid sensors." + + "If you're overriding GridSensorComponent.GetGridSensors(), return at least one grid sensor."); + } + + // Only one sensor needs to reference the boxOverlapChecker, so that it gets updated exactly once + m_Sensors[0].m_GridPerception = m_GridPerception; + foreach (var sensor in m_Sensors) + { + m_GridPerception.RegisterSensor(sensor); + } + + if (ObservationStacks != 1) + { + var sensors = new ISensor[m_Sensors.Count]; + for (var i = 0; i < m_Sensors.Count; i++) + { + sensors[i] = new StackingSensor(m_Sensors[i], ObservationStacks); + } + return sensors; + } + else + { + return m_Sensors.ToArray(); + } + } + + /// + /// Get an array of GridSensors to be added in this component. + /// Override this method and return custom GridSensor implementations. + /// + /// Array of grid sensors to be added to the component. + protected virtual GridSensorBase[] GetGridSensors() + { + List sensorList = new List(); + var sensor = new OneHotGridSensor(m_SensorName + "-OneHot", m_CellScale, m_GridSize, m_DetectableTags, m_CompressionType); + sensorList.Add(sensor); + return sensorList.ToArray(); + } + + /// + /// Update fields that are safe to change on the Sensor at runtime. + /// + internal void UpdateSensor() + { + if (m_Sensors != null) + { + m_GridPerception.RotateWithAgent = m_RotateWithAgent; + m_GridPerception.ColliderMask = m_ColliderMask; + foreach (var sensor in m_Sensors) + { + sensor.CompressionType = m_CompressionType; + } + } + } + + void OnDrawGizmos() + { + if (m_ShowGizmos) + { + if (m_GridPerception == null || m_DebugSensor == null) + { + return; + } + + m_DebugSensor.ResetPerceptionBuffer(); + m_GridPerception.UpdateGizmo(); + var cellColors = m_DebugSensor.PerceptionBuffer; + var rotation = m_GridPerception.GetGridRotation(); + + var scale = new Vector3(m_CellScale.x, m_CellScale.y, m_CellScale.z); + var gizmoYOffset = new Vector3(0, m_GizmoYOffset, 0); + var oldGizmoMatrix = Gizmos.matrix; + for (var i = 0; i < m_DebugSensor.PerceptionBuffer.Length; i++) + { + var cellPosition = m_GridPerception.GetCellGlobalPosition(i); + var cubeTransform = Matrix4x4.TRS(cellPosition + gizmoYOffset, rotation, scale); + Gizmos.matrix = oldGizmoMatrix * cubeTransform; + var colorIndex = cellColors[i] - 1; + var debugRayColor = Color.white; + if (colorIndex > -1 && m_DebugColors.Length > colorIndex) + { + debugRayColor = m_DebugColors[(int)colorIndex]; + } + Gizmos.color = new Color(debugRayColor.r, debugRayColor.g, debugRayColor.b, .5f); + Gizmos.DrawCube(Vector3.zero, Vector3.one); + } + + Gizmos.matrix = oldGizmoMatrix; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/GridSensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Sensors/GridSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8090977a3af2fa7f85b64a2a24904cc2c81ca0eb --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/GridSensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a501962d056745d1a30e99146ee39fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/IBuiltInSensor.cs b/com.unity.ml-agents/Runtime/Sensors/IBuiltInSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..d69164d8c9b14e3e8a0b574c5fd91cc410b20cab --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/IBuiltInSensor.cs @@ -0,0 +1,69 @@ +namespace Unity.MLAgents.Sensors +{ + /// + /// Identifiers for "built in" sensor types. + /// These are only used for analytics, and should not be used for any runtime decisions. + /// + /// NOTE: Do not renumber these, since the values are used for analytics. Renaming is allowed though. + /// + public enum BuiltInSensorType + { + /// + /// Default Sensor type if it cannot be determined. + /// + Unknown = 0, + /// + /// The Vector sensor used by the agent. + /// + VectorSensor = 1, + /// + /// The Stacking Sensor type. NOTE: StackingSensor actually returns the wrapped sensor's type. + /// + StackingSensor = 2, + /// + /// The RayPerception Sensor types, both 3D and 2D. + /// + RayPerceptionSensor = 3, + /// + /// The observable attribute sensor type. + /// + ReflectionSensor = 4, + /// + /// Sensors that use the Camera for observations. + /// + CameraSensor = 5, + /// + /// Sensors that use RenderTextures for observations. + /// + RenderTextureSensor = 6, + /// + /// Sensors that use buffers or tensors for observations. + /// + BufferSensor = 7, + /// + /// The sensors that observe properties of rigid bodies. + /// + PhysicsBodySensor = 8, + /// + /// The sensors that observe Match 3 boards. + /// + Match3Sensor = 9, + /// + /// Sensors that break down the world into a grid of colliders to observe an area at a pre-defined granularity. + /// + GridSensor = 10 + } + + /// + /// Interface for sensors that are provided as part of ML-Agents. + /// User-implemented sensors don't need to use this interface. + /// + internal interface IBuiltInSensor + { + /// + /// Return the corresponding BuiltInSensorType for the sensor. + /// + /// A BuiltInSensorType corresponding to the sensor. + BuiltInSensorType GetBuiltInSensorType(); + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/IBuiltInSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/IBuiltInSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..93dd08d1f194ab5e65476170704351ccaad7db00 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/IBuiltInSensor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c0c4a98bf1c941b381917cb65209beee +timeCreated: 1611096525 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/IGridPerception.cs b/com.unity.ml-agents/Runtime/Sensors/IGridPerception.cs new file mode 100644 index 0000000000000000000000000000000000000000..bbb981efa510cf73848da5bec428c3260263c57d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/IGridPerception.cs @@ -0,0 +1,62 @@ +using System; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// An interface for GridSensor perception that defines the grid cells and collider detecting strategies. + /// + internal interface IGridPerception + { + bool RotateWithAgent + { + get; + set; + } + + LayerMask ColliderMask + { + get; + set; + } + + /// Converts the index of the cell to the 3D point (y is zero) relative to grid center + /// Vector3 of the position of the center of the cell relative to grid center + /// The index of the cell + Vector3 GetCellLocalPosition(int cellIndex); + + /// + /// Converts the index of the cell to the 3D point (y is zero) in world space + /// based on the result from GetCellLocalPosition() + /// + /// Vector3 of the position of the center of the cell in world space + /// The index of the cell + Vector3 GetCellGlobalPosition(int cellIndex); + + Quaternion GetGridRotation(); + + /// + /// Perceive the latest grid status. Detect colliders for each cell, parse the collider arrays, + /// then trigger registered sensors to encode and update with the new grid status. + /// + void Perceive(); + + /// + /// Same as Perceive(), but only load data for debug gizmo. + /// + void UpdateGizmo(); + + /// + /// Register a sensor to this GridPerception to receive the grid perception results. + /// When the GridPerception perceive a new observation, registered sensors will be triggered + /// to encode the new observation and update its data. + /// + void RegisterSensor(GridSensorBase sensor); + + /// + /// Register an internal debug sensor. + /// Debug sensors will only be triggered when drawing debug gizmos. + /// + void RegisterDebugSensor(GridSensorBase debugSensor); + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/IGridPerception.cs.meta b/com.unity.ml-agents/Runtime/Sensors/IGridPerception.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b08ed6449d545a290eaa349d4a1e9f3641564f4f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/IGridPerception.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87820d9eb927c4fa483dff9289d983f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/ISensor.cs b/com.unity.ml-agents/Runtime/Sensors/ISensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..ed93910fa0b910f57f44cef19472f93e42cc0bc0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/ISensor.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; + +namespace Unity.MLAgents.Sensors +{ + /// + /// The Dimension property flags of the observations + /// + [Flags] + public enum DimensionProperty + { + /// + /// No properties specified. + /// + Unspecified = 0, + + /// + /// No Property of the observation in that dimension. Observation can be processed with + /// fully connected networks. + /// + None = 1, + + /// + /// Means it is suitable to do a convolution in this dimension. + /// + TranslationalEquivariance = 2, + + /// + /// Means that there can be a variable number of observations in this dimension. + /// The observations are unordered. + /// + VariableSize = 4, + } + + /// + /// The ObservationType enum of the Sensor. + /// + public enum ObservationType + { + /// + /// Collected observations are generic. + /// + Default = 0, + + /// + /// Collected observations contain goal information. + /// + GoalSignal = 1, + } + + /// + /// Sensor interface for generating observations. + /// + public interface ISensor + { + /// + /// Returns a description of the observations that will be generated by the sensor. + /// See for more details, and helper methods to create one. + /// + /// An object describing the observation. + ObservationSpec GetObservationSpec(); + + /// + /// Write the observation data directly to the . + /// Note that this (and ) may + /// be called multiple times per agent step, so should not mutate any internal state. + /// + /// Where the observations will be written to. + /// The number of elements written. + int Write(ObservationWriter writer); + + /// + /// Return a compressed representation of the observation. For small observations, + /// this should generally not be implemented. However, compressing large observations + /// (such as visual results) can significantly improve model training time. + /// + /// Compressed observation. + byte[] GetCompressedObservation(); + + /// + /// Update any internal state of the sensor. This is called once per each agent step. + /// + void Update(); + + /// + /// Resets the internal state of the sensor. This is called at the end of an Agent's episode. + /// Most implementations can leave this empty. + /// + void Reset(); + + /// + /// Return information on the compression type being used. If no compression is used, return + /// . + /// + /// An object describing the compression used by the sensor. + CompressionSpec GetCompressionSpec(); + + /// + /// Get the name of the sensor. This is used to ensure deterministic sorting of the sensors + /// on an Agent, so the naming must be consistent across all sensors and agents. + /// + /// The name of the sensor. + string GetName(); + } + + + /// + /// Helper methods to be shared by all classes that implement . + /// + public static class SensorExtensions + { + /// + /// Get the total number of elements in the ISensor's observation (i.e. the product of the + /// shape elements). + /// + /// + /// + public static int ObservationSize(this ISensor sensor) + { + var obsSpec = sensor.GetObservationSpec(); + var count = 1; + for (var i = 0; i < obsSpec.Rank; i++) + { + count *= obsSpec.Shape[i]; + } + + return count; + } + } + + internal static class SensorUtils + { + internal static void SortSensors(List sensors) + { + // Use InvariantCulture to ensure consistent sorting between different culture settings. + sensors.Sort((x, y) => string.Compare(x.GetName(), y.GetName(), StringComparison.InvariantCulture)); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/ISensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/ISensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d8ceedec70635e68eaa14738f3d174c343e257fd --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/ISensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bb5e09a94c6d4cd9a46c60b084e4952 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/ObservationSpec.cs b/com.unity.ml-agents/Runtime/Sensors/ObservationSpec.cs new file mode 100644 index 0000000000000000000000000000000000000000..59c7f2eb4e6a53f1ece4023f2835f1a5225378a3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/ObservationSpec.cs @@ -0,0 +1,138 @@ +namespace Unity.MLAgents.Sensors +{ + /// + /// A description of the observations that an ISensor produces. + /// This includes the size of the observation, the properties of each dimension, and how the observation + /// should be used for training. + /// + public struct ObservationSpec + { + internal readonly InplaceArray m_Shape; + + /// + /// The size of the observations that will be generated. + /// For example, a sensor that observes the velocity of a rigid body (in 3D) would use [3]. + /// A sensor that returns an RGB image would use [Height, Width, 3]. + /// + public InplaceArray Shape + { + get => m_Shape; + } + + internal readonly InplaceArray m_DimensionProperties; + + /// + /// The properties of each dimensions of the observation. + /// The length of the array must be equal to the rank of the observation tensor. + /// + /// + /// It is generally recommended to use default values provided by helper functions, + /// as not all combinations of DimensionProperty may be supported by the trainer. + /// + public InplaceArray DimensionProperties + { + get => m_DimensionProperties; + } + + internal ObservationType m_ObservationType; + + /// + /// The type of the observation, e.g. whether they are generic or + /// help determine the goal for the Agent. + /// + public ObservationType ObservationType + { + get => m_ObservationType; + } + + /// + /// The number of dimensions of the observation. + /// + public int Rank + { + get { return Shape.Length; } + } + + /// + /// Construct an ObservationSpec for 1-D observations of the requested length. + /// + /// + /// + /// + public static ObservationSpec Vector(int length, ObservationType obsType = ObservationType.Default) + { + return new ObservationSpec( + new InplaceArray(length), + new InplaceArray(DimensionProperty.None), + obsType + ); + } + + /// + /// Construct an ObservationSpec for variable-length observations. + /// + /// + /// + /// + public static ObservationSpec VariableLength(int obsSize, int maxNumObs) + { + var dimProps = new InplaceArray( + DimensionProperty.VariableSize, + DimensionProperty.None + ); + return new ObservationSpec( + new InplaceArray(obsSize, maxNumObs), + dimProps + ); + } + + /// + /// Construct an ObservationSpec for visual-like observations, e.g. observations + /// with a height, width, and possible multiple channels. + /// + /// + /// + /// + /// + /// + public static ObservationSpec Visual(int height, int width, int channels, ObservationType obsType = ObservationType.Default) + { + var dimProps = new InplaceArray( + DimensionProperty.TranslationalEquivariance, + DimensionProperty.TranslationalEquivariance, + DimensionProperty.None + ); + return new ObservationSpec( + new InplaceArray(height, width, channels), + dimProps, + obsType + ); + } + + /// + /// Create a general ObservationSpec from the shape, dimension properties, and observation type. + /// + /// + /// Note that not all combinations of DimensionProperty may be supported by the trainer. + /// shape and dimensionProperties must have the same size. + /// + /// + /// + /// + /// + public ObservationSpec( + InplaceArray shape, + InplaceArray dimensionProperties, + ObservationType observationType = ObservationType.Default + ) + { + if (shape.Length != dimensionProperties.Length) + { + throw new UnityAgentsException("shape and dimensionProperties must have the same length."); + } + m_Shape = shape; + m_DimensionProperties = dimensionProperties; + m_ObservationType = observationType; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/ObservationSpec.cs.meta b/com.unity.ml-agents/Runtime/Sensors/ObservationSpec.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..691fdf61727a9cf69a2fb39ce188a012fa844e96 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/ObservationSpec.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cc1734d60fd5485ead94247cb206aa35 +timeCreated: 1615412644 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs b/com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..02fbae8997ebf7ed9413c364e66cba6ecf8dea22 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs @@ -0,0 +1,321 @@ +using System; +using System.Collections.Generic; +using Unity.Barracuda; +using Unity.MLAgents.Inference; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Allows sensors to write to both TensorProxy and float arrays/lists. + /// + public class ObservationWriter + { + IList m_Data; + int m_Offset; + + TensorProxy m_Proxy; + int m_Batch; + + TensorShape m_TensorShape; + + public ObservationWriter() { } + + /// + /// Set the writer to write to an IList at the given channelOffset. + /// + /// Float array or list that will be written to. + /// ObservationSpec of the observation to be written + /// Offset from the start of the float data to write to. + internal void SetTarget(IList data, ObservationSpec observationSpec, int offset) + { + SetTarget(data, observationSpec.Shape, offset); + } + + /// + /// Set the writer to write to an IList at the given channelOffset. + /// + /// Float array or list that will be written to. + /// Shape of the observations to be written. + /// Offset from the start of the float data to write to. + internal void SetTarget(IList data, InplaceArray shape, int offset) + { + m_Data = data; + m_Offset = offset; + m_Proxy = null; + m_Batch = 0; + + if (shape.Length == 1) + { + m_TensorShape = new TensorShape(m_Batch, shape[0]); + } + else if (shape.Length == 2) + { + m_TensorShape = new TensorShape(new[] { m_Batch, 1, shape[0], shape[1] }); + } + else + { + m_TensorShape = new TensorShape(m_Batch, shape[0], shape[1], shape[2]); + } + } + + /// + /// Set the writer to write to a TensorProxy at the given batch and channel offset. + /// + /// Tensor proxy that will be written to. + /// Batch index in the tensor proxy (i.e. the index of the Agent). + /// Offset from the start of the channel to write to. + internal void SetTarget(TensorProxy tensorProxy, int batchIndex, int channelOffset) + { + m_Proxy = tensorProxy; + m_Batch = batchIndex; + m_Offset = channelOffset; + m_Data = null; + m_TensorShape = m_Proxy.data.shape; + } + + /// + /// 1D write access at a specified index. Use AddList if possible instead. + /// + /// Index to write to. + public float this[int index] + { + set + { + if (m_Data != null) + { + m_Data[index + m_Offset] = value; + } + else + { + m_Proxy.data[m_Batch, index + m_Offset] = value; + } + } + } + + /// + /// 3D write access at the specified height, width, and channel. + /// + /// + /// + /// + public float this[int h, int w, int ch] + { + set + { + if (m_Data != null) + { + if (h < 0 || h >= m_TensorShape.height) + { + throw new IndexOutOfRangeException($"height value {h} must be in range [0, {m_TensorShape.height - 1}]"); + } + if (w < 0 || w >= m_TensorShape.width) + { + throw new IndexOutOfRangeException($"width value {w} must be in range [0, {m_TensorShape.width - 1}]"); + } + if (ch < 0 || ch >= m_TensorShape.channels) + { + throw new IndexOutOfRangeException($"channel value {ch} must be in range [0, {m_TensorShape.channels - 1}]"); + } + + var index = m_TensorShape.Index(m_Batch, h, w, ch + m_Offset); + m_Data[index] = value; + } + else + { + m_Proxy.data[m_Batch, h, w, ch + m_Offset] = value; + } + } + } + + /// + /// Write the list of floats. + /// + /// The actual list of floats to write. + /// Optional write offset to start writing from. + public void AddList(IList data, int writeOffset = 0) + { + if (m_Data != null) + { + for (var index = 0; index < data.Count; index++) + { + var val = data[index]; + m_Data[index + m_Offset + writeOffset] = val; + } + } + else + { + for (var index = 0; index < data.Count; index++) + { + var val = data[index]; + m_Proxy.data[m_Batch, index + m_Offset + writeOffset] = val; + } + } + } + + /// + /// Write the Vector3 components. + /// + /// The Vector3 to be written. + /// Optional write offset. + public void Add(Vector3 vec, int writeOffset = 0) + { + if (m_Data != null) + { + m_Data[m_Offset + writeOffset + 0] = vec.x; + m_Data[m_Offset + writeOffset + 1] = vec.y; + m_Data[m_Offset + writeOffset + 2] = vec.z; + } + else + { + m_Proxy.data[m_Batch, m_Offset + writeOffset + 0] = vec.x; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 1] = vec.y; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 2] = vec.z; + } + } + + /// + /// Write the Vector4 components. + /// + /// The Vector4 to be written. + /// Optional write offset. + public void Add(Vector4 vec, int writeOffset = 0) + { + if (m_Data != null) + { + m_Data[m_Offset + writeOffset + 0] = vec.x; + m_Data[m_Offset + writeOffset + 1] = vec.y; + m_Data[m_Offset + writeOffset + 2] = vec.z; + m_Data[m_Offset + writeOffset + 3] = vec.w; + } + else + { + m_Proxy.data[m_Batch, m_Offset + writeOffset + 0] = vec.x; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 1] = vec.y; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 2] = vec.z; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 3] = vec.w; + } + } + + /// + /// Write the Quaternion components. + /// + /// The Quaternion to be written. + /// Optional write offset. + + public void Add(Quaternion quat, int writeOffset = 0) + { + if (m_Data != null) + { + m_Data[m_Offset + writeOffset + 0] = quat.x; + m_Data[m_Offset + writeOffset + 1] = quat.y; + m_Data[m_Offset + writeOffset + 2] = quat.z; + m_Data[m_Offset + writeOffset + 3] = quat.w; + } + else + { + m_Proxy.data[m_Batch, m_Offset + writeOffset + 0] = quat.x; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 1] = quat.y; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 2] = quat.z; + m_Proxy.data[m_Batch, m_Offset + writeOffset + 3] = quat.w; + } + } + } + + /// + /// Provides extension methods for the ObservationWriter. + /// + public static class ObservationWriterExtension + { + /// + /// Writes a Texture2D into a ObservationWriter. + /// + /// + /// Writer to fill with Texture data. + /// + /// + /// The texture to be put into the tensor. + /// + /// + /// If set to true the textures will be converted to grayscale before + /// being stored in the tensor. + /// + /// The number of floats written + public static int WriteTexture( + this ObservationWriter obsWriter, + Texture2D texture, + bool grayScale) + { + if (texture.format == TextureFormat.RGB24) + { + return obsWriter.WriteTextureRGB24(texture, grayScale); + } + var width = texture.width; + var height = texture.height; + + var texturePixels = texture.GetPixels32(); + // During training, we convert from Texture to PNG before sending to the trainer, which has the + // effect of flipping the image. We need another flip here at inference time to match this. + for (var h = height - 1; h >= 0; h--) + { + for (var w = 0; w < width; w++) + { + var currentPixel = texturePixels[(height - h - 1) * width + w]; + + if (grayScale) + { + obsWriter[h, w, 0] = + (currentPixel.r + currentPixel.g + currentPixel.b) / 3f / 255.0f; + } + else + { + // For Color32, the r, g and b values are between 0 and 255. + obsWriter[h, w, 0] = currentPixel.r / 255.0f; + obsWriter[h, w, 1] = currentPixel.g / 255.0f; + obsWriter[h, w, 2] = currentPixel.b / 255.0f; + } + } + } + + return height * width * (grayScale ? 1 : 3); + } + + internal static int WriteTextureRGB24( + this ObservationWriter obsWriter, + Texture2D texture, + bool grayScale + ) + { + var width = texture.width; + var height = texture.height; + + var rawBytes = texture.GetRawTextureData(); + // During training, we convert from Texture to PNG before sending to the trainer, which has the + // effect of flipping the image. We need another flip here at inference time to match this. + for (var h = height - 1; h >= 0; h--) + { + for (var w = 0; w < width; w++) + { + var offset = (height - h - 1) * width + w; + var r = rawBytes[3 * offset]; + var g = rawBytes[3 * offset + 1]; + var b = rawBytes[3 * offset + 2]; + + if (grayScale) + { + obsWriter[h, w, 0] = (r + g + b) / 3f / 255.0f; + } + else + { + // For Color32, the r, g and b values are between 0 and 255. + obsWriter[h, w, 0] = r / 255.0f; + obsWriter[h, w, 1] = g / 255.0f; + obsWriter[h, w, 2] = b / 255.0f; + } + } + } + + return height * width * (grayScale ? 1 : 3); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs.meta b/com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..424707a882dfc62a4f442358ed2159e284bb4266 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 86bad2e6dded4a62853752a1713981f2 +timeCreated: 1572540197 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/OneHotGridSensor.cs b/com.unity.ml-agents/Runtime/Sensors/OneHotGridSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..648c702d80c94194382db7250ff84b8511813ff5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/OneHotGridSensor.cs @@ -0,0 +1,59 @@ +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Grid-based sensor with one-hot observations. + /// + public class OneHotGridSensor : GridSensorBase + { + /// + /// Create a OneHotGridSensor with the specified configuration. + /// + /// The sensor name + /// The scale of each cell in the grid + /// Number of cells on each side of the grid + /// Tags to be detected by the sensor + /// Compression type + public OneHotGridSensor( + string name, + Vector3 cellScale, + Vector3Int gridSize, + string[] detectableTags, + SensorCompressionType compression + ) : base(name, cellScale, gridSize, detectableTags, compression) + { + } + + /// + protected override int GetCellObservationSize() + { + return DetectableTags == null ? 0 : DetectableTags.Length; + } + + /// + protected override bool IsDataNormalized() + { + return true; + } + + /// + protected internal override ProcessCollidersMethod GetProcessCollidersMethod() + { + return ProcessCollidersMethod.ProcessClosestColliders; + } + + /// + /// Get the one-hot representation of the detected game object's tag. + /// + /// The game object that was detected within a certain cell + /// The index of the detectedObject's tag in the DetectableObjects list + /// The buffer to write the observation values. + /// The buffer size is configured by . + /// + protected override void GetObjectData(GameObject detectedObject, int tagIndex, float[] dataBuffer) + { + dataBuffer[tagIndex] = 1; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/OneHotGridSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/OneHotGridSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c21f87cba487491aaa0baff45cd475ce97ecd315 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/OneHotGridSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 914f5ab90be9e411d83642035abebc2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..158d2a03918bfdd47850d55704de306598c6ec0a --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensor.cs @@ -0,0 +1,673 @@ +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Determines which dimensions the sensor will perform the casts in. + /// + public enum RayPerceptionCastType + { + /// + /// Cast in 2 dimensions, using Physics2D.CircleCast or Physics2D.RayCast. + /// + Cast2D, + + /// + /// Cast in 3 dimensions, using Physics.SphereCast or Physics.RayCast. + /// + Cast3D, + } + + /// + /// Contains the elements that define a ray perception sensor. + /// + public struct RayPerceptionInput + { + /// + /// Length of the rays to cast. This will be scaled up or down based on the scale of the transform. + /// + public float RayLength; + + /// + /// List of tags which correspond to object types agent can see. + /// + public IReadOnlyList DetectableTags; + + /// + /// List of angles (in degrees) used to define the rays. + /// 90 degrees is considered "forward" relative to the game object. + /// + public IReadOnlyList Angles; + + /// + /// Starting height offset of ray from center of agent + /// + public float StartOffset; + + /// + /// Ending height offset of ray from center of agent. + /// + public float EndOffset; + + /// + /// Radius of the sphere to use for spherecasting. + /// If 0 or less, rays are used instead - this may be faster, especially for complex environments. + /// + public float CastRadius; + + /// + /// Transform of the GameObject. + /// + public Transform Transform; + + /// + /// Whether to perform the casts in 2D or 3D. + /// + public RayPerceptionCastType CastType; + + /// + /// Filtering options for the casts. + /// + public int LayerMask; + + /// + /// Whether to use batched raycasts. + /// + public bool UseBatchedRaycasts; + + /// + /// Returns the expected number of floats in the output. + /// + /// + public int OutputSize() + { + return ((DetectableTags?.Count ?? 0) + 2) * (Angles?.Count ?? 0); + } + + /// + /// Get the cast start and end points for the given ray index/ + /// + /// + /// A tuple of the start and end positions in world space. + public (Vector3 StartPositionWorld, Vector3 EndPositionWorld) RayExtents(int rayIndex) + { + var angle = Angles[rayIndex]; + Vector3 startPositionLocal, endPositionLocal; + if (CastType == RayPerceptionCastType.Cast3D) + { + startPositionLocal = new Vector3(0, StartOffset, 0); + endPositionLocal = PolarToCartesian3D(RayLength, angle); + endPositionLocal.y += EndOffset; + } + else + { + // Vector2s here get converted to Vector3s (and back to Vector2s for casting) + startPositionLocal = new Vector2(); + endPositionLocal = PolarToCartesian2D(RayLength, angle); + } + + var startPositionWorld = Transform.TransformPoint(startPositionLocal); + var endPositionWorld = Transform.TransformPoint(endPositionLocal); + + return (StartPositionWorld: startPositionWorld, EndPositionWorld: endPositionWorld); + } + + /// + /// Converts polar coordinate to cartesian coordinate. + /// + static internal Vector3 PolarToCartesian3D(float radius, float angleDegrees) + { + var x = radius * Mathf.Cos(Mathf.Deg2Rad * angleDegrees); + var z = radius * Mathf.Sin(Mathf.Deg2Rad * angleDegrees); + return new Vector3(x, 0f, z); + } + + /// + /// Converts polar coordinate to cartesian coordinate. + /// + static internal Vector2 PolarToCartesian2D(float radius, float angleDegrees) + { + var x = radius * Mathf.Cos(Mathf.Deg2Rad * angleDegrees); + var y = radius * Mathf.Sin(Mathf.Deg2Rad * angleDegrees); + return new Vector2(x, y); + } + } + + /// + /// Contains the data generated/produced from a ray perception sensor. + /// + public class RayPerceptionOutput + { + /// + /// Contains the data generated from a single ray of a ray perception sensor. + /// + public struct RayOutput + { + /// + /// Whether or not the ray hit anything. + /// + public bool HasHit; + + /// + /// Whether or not the ray hit an object whose tag is in the input's DetectableTags list. + /// + public bool HitTaggedObject; + + /// + /// The index of the hit object's tag in the DetectableTags list, or -1 if there was no hit, or the + /// hit object has a different tag. + /// + public int HitTagIndex; + + /// + /// Normalized distance to the hit object. + /// + public float HitFraction; + + /// + /// The hit GameObject (or null if there was no hit). + /// + public GameObject HitGameObject; + + /// + /// Start position of the ray in world space. + /// + public Vector3 StartPositionWorld; + + /// + /// End position of the ray in world space. + /// + public Vector3 EndPositionWorld; + + /// + /// The scaled length of the ray. + /// + /// + /// If there is non-(1,1,1) scale, |EndPositionWorld - StartPositionWorld| will be different from + /// the input rayLength. + /// + public float ScaledRayLength + { + get + { + var rayDirection = EndPositionWorld - StartPositionWorld; + return rayDirection.magnitude; + } + } + + /// + /// The scaled size of the cast. + /// + /// + /// If there is non-(1,1,1) scale, the cast radius will be also be scaled. + /// + public float ScaledCastRadius; + + /// + /// Writes the ray output information to a subset of the float array. Each element in the rayAngles array + /// determines a sublist of data to the observation. The sublist contains the observation data for a single cast. + /// The list is composed of the following: + /// 1. A one-hot encoding for detectable tags. For example, if DetectableTags.Length = n, the + /// first n elements of the sublist will be a one-hot encoding of the detectableTag that was hit, or + /// all zeroes otherwise. + /// 2. The 'numDetectableTags' element of the sublist will be 1 if the ray missed everything, or 0 if it hit + /// something (detectable or not). + /// 3. The 'numDetectableTags+1' element of the sublist will contain the normalized distance to the object + /// hit, or 1.0 if nothing was hit. + /// + /// + /// + /// Output buffer. The size must be equal to (numDetectableTags+2) * RayOutputs.Length + public void ToFloatArray(int numDetectableTags, int rayIndex, float[] buffer) + { + var bufferOffset = (numDetectableTags + 2) * rayIndex; + if (HitTaggedObject) + { + buffer[bufferOffset + HitTagIndex] = 1f; + } + buffer[bufferOffset + numDetectableTags] = HasHit ? 0f : 1f; + buffer[bufferOffset + numDetectableTags + 1] = HitFraction; + } + } + + /// + /// RayOutput for each ray that was cast. + /// + public RayOutput[] RayOutputs; + } + + /// + /// A sensor implementation that supports ray cast-based observations. + /// + public class RayPerceptionSensor : ISensor, IBuiltInSensor + { + float[] m_Observations; + ObservationSpec m_ObservationSpec; + string m_Name; + + RayPerceptionInput m_RayPerceptionInput; + RayPerceptionOutput m_RayPerceptionOutput; + + bool m_UseBatchedRaycasts; + + /// + /// Time.frameCount at the last time Update() was called. This is only used for display in gizmos. + /// + int m_DebugLastFrameCount; + + internal int DebugLastFrameCount + { + get { return m_DebugLastFrameCount; } + } + + /// + /// Creates the RayPerceptionSensor. + /// + /// The name of the sensor. + /// The inputs for the sensor. + public RayPerceptionSensor(string name, RayPerceptionInput rayInput) + { + m_Name = name; + m_RayPerceptionInput = rayInput; + m_UseBatchedRaycasts = rayInput.UseBatchedRaycasts; + + SetNumObservations(rayInput.OutputSize()); + + m_DebugLastFrameCount = Time.frameCount; + m_RayPerceptionOutput = new RayPerceptionOutput(); + } + + /// + /// The most recent raycast results. + /// + public RayPerceptionOutput RayPerceptionOutput + { + get { return m_RayPerceptionOutput; } + } + + void SetNumObservations(int numObservations) + { + m_ObservationSpec = ObservationSpec.Vector(numObservations); + m_Observations = new float[numObservations]; + } + + internal void SetRayPerceptionInput(RayPerceptionInput rayInput) + { + // Note that change the number of rays or tags doesn't directly call this, + // but changing them and then changing another field will. + if (m_RayPerceptionInput.OutputSize() != rayInput.OutputSize()) + { + Debug.Log( + "Changing the number of tags or rays at runtime is not " + + "supported and may cause errors in training or inference." + ); + // Changing the shape will probably break things downstream, but we can at least + // keep this consistent. + SetNumObservations(rayInput.OutputSize()); + } + m_RayPerceptionInput = rayInput; + } + + /// + /// Computes the ray perception observations and saves them to the provided + /// . + /// + /// Where the ray perception observations are written to. + /// + public int Write(ObservationWriter writer) + { + using (TimerStack.Instance.Scoped("RayPerceptionSensor.Perceive")) + { + Array.Clear(m_Observations, 0, m_Observations.Length); + var numRays = m_RayPerceptionInput.Angles.Count; + var numDetectableTags = m_RayPerceptionInput.DetectableTags.Count; + + // For each ray, write the information to the observation buffer + for (var rayIndex = 0; rayIndex < numRays; rayIndex++) + { + m_RayPerceptionOutput.RayOutputs?[rayIndex].ToFloatArray(numDetectableTags, rayIndex, m_Observations); + } + + // Finally, add the observations to the ObservationWriter + writer.AddList(m_Observations); + } + return m_Observations.Length; + } + + /// + public void Update() + { + m_DebugLastFrameCount = Time.frameCount; + var numRays = m_RayPerceptionInput.Angles.Count; + + if (m_RayPerceptionOutput.RayOutputs == null || m_RayPerceptionOutput.RayOutputs.Length != numRays) + { + m_RayPerceptionOutput.RayOutputs = new RayPerceptionOutput.RayOutput[numRays]; + } + + if (m_UseBatchedRaycasts && m_RayPerceptionInput.CastType == RayPerceptionCastType.Cast3D) + { + PerceiveBatchedRays(ref m_RayPerceptionOutput.RayOutputs, m_RayPerceptionInput); + } + else + { + // For each ray, do the casting and save the results. + for (var rayIndex = 0; rayIndex < numRays; rayIndex++) + { + m_RayPerceptionOutput.RayOutputs[rayIndex] = PerceiveSingleRay(m_RayPerceptionInput, rayIndex); + } + } + } + + /// + public void Reset() { } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public virtual byte[] GetCompressedObservation() + { + return null; + } + + /// + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.RayPerceptionSensor; + } + + /// + /// Evaluates the raycasts to be used as part of an observation of an agent. + /// + /// Input defining the rays that will be cast. + /// Use batched raycasts. + /// Output struct containing the raycast results. + public static RayPerceptionOutput Perceive(RayPerceptionInput input, bool batched) + { + RayPerceptionOutput output = new RayPerceptionOutput(); + output.RayOutputs = new RayPerceptionOutput.RayOutput[input.Angles.Count]; + + if (batched) + { + PerceiveBatchedRays(ref output.RayOutputs, input); + } + else + { + for (var rayIndex = 0; rayIndex < input.Angles.Count; rayIndex++) + { + output.RayOutputs[rayIndex] = PerceiveSingleRay(input, rayIndex); + } + } + + return output; + } + + /// + /// Evaluate the raycast results of all the rays from the RayPerceptionInput as a batch. + /// + /// + /// + /// + internal static void PerceiveBatchedRays(ref RayPerceptionOutput.RayOutput[] batchedRaycastOutputs, RayPerceptionInput input) + { + var numRays = input.Angles.Count; + var results = new NativeArray(numRays, Allocator.TempJob); + var unscaledRayLength = input.RayLength; + var unscaledCastRadius = input.CastRadius; + + var raycastCommands = new NativeArray(unscaledCastRadius <= 0f ? numRays : 0, Allocator.TempJob); + var spherecastCommands = new NativeArray(unscaledCastRadius > 0f ? numRays : 0, Allocator.TempJob); + + // this is looped + + for (int i = 0; i < numRays; i++) + { + var extents = input.RayExtents(i); + var startPositionWorld = extents.StartPositionWorld; + var endPositionWorld = extents.EndPositionWorld; + + var rayDirection = endPositionWorld - startPositionWorld; + // If there is non-unity scale, |rayDirection| will be different from rayLength. + // We want to use this transformed ray length for determining cast length, hit fraction etc. + // We also it to scale up or down the sphere or circle radii + var scaledRayLength = rayDirection.magnitude; + // Avoid 0/0 if unscaledRayLength is 0 + var scaledCastRadius = unscaledRayLength > 0 ? + unscaledCastRadius * scaledRayLength / unscaledRayLength : + unscaledCastRadius; + + var queryParameters = QueryParameters.Default; + queryParameters.layerMask = input.LayerMask; + + var rayDirectionNormalized = rayDirection.normalized; + + if (scaledCastRadius > 0f) + { + spherecastCommands[i] = new SpherecastCommand(startPositionWorld, scaledCastRadius, rayDirectionNormalized, queryParameters, scaledRayLength); + } + else + { + raycastCommands[i] = new RaycastCommand(startPositionWorld, rayDirectionNormalized, queryParameters, scaledRayLength); + } + + batchedRaycastOutputs[i] = new RayPerceptionOutput.RayOutput + { + HitTaggedObject = false, + HitTagIndex = -1, + StartPositionWorld = startPositionWorld, + EndPositionWorld = endPositionWorld, + ScaledCastRadius = scaledCastRadius + }; + + } + + if (unscaledCastRadius > 0f) + { + JobHandle handle = SpherecastCommand.ScheduleBatch(spherecastCommands, results, 1, 1, default(JobHandle)); + handle.Complete(); + } + else + { + JobHandle handle = RaycastCommand.ScheduleBatch(raycastCommands, results, 1, 1, default(JobHandle)); + handle.Complete(); + } + + for (int i = 0; i < results.Length; i++) + { + var castHit = results[i].collider != null; + var hitFraction = 1.0f; + GameObject hitObject = null; + float scaledRayLength; + float scaledCastRadius = batchedRaycastOutputs[i].ScaledCastRadius; + if (scaledCastRadius > 0f) + { + scaledRayLength = spherecastCommands[i].distance; + } + else + { + scaledRayLength = raycastCommands[i].distance; + } + + // hitFraction = castHit ? (scaledRayLength > 0 ? results[i].distance / scaledRayLength : 0.0f) : 1.0f; + // Debug.Log(results[i].distance); + hitFraction = castHit ? (scaledRayLength > 0 ? results[i].distance / scaledRayLength : 0.0f) : 1.0f; + hitObject = castHit ? results[i].collider.gameObject : null; + + if (castHit) + { + var numTags = input.DetectableTags?.Count ?? 0; + for (int j = 0; j < numTags; j++) + { + var tagsEqual = false; + try + { + var tag = input.DetectableTags[j]; + if (!string.IsNullOrEmpty(tag)) + { + tagsEqual = hitObject.CompareTag(tag); + } + } + catch (UnityException) + { + } + + if (tagsEqual) + { + batchedRaycastOutputs[i].HitTaggedObject = true; + batchedRaycastOutputs[i].HitTagIndex = j; + break; + } + } + } + + batchedRaycastOutputs[i].HasHit = castHit; + batchedRaycastOutputs[i].HitFraction = hitFraction; + batchedRaycastOutputs[i].HitGameObject = hitObject; + + } + + results.Dispose(); + raycastCommands.Dispose(); + spherecastCommands.Dispose(); + } + + /// + /// Evaluate the raycast results of a single ray from the RayPerceptionInput. + /// + /// + /// + /// + internal static RayPerceptionOutput.RayOutput PerceiveSingleRay( + RayPerceptionInput input, + int rayIndex + ) + { + var unscaledRayLength = input.RayLength; + var unscaledCastRadius = input.CastRadius; + + var extents = input.RayExtents(rayIndex); + var startPositionWorld = extents.StartPositionWorld; + var endPositionWorld = extents.EndPositionWorld; + + var rayDirection = endPositionWorld - startPositionWorld; + // If there is non-unity scale, |rayDirection| will be different from rayLength. + // We want to use this transformed ray length for determining cast length, hit fraction etc. + // We also it to scale up or down the sphere or circle radii + var scaledRayLength = rayDirection.magnitude; + // Avoid 0/0 if unscaledRayLength is 0 + var scaledCastRadius = unscaledRayLength > 0 ? + unscaledCastRadius * scaledRayLength / unscaledRayLength : + unscaledCastRadius; + + // Do the cast and assign the hit information for each detectable tag. + var castHit = false; + var hitFraction = 1.0f; + GameObject hitObject = null; + + if (input.CastType == RayPerceptionCastType.Cast3D) + { +#if MLA_UNITY_PHYSICS_MODULE + RaycastHit rayHit; + if (scaledCastRadius > 0f) + { + castHit = Physics.SphereCast(startPositionWorld, scaledCastRadius, rayDirection, out rayHit, + scaledRayLength, input.LayerMask); + } + else + { + castHit = Physics.Raycast(startPositionWorld, rayDirection, out rayHit, + scaledRayLength, input.LayerMask); + } + + // If scaledRayLength is 0, we still could have a hit with sphere casts (maybe?). + // To avoid 0/0, set the fraction to 0. + hitFraction = castHit ? (scaledRayLength > 0 ? rayHit.distance / scaledRayLength : 0.0f) : 1.0f; + hitObject = castHit ? rayHit.collider.gameObject : null; +#endif + } + else + { +#if MLA_UNITY_PHYSICS2D_MODULE + RaycastHit2D rayHit; + if (scaledCastRadius > 0f) + { + rayHit = Physics2D.CircleCast(startPositionWorld, scaledCastRadius, rayDirection, + scaledRayLength, input.LayerMask); + } + else + { + rayHit = Physics2D.Raycast(startPositionWorld, rayDirection, scaledRayLength, input.LayerMask); + } + + castHit = rayHit; + hitFraction = castHit ? rayHit.fraction : 1.0f; + hitObject = castHit ? rayHit.collider.gameObject : null; +#endif + } + + var rayOutput = new RayPerceptionOutput.RayOutput + { + HasHit = castHit, + HitFraction = hitFraction, + HitTaggedObject = false, + HitTagIndex = -1, + HitGameObject = hitObject, + StartPositionWorld = startPositionWorld, + EndPositionWorld = endPositionWorld, + ScaledCastRadius = scaledCastRadius + }; + + if (castHit) + { + // Find the index of the tag of the object that was hit. + var numTags = input.DetectableTags?.Count ?? 0; + for (var i = 0; i < numTags; i++) + { + var tagsEqual = false; + try + { + var tag = input.DetectableTags[i]; + if (!string.IsNullOrEmpty(tag)) + { + tagsEqual = hitObject.CompareTag(tag); + } + } + catch (UnityException) + { + // If the tag is null, empty, or not a valid tag, just ignore it. + } + + if (tagsEqual) + { + rayOutput.HitTaggedObject = true; + rayOutput.HitTagIndex = i; + break; + } + } + } + + + return rayOutput; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..be40d29e519d97bb40fe0d19567f9daa3df53d01 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 71417cdf8dd542e19ec22822b001b884 +timeCreated: 1573089052 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent2D.cs b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent2D.cs new file mode 100644 index 0000000000000000000000000000000000000000..3abee3d46b1f60d7166322d5a614bffa252d48f6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent2D.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A component for 2D Ray Perception. + /// + [AddComponentMenu("ML Agents/Ray Perception Sensor 2D", (int)MenuGroup.Sensors)] + public class RayPerceptionSensorComponent2D : RayPerceptionSensorComponentBase + { + /// + public override RayPerceptionCastType GetCastType() + { + return RayPerceptionCastType.Cast2D; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent2D.cs.meta b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent2D.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6453f25a42ce71d51871fa7f8d9e611d30559510 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent2D.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f67c7e722ba14acd9153bb4488bff6e4 +timeCreated: 1573769662 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent3D.cs b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent3D.cs new file mode 100644 index 0000000000000000000000000000000000000000..34bde4814058500dab7f05a418b35cbe9a518b31 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent3D.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A component for 3D Ray Perception. + /// + [AddComponentMenu("ML Agents/Ray Perception Sensor 3D", (int)MenuGroup.Sensors)] + public class RayPerceptionSensorComponent3D : RayPerceptionSensorComponentBase + { + [HideInInspector, SerializeField, FormerlySerializedAs("startVerticalOffset")] + [Range(-10f, 10f)] + [Tooltip("Ray start is offset up or down by this amount.")] + float m_StartVerticalOffset; + + /// + /// Ray start is offset up or down by this amount. + /// + public float StartVerticalOffset + { + get => m_StartVerticalOffset; + set { m_StartVerticalOffset = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("endVerticalOffset")] + [Range(-10f, 10f)] + [Tooltip("Ray end is offset up or down by this amount.")] + float m_EndVerticalOffset; + + /// + /// Ray end is offset up or down by this amount. + /// + public float EndVerticalOffset + { + get => m_EndVerticalOffset; + set { m_EndVerticalOffset = value; UpdateSensor(); } + } + + /// + public override RayPerceptionCastType GetCastType() + { + return RayPerceptionCastType.Cast3D; + } + + /// + public override float GetStartVerticalOffset() + { + return StartVerticalOffset; + } + + /// + public override float GetEndVerticalOffset() + { + return EndVerticalOffset; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent3D.cs.meta b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent3D.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b2a1d48cd8d6d8c4f69333ad5f3cc1918f7f5fae --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponent3D.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6bb6b867a41448888c1cd4f99643ad71 +timeCreated: 1573764567 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponentBase.cs b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponentBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..35c4fd53203f06021ead4e186ebaa14129ef90e6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponentBase.cs @@ -0,0 +1,398 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A base class to support sensor components for raycast-based sensors. + /// + public abstract class RayPerceptionSensorComponentBase : SensorComponent + { + [HideInInspector, SerializeField, FormerlySerializedAs("sensorName")] + string m_SensorName = "RayPerceptionSensor"; + + /// + /// The name of the Sensor that this component wraps. + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + + [SerializeField, FormerlySerializedAs("detectableTags")] + [Tooltip("List of tags in the scene to compare against.")] + List m_DetectableTags; + + /// + /// List of tags in the scene to compare against. + /// Note that this should not be changed at runtime. + /// + public List DetectableTags + { + get { return m_DetectableTags; } + set { m_DetectableTags = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("raysPerDirection")] + [Range(0, 50)] + [Tooltip("Number of rays to the left and right of center.")] + int m_RaysPerDirection = 3; + + /// + /// Number of rays to the left and right of center. + /// Note that this should not be changed at runtime. + /// + public int RaysPerDirection + { + get { return m_RaysPerDirection; } + // Note: can't change at runtime + set { m_RaysPerDirection = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("maxRayDegrees")] + [Range(0, 180)] + [Tooltip("Cone size for rays. Using 90 degrees will cast rays to the left and right. " + + "Greater than 90 degrees will go backwards.")] + float m_MaxRayDegrees = 70; + + /// + /// Cone size for rays. Using 90 degrees will cast rays to the left and right. + /// Greater than 90 degrees will go backwards. + /// + public float MaxRayDegrees + { + get => m_MaxRayDegrees; + set { m_MaxRayDegrees = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("sphereCastRadius")] + [Range(0f, 10f)] + [Tooltip("Radius of sphere to cast. Set to zero for raycasts.")] + float m_SphereCastRadius = 0.5f; + + /// + /// Radius of sphere to cast. Set to zero for raycasts. + /// + public float SphereCastRadius + { + get => m_SphereCastRadius; + set { m_SphereCastRadius = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("rayLength")] + [Range(1, 1000)] + [Tooltip("Length of the rays to cast.")] + float m_RayLength = 20f; + + /// + /// Length of the rays to cast. + /// + public float RayLength + { + get => m_RayLength; + set { m_RayLength = value; UpdateSensor(); } + } + + // The value of the default layers. + const int k_PhysicsDefaultLayers = -5; + [HideInInspector, SerializeField, FormerlySerializedAs("rayLayerMask")] + [Tooltip("Controls which layers the rays can hit.")] + LayerMask m_RayLayerMask = k_PhysicsDefaultLayers; + + /// + /// Controls which layers the rays can hit. + /// + public LayerMask RayLayerMask + { + get => m_RayLayerMask; + set { m_RayLayerMask = value; UpdateSensor(); } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("observationStacks")] + [Range(1, 50)] + [Tooltip("Number of raycast results that will be stacked before being fed to the neural network.")] + int m_ObservationStacks = 1; + + /// + /// Whether to stack previous observations. Using 1 means no previous observations. + /// Note that changing this after the sensor is created has no effect. + /// + public int ObservationStacks + { + get { return m_ObservationStacks; } + set { m_ObservationStacks = value; } + } + + [HideInInspector, SerializeField] + [Tooltip("Disable to provide the rays in left to right order. Warning: Alternating order will be deprecated, disable it to ensure compatibility with future versions of ML-Agents.")] + public bool m_AlternatingRayOrder = true; + + /// + /// Determines how the rays are ordered. By default the ordering is as follows: middle ray is first; + /// then alternates outward adding rays to the left and right. If set to false, then the rays are + /// ordered from left to right (viewed from above) which is more amenable to processing with + /// conv nets. + /// This property will be deprecated with the next major version update and the left to right ordering + /// will be used thereafter. + /// + public bool AlternatingRayOrder + { + get { return m_AlternatingRayOrder; } + set { m_AlternatingRayOrder = value; } + } + + [HideInInspector, SerializeField] + [Tooltip("Enable to use batched raycasts and the jobs system.")] + public bool m_UseBatchedRaycasts = false; + + /// + /// Determines whether to use batched raycasts and the jobs system. Default = false. + /// + public bool UseBatchedRaycasts + { + get { return m_UseBatchedRaycasts; } + set { m_UseBatchedRaycasts = value; } + } + + + /// + /// Color to code a ray that hits another object. + /// + [HideInInspector] + [SerializeField] + [Header("Debug Gizmos", order = 999)] + internal Color rayHitColor = Color.red; + + /// + /// Color to code a ray that avoid or misses all other objects. + /// + [HideInInspector] + [SerializeField] + internal Color rayMissColor = Color.white; + + [NonSerialized] + RayPerceptionSensor m_RaySensor; + + /// + /// Get the RayPerceptionSensor that was created. + /// + public RayPerceptionSensor RaySensor + { + get => m_RaySensor; + } + + /// + /// Returns the for the associated raycast sensor. + /// + /// + public abstract RayPerceptionCastType GetCastType(); + + /// + /// Returns the amount that the ray start is offset up or down by. + /// + /// + public virtual float GetStartVerticalOffset() + { + return 0f; + } + + /// + /// Returns the amount that the ray end is offset up or down by. + /// + /// + public virtual float GetEndVerticalOffset() + { + return 0f; + } + + /// + /// Returns an initialized raycast sensor. + /// + /// + public override ISensor[] CreateSensors() + { + var rayPerceptionInput = GetRayPerceptionInput(); + + m_RaySensor = new RayPerceptionSensor(m_SensorName, rayPerceptionInput); + + if (ObservationStacks != 1) + { + var stackingSensor = new StackingSensor(m_RaySensor, ObservationStacks); + return new ISensor[] { stackingSensor }; + } + + return new ISensor[] { m_RaySensor }; + } + + /// + /// Returns the specific ray angles given the number of rays per direction and the + /// cone size for the rays. + /// + /// Number of rays to the left and right of center. + /// + /// Cone size for rays. Using 90 degrees will cast rays to the left and right. + /// Greater than 90 degrees will go backwards. + /// Orders the rays starting with the centermost and alternating to the left and right. + /// Should be deprecated with a future major version release (doing so will break existing + /// models). + /// + /// + internal static float[] GetRayAnglesAlternating(int raysPerDirection, float maxRayDegrees) + { + // Example: + // { 90, 90 - delta, 90 + delta, 90 - 2*delta, 90 + 2*delta } + var anglesOut = new float[2 * raysPerDirection + 1]; + var delta = maxRayDegrees / raysPerDirection; + anglesOut[0] = 90f; + for (var i = 0; i < raysPerDirection; i++) + { + anglesOut[2 * i + 1] = 90 - (i + 1) * delta; + anglesOut[2 * i + 2] = 90 + (i + 1) * delta; + } + return anglesOut; + } + + /// + /// Returns the specific ray angles given the number of rays per direction and the + /// cone size for the rays. + /// + /// Number of rays to the left and right of center. + /// + /// Cone size for rays. Using 90 degrees will cast rays to the left and right. + /// Greater than 90 degrees will go backwards. + /// Orders the rays from the left-most to the right-most which makes using a convolution + /// in the model easier. + /// + /// + internal static float[] GetRayAngles(int raysPerDirection, float maxRayDegrees) + { + // Example: + // { 90 - 3*delta, 90 - 2*delta, ..., 90, 90 + delta, ..., 90 + 3*delta } + var anglesOut = new float[2 * raysPerDirection + 1]; + var delta = maxRayDegrees / raysPerDirection; + + for (var i = 0; i < 2 * raysPerDirection + 1; i++) + { + anglesOut[i] = 90 + (i - raysPerDirection) * delta; + } + + return anglesOut; + } + + /// + /// Get the RayPerceptionInput that is used by the . + /// + /// + public RayPerceptionInput GetRayPerceptionInput() + { + var rayAngles = m_AlternatingRayOrder ? + GetRayAnglesAlternating(RaysPerDirection, MaxRayDegrees) : + GetRayAngles(RaysPerDirection, MaxRayDegrees); + + var rayPerceptionInput = new RayPerceptionInput(); + rayPerceptionInput.RayLength = RayLength; + rayPerceptionInput.DetectableTags = DetectableTags; + rayPerceptionInput.Angles = rayAngles; + rayPerceptionInput.StartOffset = GetStartVerticalOffset(); + rayPerceptionInput.EndOffset = GetEndVerticalOffset(); + rayPerceptionInput.CastRadius = SphereCastRadius; + rayPerceptionInput.Transform = transform; + rayPerceptionInput.CastType = GetCastType(); + rayPerceptionInput.LayerMask = RayLayerMask; + rayPerceptionInput.UseBatchedRaycasts = UseBatchedRaycasts; + + return rayPerceptionInput; + } + + internal void UpdateSensor() + { + if (m_RaySensor != null) + { + var rayInput = GetRayPerceptionInput(); + m_RaySensor.SetRayPerceptionInput(rayInput); + } + } + + internal int SensorObservationAge() + { + if (m_RaySensor != null) + { + return Time.frameCount - m_RaySensor.DebugLastFrameCount; + } + + return 0; + } + + void OnDrawGizmosSelected() + { + if (m_RaySensor?.RayPerceptionOutput?.RayOutputs != null) + { + // If we have cached debug info from the sensor, draw that. + // Draw "old" observations in a lighter color. + // Since the agent may not step every frame, this helps de-emphasize "stale" hit information. + var alpha = Mathf.Pow(.5f, SensorObservationAge()); + + foreach (var rayInfo in m_RaySensor.RayPerceptionOutput.RayOutputs) + { + DrawRaycastGizmos(rayInfo, alpha); + } + } + else + { + var rayInput = GetRayPerceptionInput(); + // We don't actually need the tags here, since they don't affect the display of the rays. + // Additionally, the user might be in the middle of typing the tag name when this is called, + // and there's no way to turn off the "Tag ... is not defined" error logs. + // So just don't use any tags here. + rayInput.DetectableTags = null; + if (m_UseBatchedRaycasts && rayInput.CastType == RayPerceptionCastType.Cast3D) + { + // TODO add call to PerceiveBatchedRays() + var rayOutputs = new RayPerceptionOutput.RayOutput[rayInput.Angles.Count]; + RayPerceptionSensor.PerceiveBatchedRays(ref rayOutputs, rayInput); + for (var rayIndex = 0; rayIndex < rayInput.Angles.Count; rayIndex++) + { + DrawRaycastGizmos(rayOutputs[rayIndex]); + } + } + else + { + for (var rayIndex = 0; rayIndex < rayInput.Angles.Count; rayIndex++) + { + var rayOutput = RayPerceptionSensor.PerceiveSingleRay(rayInput, rayIndex); + DrawRaycastGizmos(rayOutput); + } + } + } + } + + /// + /// Draw the debug information from the sensor (if available). + /// + void DrawRaycastGizmos(RayPerceptionOutput.RayOutput rayOutput, float alpha = 1.0f) + { + var startPositionWorld = rayOutput.StartPositionWorld; + var endPositionWorld = rayOutput.EndPositionWorld; + var rayDirection = endPositionWorld - startPositionWorld; + rayDirection *= rayOutput.HitFraction; + + // hit fraction ^2 will shift "far" hits closer to the hit color + var lerpT = rayOutput.HitFraction * rayOutput.HitFraction; + var color = Color.Lerp(rayHitColor, rayMissColor, lerpT); + color.a *= alpha; + Gizmos.color = color; + Gizmos.DrawRay(startPositionWorld, rayDirection); + + // Draw the hit point as a sphere. If using rays to cast (0 radius), use a small sphere. + if (rayOutput.HasHit) + { + var hitRadius = Mathf.Max(rayOutput.ScaledCastRadius, .05f); + Gizmos.DrawWireSphere(startPositionWorld + rayDirection, hitRadius); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponentBase.cs.meta b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponentBase.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb886554053bf8fc72698e1d686286b5c7e33871 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RayPerceptionSensorComponentBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 45243967d8c0419b953c02bccb7c2768 +timeCreated: 1573087062 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb7288f7178a8f35ef31ae11979f24520cef13ad --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 08ece3d7e9bb94089a9d59c6f269ab0a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/BoolReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/BoolReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..606656ecb3976f14252d9917c42ce8658afb7c3d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/BoolReflectionSensor.cs @@ -0,0 +1,19 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps a boolean field or property of an object, and returns + /// that as an observation. + /// + internal class BoolReflectionSensor : ReflectionSensorBase + { + public BoolReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 1) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var boolVal = (System.Boolean)GetReflectedValue(); + writer[0] = boolVal ? 1.0f : 0.0f; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/BoolReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/BoolReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5cac420f1160c36ccd0acb1651360aa6be3466a0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/BoolReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be795c90750a6420d93f569b69ddc1ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/EnumReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/EnumReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..2d92df0369e3569d25c17685651eaf1b2b112242 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/EnumReflectionSensor.cs @@ -0,0 +1,61 @@ +using System; + +namespace Unity.MLAgents.Sensors.Reflection +{ + internal class EnumReflectionSensor : ReflectionSensorBase + { + Array m_Values; + bool m_IsFlags; + + internal EnumReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, GetEnumObservationSize(reflectionSensorInfo.GetMemberType())) + { + var memberType = reflectionSensorInfo.GetMemberType(); + m_Values = Enum.GetValues(memberType); + m_IsFlags = memberType.IsDefined(typeof(FlagsAttribute), false); + } + + internal override void WriteReflectedField(ObservationWriter writer) + { + // Write the enum value as a one-hot encoding. + // Note that unknown enum values will record all 0's. + // Flags will get treated as a sequence of bools. + var enumValue = (Enum)GetReflectedValue(); + + int i = 0; + foreach (var val in m_Values) + { + if (m_IsFlags) + { + if (enumValue.HasFlag((Enum)val)) + { + writer[i] = 1.0f; + } + else + { + writer[i] = 0.0f; + } + } + else + { + if (val.Equals(enumValue)) + { + writer[i] = 1.0f; + } + else + { + writer[i] = 0.0f; + } + } + i++; + } + } + + internal static int GetEnumObservationSize(Type t) + { + var values = Enum.GetValues(t); + // Account for all enum values + return values.Length; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/EnumReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/EnumReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d42cce5521050af2dab0678985aff59be92ce5f0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/EnumReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d86e42cede474ec28dc3b1ef1c7a63c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/FloatReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/FloatReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..a488a9ed5c280a6c5a47c8af9272c5800b77ce06 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/FloatReflectionSensor.cs @@ -0,0 +1,19 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps a float field or property of an object, and returns + /// that as an observation. + /// + internal class FloatReflectionSensor : ReflectionSensorBase + { + public FloatReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 1) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var floatVal = (System.Single)GetReflectedValue(); + writer[0] = floatVal; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/FloatReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/FloatReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2de8b18c7c983ba42f393bbc66b0a9437f5281b0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/FloatReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51ed837d5b7cd44349287ac8066120fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/IntReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/IntReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..6c1b10f45a4ae94ffdb4ce9b6dbd7881eb92f63f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/IntReflectionSensor.cs @@ -0,0 +1,19 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps an integer field or property of an object, and returns + /// that as an observation. + /// + internal class IntReflectionSensor : ReflectionSensorBase + { + public IntReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 1) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var intVal = (System.Int32)GetReflectedValue(); + writer[0] = intVal; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/IntReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/IntReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a07726937f76c77df0dfdba7d1816853bc028466 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/IntReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cae4c843cc074d11a549aaa3904c898 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/ObservableAttribute.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/ObservableAttribute.cs new file mode 100644 index 0000000000000000000000000000000000000000..a88528c87343dcf0cefc8cdd025eeb454c5dcd38 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/ObservableAttribute.cs @@ -0,0 +1,285 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Specify that a field or property should be used to generate observations for an Agent. + /// For each field or property that uses ObservableAttribute, a corresponding + /// will be created during Agent initialization, and this + /// sensor will read the values during training and inference. + /// + /// + /// ObservableAttribute is intended to make initial setup of an Agent easier. Because it + /// uses reflection to read the values of fields and properties at runtime, this may + /// be much slower than reading the values directly. If the performance of + /// ObservableAttribute is an issue, you can get the same functionality by overriding + /// or creating a custom + /// implementation to read the values without reflection. + /// + /// Note that you do not need to adjust the VectorObservationSize in + /// when adding ObservableAttribute + /// to fields or properties. + /// + /// + /// This sample class will produce two observations, one for the m_Health field, and one + /// for the HealthPercent property. + /// + /// using Unity.MLAgents; + /// using Unity.MLAgents.Sensors.Reflection; + /// + /// public class MyAgent : Agent + /// { + /// [Observable] + /// int m_Health; + /// + /// [Observable] + /// float HealthPercent + /// { + /// get => return 100.0f * m_Health / float(m_MaxHealth); + /// } + /// } + /// + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] + public class ObservableAttribute : Attribute + { + string m_Name; + int m_NumStackedObservations; + + /// + /// Default binding flags used for reflection of members and properties. + /// + const BindingFlags k_BindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; + + /// + /// Supported types and their observation sizes and corresponding sensor type. + /// + static Dictionary s_TypeToSensorInfo = new Dictionary() + { + {typeof(int), (1, typeof(IntReflectionSensor))}, + {typeof(bool), (1, typeof(BoolReflectionSensor))}, + {typeof(float), (1, typeof(FloatReflectionSensor))}, + + {typeof(Vector2), (2, typeof(Vector2ReflectionSensor))}, + {typeof(Vector3), (3, typeof(Vector3ReflectionSensor))}, + {typeof(Vector4), (4, typeof(Vector4ReflectionSensor))}, + {typeof(Quaternion), (4, typeof(QuaternionReflectionSensor))}, + }; + + /// + /// ObservableAttribute constructor. + /// + /// Optional override for the sensor name. Note that all sensors for an Agent + /// must have a unique name. + /// Number of frames to concatenate observations from. + public ObservableAttribute(string name = null, int numStackedObservations = 1) + { + m_Name = name; + m_NumStackedObservations = numStackedObservations; + } + + /// + /// Returns a FieldInfo for all fields that have an ObservableAttribute + /// + /// Object being reflected + /// Whether to exclude inherited properties or not. + /// + static IEnumerable<(FieldInfo, ObservableAttribute)> GetObservableFields(object o, bool excludeInherited) + { + // TODO cache these (and properties) by type, so that we only have to reflect once. + var bindingFlags = k_BindingFlags | (excludeInherited ? BindingFlags.DeclaredOnly : 0); + var fields = o.GetType().GetFields(bindingFlags); + foreach (var field in fields) + { + var attr = (ObservableAttribute)GetCustomAttribute(field, typeof(ObservableAttribute)); + if (attr != null) + { + yield return (field, attr); + } + } + } + + /// + /// Returns a PropertyInfo for all fields that have an ObservableAttribute + /// + /// Object being reflected + /// Whether to exclude inherited properties or not. + /// + static IEnumerable<(PropertyInfo, ObservableAttribute)> GetObservableProperties(object o, bool excludeInherited) + { + var bindingFlags = k_BindingFlags | (excludeInherited ? BindingFlags.DeclaredOnly : 0); + var properties = o.GetType().GetProperties(bindingFlags); + foreach (var prop in properties) + { + var attr = (ObservableAttribute)GetCustomAttribute(prop, typeof(ObservableAttribute)); + if (attr != null) + { + yield return (prop, attr); + } + } + } + + /// + /// Creates sensors for each field and property with ObservableAttribute. + /// + /// Object being reflected + /// Whether to exclude inherited properties or not. + /// + internal static List CreateObservableSensors(object o, bool excludeInherited) + { + var sensorsOut = new List(); + foreach (var (field, attr) in GetObservableFields(o, excludeInherited)) + { + var sensor = CreateReflectionSensor(o, field, null, attr); + if (sensor != null) + { + sensorsOut.Add(sensor); + } + } + + foreach (var (prop, attr) in GetObservableProperties(o, excludeInherited)) + { + if (!prop.CanRead) + { + // Skip unreadable properties. + continue; + } + var sensor = CreateReflectionSensor(o, null, prop, attr); + if (sensor != null) + { + sensorsOut.Add(sensor); + } + } + + return sensorsOut; + } + + /// + /// Create the ISensor for either the field or property on the provided object. + /// If the data type is unsupported, or the property is write-only, returns null. + /// + /// + /// + /// + /// + /// + /// + static ISensor CreateReflectionSensor(object o, FieldInfo fieldInfo, PropertyInfo propertyInfo, ObservableAttribute observableAttribute) + { + string memberName; + string declaringTypeName; + Type memberType; + if (fieldInfo != null) + { + declaringTypeName = fieldInfo.DeclaringType.Name; + memberName = fieldInfo.Name; + memberType = fieldInfo.FieldType; + } + else + { + declaringTypeName = propertyInfo.DeclaringType.Name; + memberName = propertyInfo.Name; + memberType = propertyInfo.PropertyType; + } + + if (!s_TypeToSensorInfo.ContainsKey(memberType) && !memberType.IsEnum) + { + // For unsupported types, return null and we'll filter them out later. + return null; + } + + string sensorName; + if (string.IsNullOrEmpty(observableAttribute.m_Name)) + { + sensorName = $"ObservableAttribute:{declaringTypeName}.{memberName}"; + } + else + { + sensorName = observableAttribute.m_Name; + } + + var reflectionSensorInfo = new ReflectionSensorInfo + { + Object = o, + FieldInfo = fieldInfo, + PropertyInfo = propertyInfo, + ObservableAttribute = observableAttribute, + SensorName = sensorName + }; + + ISensor sensor = null; + if (memberType.IsEnum) + { + sensor = new EnumReflectionSensor(reflectionSensorInfo); + } + else + { + var (_, sensorType) = s_TypeToSensorInfo[memberType]; + sensor = (ISensor)Activator.CreateInstance(sensorType, reflectionSensorInfo); + } + + // Wrap the base sensor in a StackingSensor if we're using stacking. + if (observableAttribute.m_NumStackedObservations > 1) + { + return new StackingSensor(sensor, observableAttribute.m_NumStackedObservations); + } + + return sensor; + } + + /// + /// Gets the sum of the observation sizes of the Observable fields and properties on an object. + /// Also appends errors to the errorsOut array. + /// + /// + /// + /// + /// + internal static int GetTotalObservationSize(object o, bool excludeInherited, List errorsOut) + { + int sizeOut = 0; + foreach (var (field, attr) in GetObservableFields(o, excludeInherited)) + { + if (s_TypeToSensorInfo.ContainsKey(field.FieldType)) + { + var (obsSize, _) = s_TypeToSensorInfo[field.FieldType]; + sizeOut += obsSize * attr.m_NumStackedObservations; + } + else if (field.FieldType.IsEnum) + { + sizeOut += EnumReflectionSensor.GetEnumObservationSize(field.FieldType); + } + else + { + errorsOut.Add($"Unsupported Observable type {field.FieldType.Name} on field {field.Name}"); + } + } + + foreach (var (prop, attr) in GetObservableProperties(o, excludeInherited)) + { + if (!prop.CanRead) + { + errorsOut.Add($"Observable property {prop.Name} is write-only."); + } + else if (s_TypeToSensorInfo.ContainsKey(prop.PropertyType)) + { + var (obsSize, _) = s_TypeToSensorInfo[prop.PropertyType]; + sizeOut += obsSize * attr.m_NumStackedObservations; + } + else if (prop.PropertyType.IsEnum) + { + sizeOut += EnumReflectionSensor.GetEnumObservationSize(prop.PropertyType); + } + else + { + errorsOut.Add($"Unsupported Observable type {prop.PropertyType.Name} on property {prop.Name}"); + } + } + + return sizeOut; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/ObservableAttribute.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/ObservableAttribute.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..41659283dac1a5073cf4889845e1f926310cc8da --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/ObservableAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a75086dc66a594baea6b8b2935f5dacf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/QuaternionReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/QuaternionReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..5cd92ee68fecde0e84ab28964c7b129143cec2fa --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/QuaternionReflectionSensor.cs @@ -0,0 +1,19 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps a quaternion field or property of an object, and returns + /// that as an observation. + /// + internal class QuaternionReflectionSensor : ReflectionSensorBase + { + public QuaternionReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 4) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var quatVal = (UnityEngine.Quaternion)GetReflectedValue(); + writer.Add(quatVal); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/QuaternionReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/QuaternionReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f3970e6b51331ac9047eeab752e4a3e5f68ab2fb --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/QuaternionReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d38241d74074d459bb4590f7f5d16c80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/ReflectionSensorBase.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/ReflectionSensorBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..9a0219146ec69ced574bebc28dd212582c55faa4 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/ReflectionSensorBase.cs @@ -0,0 +1,111 @@ +using System; +using System.Reflection; + +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Construction info for a ReflectionSensorBase. + /// + internal struct ReflectionSensorInfo + { + public object Object; + + public FieldInfo FieldInfo; + public PropertyInfo PropertyInfo; + public ObservableAttribute ObservableAttribute; + public string SensorName; + + public Type GetMemberType() + { + return FieldInfo != null ? FieldInfo.FieldType : PropertyInfo.PropertyType; + } + } + + /// + /// Abstract base class for reflection-based sensors. + /// + internal abstract class ReflectionSensorBase : ISensor, IBuiltInSensor + { + protected object m_Object; + + // Exactly one of m_FieldInfo and m_PropertyInfo should be non-null. + protected FieldInfo m_FieldInfo; + protected PropertyInfo m_PropertyInfo; + + // Not currently used, but might want later. + protected ObservableAttribute m_ObservableAttribute; + + // Cached sensor names and shapes. + string m_SensorName; + ObservationSpec m_ObservationSpec; + int m_NumFloats; + + public ReflectionSensorBase(ReflectionSensorInfo reflectionSensorInfo, int size) + { + m_Object = reflectionSensorInfo.Object; + m_FieldInfo = reflectionSensorInfo.FieldInfo; + m_PropertyInfo = reflectionSensorInfo.PropertyInfo; + m_ObservableAttribute = reflectionSensorInfo.ObservableAttribute; + m_SensorName = reflectionSensorInfo.SensorName; + m_ObservationSpec = ObservationSpec.Vector(size); + m_NumFloats = size; + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public int Write(ObservationWriter writer) + { + WriteReflectedField(writer); + return m_NumFloats; + } + + internal abstract void WriteReflectedField(ObservationWriter writer); + + /// + /// Get either the reflected field, or return the reflected property. + /// This should be used by implementations in their WriteReflectedField() method. + /// + /// + protected object GetReflectedValue() + { + return m_FieldInfo != null ? + m_FieldInfo.GetValue(m_Object) : + m_PropertyInfo.GetMethod.Invoke(m_Object, null); + } + + /// + public byte[] GetCompressedObservation() + { + return null; + } + + /// + public void Update() { } + + /// + public void Reset() { } + + /// + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + + /// + public string GetName() + { + return m_SensorName; + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.ReflectionSensor; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/ReflectionSensorBase.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/ReflectionSensorBase.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cef19bb5986347c9feedaa9915894d09948a2942 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/ReflectionSensorBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b68d855fb94a45fbbeb0dbe968a35f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector2ReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector2ReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..85c6dea8ef825075b817bdadfa4556e292ceec23 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector2ReflectionSensor.cs @@ -0,0 +1,20 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps a Vector2 field or property of an object, and returns + /// that as an observation. + /// + internal class Vector2ReflectionSensor : ReflectionSensorBase + { + public Vector2ReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 2) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var vecVal = (UnityEngine.Vector2)GetReflectedValue(); + writer[0] = vecVal.x; + writer[1] = vecVal.y; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector2ReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector2ReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2b78c25ffec864f9d3e2dcb7f905da3633b3604e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector2ReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da06ff33f6f2d409cbf240cffa2ba0be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector3ReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector3ReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..8fa28b73ee57e3334110132367d87f5cf559d091 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector3ReflectionSensor.cs @@ -0,0 +1,19 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps a Vector3 field or property of an object, and returns + /// that as an observation. + /// + internal class Vector3ReflectionSensor : ReflectionSensorBase + { + public Vector3ReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 3) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var vecVal = (UnityEngine.Vector3)GetReflectedValue(); + writer.Add(vecVal); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector3ReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector3ReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..771b690b07529ac6d55a17c4cf327ce1239f46fe --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector3ReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e756976ec2a0943cfbc0f97a6550a85b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector4ReflectionSensor.cs b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector4ReflectionSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..76b5c39c2767d9538838f591463255d5b1cfa366 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector4ReflectionSensor.cs @@ -0,0 +1,19 @@ +namespace Unity.MLAgents.Sensors.Reflection +{ + /// + /// Sensor that wraps a Vector4 field or property of an object, and returns + /// that as an observation. + /// + internal class Vector4ReflectionSensor : ReflectionSensorBase + { + public Vector4ReflectionSensor(ReflectionSensorInfo reflectionSensorInfo) + : base(reflectionSensorInfo, 4) + { } + + internal override void WriteReflectedField(ObservationWriter writer) + { + var vecVal = (UnityEngine.Vector4)GetReflectedValue(); + writer.Add(vecVal); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector4ReflectionSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector4ReflectionSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3d938af6c8e0427f33333605e8c1f6996641054e --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/Reflection/Vector4ReflectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01d93aaa1b42b47b8960d303d7c498d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensor.cs b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..678e7222209b54c7a199ae1432a7bbf3e592c5f1 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensor.cs @@ -0,0 +1,130 @@ +using System; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Sensor class that wraps a [RenderTexture](https://docs.unity3d.com/ScriptReference/RenderTexture.html) instance. + /// + public class RenderTextureSensor : ISensor, IBuiltInSensor, IDisposable + { + RenderTexture m_RenderTexture; + bool m_Grayscale; + string m_Name; + private ObservationSpec m_ObservationSpec; + SensorCompressionType m_CompressionType; + Texture2D m_Texture; + + /// + /// The compression type used by the sensor. + /// + public SensorCompressionType CompressionType + { + get { return m_CompressionType; } + set { m_CompressionType = value; } + } + + + /// + /// Initializes the sensor. + /// + /// The [RenderTexture](https://docs.unity3d.com/ScriptReference/RenderTexture.html) + /// instance to wrap. + /// Whether to convert it to grayscale or not. + /// Name of the sensor. + /// Compression method for the render texture. + /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html + public RenderTextureSensor( + RenderTexture renderTexture, bool grayscale, string name, SensorCompressionType compressionType) + { + m_RenderTexture = renderTexture; + var width = renderTexture != null ? renderTexture.width : 0; + var height = renderTexture != null ? renderTexture.height : 0; + m_Grayscale = grayscale; + m_Name = name; + m_ObservationSpec = ObservationSpec.Visual(height, width, grayscale ? 1 : 3); + m_CompressionType = compressionType; + m_Texture = new Texture2D(width, height, TextureFormat.RGB24, false); + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public byte[] GetCompressedObservation() + { + using (TimerStack.Instance.Scoped("RenderTextureSensor.GetCompressedObservation")) + { + ObservationToTexture(m_RenderTexture, m_Texture); + // TODO support more types here, e.g. JPG + var compressed = m_Texture.EncodeToPNG(); + return compressed; + } + } + + /// + public int Write(ObservationWriter writer) + { + using (TimerStack.Instance.Scoped("RenderTextureSensor.Write")) + { + ObservationToTexture(m_RenderTexture, m_Texture); + var numWritten = writer.WriteTexture(m_Texture, m_Grayscale); + return numWritten; + } + } + + /// + public void Update() { } + + /// + public void Reset() { } + + /// + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(m_CompressionType); + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.RenderTextureSensor; + } + + /// + /// Converts a RenderTexture to a 2D texture. + /// + /// RenderTexture. + /// Texture2D to render to. + public static void ObservationToTexture(RenderTexture obsTexture, Texture2D texture2D) + { + var prevActiveRt = RenderTexture.active; + RenderTexture.active = obsTexture; + + texture2D.ReadPixels(new Rect(0, 0, texture2D.width, texture2D.height), 0, 0); + texture2D.Apply(); + RenderTexture.active = prevActiveRt; + } + + /// + /// Clean up the owned Texture2D. + /// + public void Dispose() + { + if (!ReferenceEquals(null, m_Texture)) + { + Utilities.DestroyTexture(m_Texture); + m_Texture = null; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..28a1dff7674843fc3f5b133f4fe211fd12e97985 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 958f1f6bb9058405cae3c03266ad9899 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensorComponent.cs b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e58617dd3be6a05ed1b41d903bdc241154692ec --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensorComponent.cs @@ -0,0 +1,120 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Component that wraps a . + /// + [AddComponentMenu("ML Agents/Render Texture Sensor", (int)MenuGroup.Sensors)] + public class RenderTextureSensorComponent : SensorComponent, IDisposable + { + RenderTextureSensor m_Sensor; + + /// + /// The [RenderTexture](https://docs.unity3d.com/ScriptReference/RenderTexture.html) instance + /// that the associated wraps. + /// + [HideInInspector, SerializeField, FormerlySerializedAs("renderTexture")] + RenderTexture m_RenderTexture; + + /// + /// Stores the [RenderTexture](https://docs.unity3d.com/ScriptReference/RenderTexture.html) + /// associated with this sensor. + /// + public RenderTexture RenderTexture + { + get { return m_RenderTexture; } + set { m_RenderTexture = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("sensorName")] + string m_SensorName = "RenderTextureSensor"; + + /// + /// Name of the generated . + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + + [HideInInspector, SerializeField, FormerlySerializedAs("grayscale")] + bool m_Grayscale; + + /// + /// Whether the RenderTexture observation should be converted to grayscale or not. + /// Note that changing this after the sensor is created has no effect. + /// + public bool Grayscale + { + get { return m_Grayscale; } + set { m_Grayscale = value; } + } + + [HideInInspector, SerializeField] + [Range(1, 50)] + [Tooltip("Number of frames that will be stacked before being fed to the neural network.")] + int m_ObservationStacks = 1; + + [HideInInspector, SerializeField, FormerlySerializedAs("compression")] + SensorCompressionType m_Compression = SensorCompressionType.PNG; + + /// + /// Compression type for the render texture observation. + /// + public SensorCompressionType CompressionType + { + get { return m_Compression; } + set { m_Compression = value; UpdateSensor(); } + } + + /// + /// Whether to stack previous observations. Using 1 means no previous observations. + /// Note that changing this after the sensor is created has no effect. + /// + public int ObservationStacks + { + get { return m_ObservationStacks; } + set { m_ObservationStacks = value; } + } + + /// + public override ISensor[] CreateSensors() + { + Dispose(); + m_Sensor = new RenderTextureSensor(RenderTexture, Grayscale, SensorName, m_Compression); + if (ObservationStacks != 1) + { + return new ISensor[] { new StackingSensor(m_Sensor, ObservationStacks) }; + } + return new ISensor[] { m_Sensor }; + } + + /// + /// Update fields that are safe to change on the Sensor at runtime. + /// + internal void UpdateSensor() + { + if (m_Sensor != null) + { + m_Sensor.CompressionType = m_Compression; + } + } + + /// + /// Clean up the sensor created by CreateSensors(). + /// + public void Dispose() + { + if (!ReferenceEquals(null, m_Sensor)) + { + m_Sensor.Dispose(); + m_Sensor = null; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..542ca3e278b0ce1c7ab2c3ee9fa0bd2b7eafa8df --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/RenderTextureSensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 132e1194facb64429b007ea1edf562d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/SensorComponent.cs b/com.unity.ml-agents/Runtime/Sensors/SensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..4ddcaabb74a84057600aa110871555548f34375f --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/SensorComponent.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Editor components for creating Sensors. Generally an ISensor implementation should have a + /// corresponding SensorComponent to create it. + /// + public abstract class SensorComponent : MonoBehaviour + { + /// + /// Create the ISensors. This is called by the Agent when it is initialized. + /// + /// Created ISensor objects. + public abstract ISensor[] CreateSensors(); + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/SensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Sensors/SensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5576281e12aadd57fbf3b977e76006b86f56460d --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/SensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f1dad589959a4b598d09e54f61fbe02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/SensorShapeValidator.cs b/com.unity.ml-agents/Runtime/Sensors/SensorShapeValidator.cs new file mode 100644 index 0000000000000000000000000000000000000000..2d80d75234a0d2fadf8b163ee7094881b8505dbc --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/SensorShapeValidator.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + public class SensorShapeValidator + { + List m_SensorShapes; + + /// + /// Check that the List Sensors are the same shape as the previous ones. + /// If this is the first List of Sensors being checked, its Sensor sizes will be saved. + /// + public void ValidateSensors(List sensors) + { + if (m_SensorShapes == null) + { + m_SensorShapes = new List(sensors.Count); + // First agent, save the sensor sizes + foreach (var sensor in sensors) + { + m_SensorShapes.Add(sensor.GetObservationSpec()); + } + } + else + { + // Check for compatibility with the other Agents' Sensors + if (m_SensorShapes.Count != sensors.Count) + { + Debug.AssertFormat( + m_SensorShapes.Count == sensors.Count, + "Number of Sensors must match. {0} != {1}", + m_SensorShapes.Count, + sensors.Count + ); + } + for (var i = 0; i < Mathf.Min(m_SensorShapes.Count, sensors.Count); i++) + { + var cachedSpec = m_SensorShapes[i]; + var sensorSpec = sensors[i].GetObservationSpec(); + if (cachedSpec.Shape != sensorSpec.Shape) + { + Debug.AssertFormat( + cachedSpec.Shape == sensorSpec.Shape, + "Sensor shapes must match. {0} != {1}", + cachedSpec.Shape, + sensorSpec.Shape + ); + } + } + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/SensorShapeValidator.cs.meta b/com.unity.ml-agents/Runtime/Sensors/SensorShapeValidator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6ce44665cc61ac44dd1bf53758f0f3058e220852 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/SensorShapeValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7b5a4560ee254be497321527f92c174 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Sensors/StackingSensor.cs b/com.unity.ml-agents/Runtime/Sensors/StackingSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..710c58a821ce3a9f6849bd947017b10d4e0bd2eb --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/StackingSensor.cs @@ -0,0 +1,300 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using UnityEngine; +using Unity.Barracuda; + +namespace Unity.MLAgents.Sensors +{ + /// + /// Sensor that wraps around another Sensor to provide temporal stacking. + /// Conceptually, consecutive observations are stored left-to-right, which is how they're output + /// For example, 4 stacked sets of observations would be output like + /// | t = now - 3 | t = now -3 | t = now - 2 | t = now | + /// Internally, a circular buffer of arrays is used. The m_CurrentIndex represents the most recent observation. + /// Currently, observations are stacked on the last dimension. + /// + public class StackingSensor : ISensor, IBuiltInSensor + { + /// + /// The wrapped sensor. + /// + ISensor m_WrappedSensor; + + /// + /// Number of stacks to save + /// + int m_NumStackedObservations; + int m_UnstackedObservationSize; + + string m_Name; + private ObservationSpec m_ObservationSpec; + private ObservationSpec m_WrappedSpec; + + /// + /// Buffer of previous observations + /// + float[][] m_StackedObservations; + + byte[][] m_StackedCompressedObservations; + + int m_CurrentIndex; + ObservationWriter m_LocalWriter = new ObservationWriter(); + + byte[] m_EmptyCompressedObservation; + int[] m_CompressionMapping; + TensorShape m_tensorShape; + + /// + /// Initializes the sensor. + /// + /// The wrapped sensor. + /// Number of stacked observations to keep. + public StackingSensor(ISensor wrapped, int numStackedObservations) + { + // TODO ensure numStackedObservations > 1 + m_WrappedSensor = wrapped; + m_NumStackedObservations = numStackedObservations; + + m_Name = $"StackingSensor_size{numStackedObservations}_{wrapped.GetName()}"; + + m_WrappedSpec = wrapped.GetObservationSpec(); + + m_UnstackedObservationSize = wrapped.ObservationSize(); + + // Set up the cached observation spec for the StackingSensor + var newShape = m_WrappedSpec.Shape; + // TODO support arbitrary stacking dimension + newShape[newShape.Length - 1] *= numStackedObservations; + m_ObservationSpec = new ObservationSpec( + newShape, m_WrappedSpec.DimensionProperties, m_WrappedSpec.ObservationType + ); + + // Initialize uncompressed buffer anyway in case python trainer does not + // support the compression mapping and has to fall back to uncompressed obs. + m_StackedObservations = new float[numStackedObservations][]; + for (var i = 0; i < numStackedObservations; i++) + { + m_StackedObservations[i] = new float[m_UnstackedObservationSize]; + } + + if (m_WrappedSensor.GetCompressionSpec().SensorCompressionType != SensorCompressionType.None) + { + m_StackedCompressedObservations = new byte[numStackedObservations][]; + m_EmptyCompressedObservation = CreateEmptyPNG(); + for (var i = 0; i < numStackedObservations; i++) + { + m_StackedCompressedObservations[i] = m_EmptyCompressedObservation; + } + m_CompressionMapping = ConstructStackedCompressedChannelMapping(wrapped); + } + + if (m_WrappedSpec.Rank != 1) + { + var wrappedShape = m_WrappedSpec.Shape; + m_tensorShape = new TensorShape(0, wrappedShape[0], wrappedShape[1], wrappedShape[2]); + } + } + + /// + public int Write(ObservationWriter writer) + { + // First, call the wrapped sensor's write method. Make sure to use our own writer, not the passed one. + m_LocalWriter.SetTarget(m_StackedObservations[m_CurrentIndex], m_WrappedSpec, 0); + m_WrappedSensor.Write(m_LocalWriter); + + // Now write the saved observations (oldest first) + var numWritten = 0; + if (m_WrappedSpec.Rank == 1) + { + for (var i = 0; i < m_NumStackedObservations; i++) + { + var obsIndex = (m_CurrentIndex + 1 + i) % m_NumStackedObservations; + writer.AddList(m_StackedObservations[obsIndex], numWritten); + numWritten += m_UnstackedObservationSize; + } + } + else + { + for (var i = 0; i < m_NumStackedObservations; i++) + { + var obsIndex = (m_CurrentIndex + 1 + i) % m_NumStackedObservations; + for (var h = 0; h < m_WrappedSpec.Shape[0]; h++) + { + for (var w = 0; w < m_WrappedSpec.Shape[1]; w++) + { + for (var c = 0; c < m_WrappedSpec.Shape[2]; c++) + { + writer[h, w, i * m_WrappedSpec.Shape[2] + c] = m_StackedObservations[obsIndex][m_tensorShape.Index(0, h, w, c)]; + } + } + } + } + numWritten = m_WrappedSpec.Shape[0] * m_WrappedSpec.Shape[1] * m_WrappedSpec.Shape[2] * m_NumStackedObservations; + } + + return numWritten; + } + + /// + /// Updates the index of the "current" buffer. + /// + public void Update() + { + m_WrappedSensor.Update(); + m_CurrentIndex = (m_CurrentIndex + 1) % m_NumStackedObservations; + } + + /// + public void Reset() + { + m_WrappedSensor.Reset(); + // Zero out the buffer. + for (var i = 0; i < m_NumStackedObservations; i++) + { + Array.Clear(m_StackedObservations[i], 0, m_StackedObservations[i].Length); + } + if (m_WrappedSensor.GetCompressionSpec().SensorCompressionType != SensorCompressionType.None) + { + for (var i = 0; i < m_NumStackedObservations; i++) + { + m_StackedCompressedObservations[i] = m_EmptyCompressedObservation; + } + } + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public byte[] GetCompressedObservation() + { + var compressed = m_WrappedSensor.GetCompressedObservation(); + m_StackedCompressedObservations[m_CurrentIndex] = compressed; + + int bytesLength = 0; + foreach (byte[] compressedObs in m_StackedCompressedObservations) + { + bytesLength += compressedObs.Length; + } + + byte[] outputBytes = new byte[bytesLength]; + int offset = 0; + for (var i = 0; i < m_NumStackedObservations; i++) + { + var obsIndex = (m_CurrentIndex + 1 + i) % m_NumStackedObservations; + Buffer.BlockCopy(m_StackedCompressedObservations[obsIndex], + 0, outputBytes, offset, m_StackedCompressedObservations[obsIndex].Length); + offset += m_StackedCompressedObservations[obsIndex].Length; + } + + return outputBytes; + } + + /// + public CompressionSpec GetCompressionSpec() + { + var wrappedSpec = m_WrappedSensor.GetCompressionSpec(); + return new CompressionSpec(wrappedSpec.SensorCompressionType, m_CompressionMapping); + } + + /// + /// Create Empty PNG for initializing the buffer for stacking. + /// + internal byte[] CreateEmptyPNG() + { + var shape = m_WrappedSpec.Shape; + int height = shape[0]; + int width = shape[1]; + var texture2D = new Texture2D(width, height, TextureFormat.RGB24, false); + Color32[] resetColorArray = texture2D.GetPixels32(); + Color32 black = new Color32(0, 0, 0, 0); + for (int i = 0; i < resetColorArray.Length; i++) + { + resetColorArray[i] = black; + } + texture2D.SetPixels32(resetColorArray); + texture2D.Apply(); + return texture2D.EncodeToPNG(); + } + + /// + /// Construct stacked CompressedChannelMapping. + /// + internal int[] ConstructStackedCompressedChannelMapping(ISensor wrappedSenesor) + { + // Get CompressedChannelMapping of the wrapped sensor. If the + // wrapped sensor doesn't have one, use default mapping. + // Default mapping: {0, 0, 0} for grayscale, identity mapping {1, 2, ..., n} otherwise. + int[] wrappedMapping = null; + int wrappedNumChannel = m_WrappedSpec.Shape[2]; + + wrappedMapping = wrappedSenesor.GetCompressionSpec().CompressedChannelMapping; + if (wrappedMapping == null) + { + if (wrappedNumChannel == 1) + { + wrappedMapping = new[] { 0, 0, 0 }; + } + else + { + wrappedMapping = Enumerable.Range(0, wrappedNumChannel).ToArray(); + } + } + + // Construct stacked mapping using the mapping of wrapped sensor. + // First pad the wrapped mapping to multiple of 3, then repeat + // and add offset to each copy to form the stacked mapping. + int paddedMapLength = (wrappedMapping.Length + 2) / 3 * 3; + var compressionMapping = new int[paddedMapLength * m_NumStackedObservations]; + for (var i = 0; i < m_NumStackedObservations; i++) + { + var offset = wrappedNumChannel * i; + for (var j = 0; j < paddedMapLength; j++) + { + if (j < wrappedMapping.Length) + { + compressionMapping[j + paddedMapLength * i] = wrappedMapping[j] >= 0 ? wrappedMapping[j] + offset : -1; + } + else + { + compressionMapping[j + paddedMapLength * i] = -1; + } + } + } + return compressionMapping; + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + IBuiltInSensor wrappedBuiltInSensor = m_WrappedSensor as IBuiltInSensor; + return wrappedBuiltInSensor?.GetBuiltInSensorType() ?? BuiltInSensorType.Unknown; + } + + /// + /// Returns the stacked observations as a read-only collection. + /// + /// The stacked observations as a read-only collection. + internal ReadOnlyCollection GetStackedObservations() + { + List observations = new List(); + for (var i = 0; i < m_NumStackedObservations; i++) + { + var obsIndex = (m_CurrentIndex + 1 + i) % m_NumStackedObservations; + observations.AddRange(m_StackedObservations[obsIndex].ToList()); + } + return observations.AsReadOnly(); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/StackingSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/StackingSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..52dbbcc9bafbe8d45450df859fe2f9253810d6ac --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/StackingSensor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8b7a6e88d47d4438ad67e1862566462c +timeCreated: 1572299581 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/VectorSensor.cs b/com.unity.ml-agents/Runtime/Sensors/VectorSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..d4bd0507c498f541a72cdf606637c803439e92d3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/VectorSensor.cs @@ -0,0 +1,218 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A sensor implementation for vector observations. + /// + public class VectorSensor : ISensor, IBuiltInSensor + { + // TODO use float[] instead + // TODO allow setting float[] + List m_Observations; + ObservationSpec m_ObservationSpec; + string m_Name; + + /// + /// Initializes the sensor. + /// + /// Number of vector observations. + /// Name of the sensor. + /// + public VectorSensor(int observationSize, string name = null, ObservationType observationType = ObservationType.Default) + { + if (string.IsNullOrEmpty(name)) + { + name = $"VectorSensor_size{observationSize}"; + if (observationType != ObservationType.Default) + { + name += $"_{observationType.ToString()}"; + } + } + + m_Observations = new List(observationSize); + m_Name = name; + m_ObservationSpec = ObservationSpec.Vector(observationSize, observationType); + } + + /// + public int Write(ObservationWriter writer) + { + var expectedObservations = m_ObservationSpec.Shape[0]; + if (m_Observations.Count > expectedObservations) + { + // Too many observations, truncate + Debug.LogWarningFormat( + "More observations ({0}) made than vector observation size ({1}). The observations will be truncated.", + m_Observations.Count, expectedObservations + ); + m_Observations.RemoveRange(expectedObservations, m_Observations.Count - expectedObservations); + } + else if (m_Observations.Count < expectedObservations) + { + // Not enough observations; pad with zeros. + Debug.LogWarningFormat( + "Fewer observations ({0}) made than vector observation size ({1}). The observations will be padded.", + m_Observations.Count, expectedObservations + ); + for (int i = m_Observations.Count; i < expectedObservations; i++) + { + m_Observations.Add(0); + } + } + writer.AddList(m_Observations); + return expectedObservations; + } + + /// + /// Returns a read-only view of the observations that added. + /// + /// A read-only view of the observations list. + internal ReadOnlyCollection GetObservations() + { + return m_Observations.AsReadOnly(); + } + + /// + public void Update() + { + Clear(); + } + + /// + public void Reset() + { + Clear(); + } + + /// + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + /// + public string GetName() + { + return m_Name; + } + + /// + public virtual byte[] GetCompressedObservation() + { + return null; + } + + /// + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + + /// + public BuiltInSensorType GetBuiltInSensorType() + { + return BuiltInSensorType.VectorSensor; + } + + void Clear() + { + m_Observations.Clear(); + } + + void AddFloatObs(float obs) + { + Utilities.DebugCheckNanAndInfinity(obs, nameof(obs), nameof(AddFloatObs)); + m_Observations.Add(obs); + } + + // Compatibility methods with Agent observation. These should be removed eventually. + + /// + /// Adds a float observation to the vector observations of the agent. + /// + /// Observation. + public void AddObservation(float observation) + { + AddFloatObs(observation); + } + + /// + /// Adds an integer observation to the vector observations of the agent. + /// + /// Observation. + public void AddObservation(int observation) + { + AddFloatObs(observation); + } + + /// + /// Adds an Vector3 observation to the vector observations of the agent. + /// + /// Observation. + public void AddObservation(Vector3 observation) + { + AddFloatObs(observation.x); + AddFloatObs(observation.y); + AddFloatObs(observation.z); + } + + /// + /// Adds an Vector2 observation to the vector observations of the agent. + /// + /// Observation. + public void AddObservation(Vector2 observation) + { + AddFloatObs(observation.x); + AddFloatObs(observation.y); + } + + /// + /// Adds a list or array of float observations to the vector observations of the agent. + /// + /// Observation. + public void AddObservation(IList observation) + { + for (var i = 0; i < observation.Count; i++) + { + AddFloatObs(observation[i]); + } + } + + /// + /// Adds a quaternion observation to the vector observations of the agent. + /// + /// Observation. + public void AddObservation(Quaternion observation) + { + AddFloatObs(observation.x); + AddFloatObs(observation.y); + AddFloatObs(observation.z); + AddFloatObs(observation.w); + } + + /// + /// Adds a boolean observation to the vector observation of the agent. + /// + /// Observation. + public void AddObservation(bool observation) + { + AddFloatObs(observation ? 1f : 0f); + } + + /// + /// Adds a one-hot encoding observation. + /// + /// The index of this observation. + /// The upper limit on the value observation can take (exclusive). + public void AddOneHotObservation(int observation, int range) + { + for (var i = 0; i < range; i++) + { + AddFloatObs(i == observation ? 1.0f : 0.0f); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/VectorSensor.cs.meta b/com.unity.ml-agents/Runtime/Sensors/VectorSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e47bef0e54347f3a7736b4895b6628b10d1477c6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/VectorSensor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e3966c9961b343108808d91a4d140a68 +timeCreated: 1572300800 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/Sensors/VectorSensorComponent.cs b/com.unity.ml-agents/Runtime/Sensors/VectorSensorComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..26deb7434f1677dc0d47d4bb426fa691ec0b9fd7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/VectorSensorComponent.cs @@ -0,0 +1,87 @@ +using UnityEngine; + +namespace Unity.MLAgents.Sensors +{ + /// + /// A SensorComponent that creates a . + /// + [AddComponentMenu("ML Agents/Vector Sensor", (int)MenuGroup.Sensors)] + public class VectorSensorComponent : SensorComponent + { + /// + /// Name of the generated object. + /// Note that changing this at runtime does not affect how the Agent sorts the sensors. + /// + public string SensorName + { + get { return m_SensorName; } + set { m_SensorName = value; } + } + [HideInInspector, SerializeField] + private string m_SensorName = "VectorSensor"; + + /// + /// The number of float observations in the VectorSensor + /// + public int ObservationSize + { + get { return m_ObservationSize; } + set { m_ObservationSize = value; } + } + + [HideInInspector, SerializeField] + int m_ObservationSize; + + [HideInInspector, SerializeField] + ObservationType m_ObservationType; + + VectorSensor m_Sensor; + + /// + /// The type of the observation. + /// + public ObservationType ObservationType + { + get { return m_ObservationType; } + set { m_ObservationType = value; } + } + + [HideInInspector, SerializeField] + [Range(1, 50)] + [Tooltip("Number of camera frames that will be stacked before being fed to the neural network.")] + int m_ObservationStacks = 1; + + /// + /// Whether to stack previous observations. Using 1 means no previous observations. + /// Note that changing this after the sensor is created has no effect. + /// + public int ObservationStacks + { + get { return m_ObservationStacks; } + set { m_ObservationStacks = value; } + } + + /// + /// Creates a VectorSensor. + /// + /// + public override ISensor[] CreateSensors() + { + m_Sensor = new VectorSensor(m_ObservationSize, m_SensorName, m_ObservationType); + if (ObservationStacks != 1) + { + return new ISensor[] { new StackingSensor(m_Sensor, ObservationStacks) }; + } + return new ISensor[] { m_Sensor }; + } + + /// + /// Returns the underlying VectorSensor + /// + /// + public VectorSensor GetSensor() + { + return m_Sensor; + } + } +} diff --git a/com.unity.ml-agents/Runtime/Sensors/VectorSensorComponent.cs.meta b/com.unity.ml-agents/Runtime/Sensors/VectorSensorComponent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c867a60f2b2b1375f17c949a6eef501f530bb7d6 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Sensors/VectorSensorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38b7cc1f5819445aa85e9a9b054552dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels.meta b/com.unity.ml-agents/Runtime/SideChannels.meta new file mode 100644 index 0000000000000000000000000000000000000000..6bff982a90afbb98a3d35f8424c8d7e17254984b --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9de9d822922c6454ca88483e2b9eeeac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/EngineConfigurationChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/EngineConfigurationChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..246ef50074e4da650639662d305e5409023e59ef --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/EngineConfigurationChannel.cs @@ -0,0 +1,75 @@ +using System; +using UnityEngine; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Side channel that supports modifying attributes specific to the Unity Engine. + /// + internal class EngineConfigurationChannel : SideChannel + { + internal enum ConfigurationType : int + { + ScreenResolution = 0, + QualityLevel = 1, + TimeScale = 2, + TargetFrameRate = 3, + CaptureFrameRate = 4 + } + + const string k_EngineConfigId = "e951342c-4f7e-11ea-b238-784f4387d1f7"; + + /// + /// Initializes the side channel. The constructor is internal because only one instance is + /// supported at a time, and is created by the Academy. + /// + internal EngineConfigurationChannel() + { + ChannelId = new Guid(k_EngineConfigId); + } + + /// + protected override void OnMessageReceived(IncomingMessage msg) + { + var messageType = (ConfigurationType)msg.ReadInt32(); + switch (messageType) + { + case ConfigurationType.ScreenResolution: + var width = msg.ReadInt32(); + var height = msg.ReadInt32(); + Screen.SetResolution(width, height, false); + break; + case ConfigurationType.QualityLevel: + var qualityLevel = msg.ReadInt32(); + QualitySettings.SetQualityLevel(qualityLevel, true); + break; + case ConfigurationType.TimeScale: + var timeScale = msg.ReadFloat32(); + + // There's an upper limit for the timeScale in the editor (but not in the player) + // Always ensure that timeScale >= 1 also, +#if UNITY_EDITOR + const float maxTimeScale = 100f; +#else + const float maxTimeScale = float.PositiveInfinity; +#endif + timeScale = Mathf.Clamp(timeScale, 1, maxTimeScale); + Time.timeScale = timeScale; + break; + case ConfigurationType.TargetFrameRate: + var targetFrameRate = msg.ReadInt32(); + Application.targetFrameRate = targetFrameRate; + break; + case ConfigurationType.CaptureFrameRate: + var captureFrameRate = msg.ReadInt32(); + Time.captureFramerate = captureFrameRate; + break; + default: + Debug.LogWarning( + "Unknown engine configuration received from Python. Make sure" + + " your Unity and Python versions are compatible."); + break; + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/EngineConfigurationChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/EngineConfigurationChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8f6335e9b05bddcf8dc7b9d80f0796c820dc6fbf --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/EngineConfigurationChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18ccdf3ce76784f2db68016fa284c33f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/EnvironmentParametersChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/EnvironmentParametersChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..0e2b88b6ecce790ae11b0fa2d3a7ebe7f59b1730 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/EnvironmentParametersChannel.cs @@ -0,0 +1,142 @@ +using System.Collections.Generic; +using System; +using UnityEngine; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Lists the different data types supported. + /// + internal enum EnvironmentDataTypes + { + Float = 0, + Sampler = 1 + } + + /// + /// The types of distributions from which to sample reset parameters. + /// + internal enum SamplerType + { + /// + /// Samples a reset parameter from a uniform distribution. + /// + Uniform = 0, + + /// + /// Samples a reset parameter from a Gaussian distribution. + /// + Gaussian = 1, + + /// + /// Samples a reset parameter from a MultiRangeUniform distribution. + /// + MultiRangeUniform = 2 + } + + /// + /// A side channel that manages the environment parameter values from Python. Currently + /// limited to parameters of type float. + /// + internal class EnvironmentParametersChannel : SideChannel + { + Dictionary> m_Parameters = new Dictionary>(); + Dictionary> m_RegisteredActions = + new Dictionary>(); + + const string k_EnvParamsId = "534c891e-810f-11ea-a9d0-822485860400"; + + /// + /// Initializes the side channel. The constructor is internal because only one instance is + /// supported at a time, and is created by the Academy. + /// + internal EnvironmentParametersChannel() + { + ChannelId = new Guid(k_EnvParamsId); + } + + /// + protected override void OnMessageReceived(IncomingMessage msg) + { + var key = msg.ReadString(); + var type = msg.ReadInt32(); + if ((int)EnvironmentDataTypes.Float == type) + { + var value = msg.ReadFloat32(); + + m_Parameters[key] = () => value; + + Action action; + m_RegisteredActions.TryGetValue(key, out action); + action?.Invoke(value); + } + else if ((int)EnvironmentDataTypes.Sampler == type) + { + int seed = msg.ReadInt32(); + int samplerType = msg.ReadInt32(); + Func sampler = () => 0.0f; + if ((int)SamplerType.Uniform == samplerType) + { + float min = msg.ReadFloat32(); + float max = msg.ReadFloat32(); + sampler = SamplerFactory.CreateUniformSampler(min, max, seed); + } + else if ((int)SamplerType.Gaussian == samplerType) + { + float mean = msg.ReadFloat32(); + float stddev = msg.ReadFloat32(); + + sampler = SamplerFactory.CreateGaussianSampler(mean, stddev, seed); + } + else if ((int)SamplerType.MultiRangeUniform == samplerType) + { + IList intervals = msg.ReadFloatList(); + sampler = SamplerFactory.CreateMultiRangeUniformSampler(intervals, seed); + } + else + { + Debug.LogWarning("EnvironmentParametersChannel received an unknown data type."); + } + m_Parameters[key] = sampler; + } + else + { + Debug.LogWarning("EnvironmentParametersChannel received an unknown data type."); + } + } + + /// + /// Returns the parameter value associated with the provided key. Returns the default + /// value if one doesn't exist. + /// + /// Parameter key. + /// Default value to return. + /// + public float GetWithDefault(string key, float defaultValue) + { + Func valueOut; + bool hasKey = m_Parameters.TryGetValue(key, out valueOut); + return hasKey ? valueOut.Invoke() : defaultValue; + } + + /// + /// Registers a callback for the associated parameter key. Will overwrite any existing + /// actions for this parameter key. + /// + /// The parameter key. + /// The callback. + public void RegisterCallback(string key, Action action) + { + m_RegisteredActions[key] = action; + } + + /// + /// Returns all parameter keys that have a registered value. + /// + /// + public IList ListParameters() + { + return new List(m_Parameters.Keys); + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/EnvironmentParametersChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/EnvironmentParametersChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f118b1f99fe6d8e9d5dafebae18d653b84af2067 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/EnvironmentParametersChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a849760d5bec946b884984e35c66fcfa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/FloatPropertiesChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/FloatPropertiesChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..f4c293547bef6a7f6595f04dae02ceba426560c5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/FloatPropertiesChannel.cs @@ -0,0 +1,97 @@ +using System.Collections.Generic; +using System; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Side channel that is comprised of a collection of float variables. + /// + public class FloatPropertiesChannel : SideChannel + { + Dictionary m_FloatProperties = new Dictionary(); + Dictionary> m_RegisteredActions = new Dictionary>(); + const string k_FloatPropertiesDefaultId = "60ccf7d0-4f7e-11ea-b238-784f4387d1f7"; + + /// + /// Initializes the side channel with the provided channel ID. + /// + /// ID for the side channel. + public FloatPropertiesChannel(Guid channelId = default(Guid)) + { + if (channelId == default(Guid)) + { + ChannelId = new Guid(k_FloatPropertiesDefaultId); + } + else + { + ChannelId = channelId; + } + } + + /// + protected override void OnMessageReceived(IncomingMessage msg) + { + var key = msg.ReadString(); + var value = msg.ReadFloat32(); + + m_FloatProperties[key] = value; + + Action action; + m_RegisteredActions.TryGetValue(key, out action); + action?.Invoke(value); + } + + /// + /// Sets one of the float properties of the environment. This data will be sent to Python. + /// + /// The string identifier of the property. + /// The float value of the property. + public void Set(string key, float value) + { + m_FloatProperties[key] = value; + using (var msgOut = new OutgoingMessage()) + { + msgOut.WriteString(key); + msgOut.WriteFloat32(value); + QueueMessageToSend(msgOut); + } + + Action action; + m_RegisteredActions.TryGetValue(key, out action); + action?.Invoke(value); + } + + /// + /// Get an Environment property with a default value. If there is a value for this property, + /// it will be returned, otherwise, the default value will be returned. + /// + /// The string identifier of the property. + /// The default value of the property. + /// + public float GetWithDefault(string key, float defaultValue) + { + float valueOut; + bool hasKey = m_FloatProperties.TryGetValue(key, out valueOut); + return hasKey ? valueOut : defaultValue; + } + + /// + /// Registers an action to be performed everytime the property is changed. + /// + /// The string identifier of the property. + /// The action that ill be performed. Takes a float as input. + public void RegisterCallback(string key, Action action) + { + m_RegisteredActions[key] = action; + } + + /// + /// Returns a list of all the string identifiers of the properties currently present. + /// + /// The list of string identifiers + public IList Keys() + { + return new List(m_FloatProperties.Keys); + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/FloatPropertiesChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/FloatPropertiesChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d4b87eb1e4d9f38407e6894ab380a998f2f26327 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/FloatPropertiesChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 452f8b3c01c4642aba645dcf0b6bfc6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/IncomingMessage.cs b/com.unity.ml-agents/Runtime/SideChannels/IncomingMessage.cs new file mode 100644 index 0000000000000000000000000000000000000000..90425955de79c424224d923000630e202b34f7f7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/IncomingMessage.cs @@ -0,0 +1,127 @@ +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System; +using System.IO; +using System.Text; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Utility class for reading the data sent to the SideChannel. + /// + public class IncomingMessage : IDisposable + { + byte[] m_Data; + Stream m_Stream; + BinaryReader m_Reader; + + /// + /// Construct an IncomingMessage from the byte array. + /// + /// + public IncomingMessage(byte[] data) + { + m_Data = data; + m_Stream = new MemoryStream(data); + m_Reader = new BinaryReader(m_Stream); + } + + /// + /// Read a boolean value from the message. + /// + /// Default value to use if the end of the message is reached. + /// + public bool ReadBoolean(bool defaultValue = false) + { + return CanReadMore() ? m_Reader.ReadBoolean() : defaultValue; + } + + /// + /// Read an integer value from the message. + /// + /// Default value to use if the end of the message is reached. + /// + public int ReadInt32(int defaultValue = 0) + { + return CanReadMore() ? m_Reader.ReadInt32() : defaultValue; + } + + /// + /// Read a float value from the message. + /// + /// Default value to use if the end of the message is reached. + /// + public float ReadFloat32(float defaultValue = 0.0f) + { + return CanReadMore() ? m_Reader.ReadSingle() : defaultValue; + } + + /// + /// Read a string value from the message. + /// + /// Default value to use if the end of the message is reached. + /// + public string ReadString(string defaultValue = default) + { + if (!CanReadMore()) + { + return defaultValue; + } + + var strLength = ReadInt32(); + var str = Encoding.ASCII.GetString(m_Reader.ReadBytes(strLength)); + return str; + } + + /// + /// Reads a list of floats from the message. The length of the list is stored in the message. + /// + /// Default value to use if the end of the message is reached. + /// + public IList ReadFloatList(IList defaultValue = default) + { + if (!CanReadMore()) + { + return defaultValue; + } + + var len = ReadInt32(); + var output = new float[len]; + for (var i = 0; i < len; i++) + { + output[i] = ReadFloat32(); + } + + return output; + } + + /// + /// Gets the original data of the message. Note that this will return all of the data, + /// even if part of it has already been read. + /// + /// + public byte[] GetRawBytes() + { + return m_Data; + } + + /// + /// Clean up the internal storage. + /// + public void Dispose() + { + m_Reader?.Dispose(); + m_Stream?.Dispose(); + } + + /// + /// Whether or not there is more data left in the stream that can be read. + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + bool CanReadMore() + { + return m_Stream.Position < m_Stream.Length; + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/IncomingMessage.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/IncomingMessage.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f70c658d1a2931367cd3437bfdd83b6f219eef17 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/IncomingMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8043cec65aeb4ec09db1d25ad694328 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/OutgoingMessage.cs b/com.unity.ml-agents/Runtime/SideChannels/OutgoingMessage.cs new file mode 100644 index 0000000000000000000000000000000000000000..70a7948e2222c7e6d0ed0c5a9bd6914a848843fc --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/OutgoingMessage.cs @@ -0,0 +1,110 @@ +using System.Collections.Generic; +using System; +using System.IO; +using System.Text; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Utility class for forming the data that is sent to the SideChannel. + /// + public class OutgoingMessage : IDisposable + { + BinaryWriter m_Writer; + MemoryStream m_Stream; + + /// + /// Create a new empty OutgoingMessage. + /// + public OutgoingMessage() + { + m_Stream = new MemoryStream(); + m_Writer = new BinaryWriter(m_Stream); + } + + /// + /// Clean up the internal storage. + /// + public void Dispose() + { + m_Writer?.Dispose(); + m_Stream?.Dispose(); + } + + /// + /// Write a boolean value to the message. + /// + /// + public void WriteBoolean(bool b) + { + m_Writer.Write(b); + } + + /// + /// Write an interger value to the message. + /// + /// + public void WriteInt32(int i) + { + m_Writer.Write(i); + } + + /// + /// Write a float values to the message. + /// + /// + public void WriteFloat32(float f) + { + m_Writer.Write(f); + } + + /// + /// Write a string value to the message. + /// + /// + public void WriteString(string s) + { + var stringEncoded = Encoding.ASCII.GetBytes(s); + m_Writer.Write(stringEncoded.Length); + m_Writer.Write(stringEncoded); + } + + /// + /// Write a list or array of floats to the message. + /// + /// + public void WriteFloatList(IList floatList) + { + WriteInt32(floatList.Count); + foreach (var f in floatList) + { + WriteFloat32(f); + } + } + + /// + /// Overwrite the message with a specific byte array. + /// + /// + public void SetRawBytes(byte[] data) + { + // Reset first. Set the length to zero so that if there's more data than we're going to + // write, we don't have any of the original data. + m_Stream.Seek(0, SeekOrigin.Begin); + m_Stream.SetLength(0); + + // Then append the data. Increase the capacity if needed (but don't shrink it). + m_Stream.Capacity = (m_Stream.Capacity < data.Length) ? data.Length : m_Stream.Capacity; + m_Stream.Write(data, 0, data.Length); + } + + /// + /// Read the byte array of the message. + /// + /// + internal byte[] ToByteArray() + { + return m_Stream.ToArray(); + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/OutgoingMessage.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/OutgoingMessage.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..348b80de80bd043fc5c9879c24100421a3330579 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/OutgoingMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a007135a9a1e49849eb2d295f4c3879 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/RawBytesChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/RawBytesChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..133832447b9d6578cbd45db0c366238cacf8d49a --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/RawBytesChannel.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using System; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Side channel for managing raw bytes of data. It is up to the clients of this side channel + /// to interpret the messages. + /// + public class RawBytesChannel : SideChannel + { + List m_MessagesReceived = new List(); + + /// + /// RawBytesChannel provides a way to exchange raw byte arrays between Unity and Python. + /// + /// The identifier for the RawBytesChannel. Must be + /// the same on Python and Unity. + public RawBytesChannel(Guid channelId) + { + ChannelId = channelId; + } + + /// + protected override void OnMessageReceived(IncomingMessage msg) + { + m_MessagesReceived.Add(msg.GetRawBytes()); + } + + /// + /// Sends the byte array message to the Python side channel. The message will be sent + /// alongside the simulation step. + /// + /// The byte array of data to send to Python. + public void SendRawBytes(byte[] data) + { + using (var msg = new OutgoingMessage()) + { + msg.SetRawBytes(data); + QueueMessageToSend(msg); + } + } + + /// + /// Gets the messages that were sent by python since the last call to + /// GetAndClearReceivedMessages. + /// + /// a list of byte array messages that Python has sent. + public IList GetAndClearReceivedMessages() + { + var result = new List(); + result.AddRange(m_MessagesReceived); + m_MessagesReceived.Clear(); + return result; + } + + /// + /// Gets the messages that were sent by python since the last call to + /// GetAndClearReceivedMessages. Note that the messages received will not + /// be cleared with a call to GetReceivedMessages. + /// + /// a list of byte array messages that Python has sent. + public IList GetReceivedMessages() + { + var result = new List(); + result.AddRange(m_MessagesReceived); + return result; + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/RawBytesChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/RawBytesChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..90a49234ba4e36af1ac3cc4c47a7b180c019b6d3 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/RawBytesChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40b01e9cdbfd94865b54ebeb4e5aeaa5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/SideChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/SideChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..250e638b0f857a3569f0f5e871693e2f3dccee27 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/SideChannel.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System; +using UnityEngine; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Side channels provide an alternative mechanism of sending/receiving data from Unity + /// to Python that is outside of the traditional machine learning loop. ML-Agents provides + /// some specific implementations of side channels, but users can create their own. + /// + /// To create your own, you'll need to create two, new mirrored classes, one in Unity (by + /// extending ) and another in Python by extending a Python class + /// also called SideChannel. Then, within your project, use + /// and + /// to register and unregister your + /// custom side channel. + /// + public abstract class SideChannel + { + // The list of messages (byte arrays) that need to be sent to Python via the communicator. + // Should only ever be read and cleared by a ICommunicator object. + internal List MessageQueue = new List(); + + /// + /// An int identifier for the SideChannel. Ensures that there is only ever one side channel + /// of each type. Ensure the Unity side channels will be linked to their Python equivalent. + /// + /// The integer identifier of the SideChannel. + public Guid ChannelId + { + get; + protected set; + } + + internal void ProcessMessage(byte[] msg) + { + try + { + using (var incomingMsg = new IncomingMessage(msg)) + { + OnMessageReceived(incomingMsg); + } + } + catch (Exception ex) + { + // Catch all errors in the sidechannel processing, so that a single + // bad SideChannel implementation doesn't take everything down with it. + Debug.LogError($"Error processing SideChannel message: {ex}.\nThe message will be skipped."); + } + } + + /// + /// Is called by the communicator every time a message is received from Python by the SideChannel. + /// Can be called multiple times per simulation step if multiple messages were sent. + /// + /// The incoming message. + protected abstract void OnMessageReceived(IncomingMessage msg); + + /// + /// Queues a message to be sent to Python during the next simulation step. + /// + /// The byte array of data to be sent to Python. + protected void QueueMessageToSend(OutgoingMessage msg) + { + MessageQueue.Add(msg.ToByteArray()); + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/SideChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/SideChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c668b0187ffb2ec337c78aa2a3f3778f61b33e39 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/SideChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77b7d19dd6ce343eeba907540b5a2286 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/SideChannelManager.cs b/com.unity.ml-agents/Runtime/SideChannels/SideChannelManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..bdcc596b85231314971612f0ecc75a870dabbf8f --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/SideChannelManager.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using System.IO; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Collection of static utilities for managing the registering/unregistering of + /// and the sending/receiving of messages for all the channels. + /// + public static class SideChannelManager + { + static Dictionary s_RegisteredChannels = new Dictionary(); + + struct CachedSideChannelMessage + { + public Guid ChannelId; + public byte[] Message; + } + + static readonly Queue s_CachedMessages = + new Queue(); + + /// + /// Register a side channel to begin sending and receiving messages. This method is + /// available for environments that have custom side channels. All built-in side + /// channels within the ML-Agents Toolkit are managed internally and do not need to + /// be explicitly registered/unregistered. A side channel may only be registered once. + /// + /// The side channel to register. + public static void RegisterSideChannel(SideChannel sideChannel) + { + var channelId = sideChannel.ChannelId; + if (s_RegisteredChannels.ContainsKey(channelId)) + { + throw new UnityAgentsException( + $"A side channel with id {channelId} is already registered. " + + "You cannot register multiple side channels of the same id."); + } + + // Process any messages that we've already received for this channel ID. + var numMessages = s_CachedMessages.Count; + for (var i = 0; i < numMessages; i++) + { + var cachedMessage = s_CachedMessages.Dequeue(); + if (channelId == cachedMessage.ChannelId) + { + sideChannel.ProcessMessage(cachedMessage.Message); + } + else + { + s_CachedMessages.Enqueue(cachedMessage); + } + } + s_RegisteredChannels.Add(channelId, sideChannel); + } + + /// + /// Unregister a side channel to stop sending and receiving messages. This method is + /// available for environments that have custom side channels. All built-in side + /// channels within the ML-Agents Toolkit are managed internally and do not need to + /// be explicitly registered/unregistered. Unregistering a side channel that has already + /// been unregistered (or never registered in the first place) has no negative side effects. + /// Note that unregistering a side channel may not stop the Python side + /// from sending messages, but it does mean that sent messages with not result in a call + /// to . Furthermore, + /// those messages will not be buffered and will, in essence, be lost. + /// + /// The side channel to unregister. + public static void UnregisterSideChannel(SideChannel sideChannel) + { + if (s_RegisteredChannels.ContainsKey(sideChannel.ChannelId)) + { + s_RegisteredChannels.Remove(sideChannel.ChannelId); + } + } + + /// + /// Unregisters all the side channels from the communicator. + /// + internal static void UnregisterAllSideChannels() + { + s_RegisteredChannels = new Dictionary(); + } + + /// + /// Returns the SideChannel of Type T if there is one registered, or null if it doesn't. + /// If there are multiple SideChannels of the same type registered, the returned instance is arbitrary. + /// + /// + /// + internal static T GetSideChannel() where T : SideChannel + { + foreach (var sc in s_RegisteredChannels.Values) + { + if (sc.GetType() == typeof(T)) + { + return (T)sc; + } + } + return null; + } + + /// + /// Grabs the messages that the registered side channels will send to Python at the current step + /// into a singe byte array. + /// + /// + internal static byte[] GetSideChannelMessage() + { + return GetSideChannelMessage(s_RegisteredChannels); + } + + /// + /// Grabs the messages that the registered side channels will send to Python at the current step + /// into a singe byte array. + /// + /// A dictionary of channel type to channel. + /// + internal static byte[] GetSideChannelMessage(Dictionary sideChannels) + { + if (!HasOutgoingMessages(sideChannels)) + { + // Early out so that we don't create the MemoryStream or BinaryWriter. + // This is the most common case. + return Array.Empty(); + } + + using (var memStream = new MemoryStream()) + { + using (var binaryWriter = new BinaryWriter(memStream)) + { + foreach (var sideChannel in sideChannels.Values) + { + var messageList = sideChannel.MessageQueue; + foreach (var message in messageList) + { + binaryWriter.Write(sideChannel.ChannelId.ToByteArray()); + binaryWriter.Write(message.Length); + binaryWriter.Write(message); + } + sideChannel.MessageQueue.Clear(); + } + return memStream.ToArray(); + } + } + } + + /// + /// Check whether any of the sidechannels have queued messages. + /// + /// + /// + static bool HasOutgoingMessages(Dictionary sideChannels) + { + foreach (var sideChannel in sideChannels.Values) + { + var messageList = sideChannel.MessageQueue; + if (messageList.Count > 0) + { + return true; + } + } + + return false; + } + + /// + /// Separates the data received from Python into individual messages for each registered side channel. + /// + /// The byte array of data received from Python. + internal static void ProcessSideChannelData(byte[] dataReceived) + { + ProcessSideChannelData(s_RegisteredChannels, dataReceived); + } + + /// + /// Separates the data received from Python into individual messages for each registered side channel. + /// + /// A dictionary of channel type to channel. + /// The byte array of data received from Python. + internal static void ProcessSideChannelData(Dictionary sideChannels, byte[] dataReceived) + { + while (s_CachedMessages.Count != 0) + { + var cachedMessage = s_CachedMessages.Dequeue(); + if (sideChannels.ContainsKey(cachedMessage.ChannelId)) + { + sideChannels[cachedMessage.ChannelId].ProcessMessage(cachedMessage.Message); + } + else + { + Debug.Log(string.Format( + "Unknown side channel data received. Channel Id is " + + ": {0}", cachedMessage.ChannelId)); + } + } + + if (dataReceived.Length == 0) + { + return; + } + using (var memStream = new MemoryStream(dataReceived)) + { + using (var binaryReader = new BinaryReader(memStream)) + { + while (memStream.Position < memStream.Length) + { + Guid channelId = Guid.Empty; + byte[] message = null; + try + { + channelId = new Guid(binaryReader.ReadBytes(16)); + var messageLength = binaryReader.ReadInt32(); + message = binaryReader.ReadBytes(messageLength); + } + catch (Exception ex) + { + throw new UnityAgentsException( + "There was a problem reading a message in a SideChannel. Please make sure the " + + "version of MLAgents in Unity is compatible with the Python version. Original error : " + + ex.Message); + } + if (sideChannels.ContainsKey(channelId)) + { + sideChannels[channelId].ProcessMessage(message); + } + else + { + // Don't recognize this ID, but cache it in case the SideChannel that can handle + // it is registered before the next call to ProcessSideChannelData. + s_CachedMessages.Enqueue(new CachedSideChannelMessage + { + ChannelId = channelId, + Message = message + }); + } + } + } + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/SideChannelManager.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/SideChannelManager.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..251cc146329425acddc70f731ca9cb7b1bcbd5cc --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/SideChannelManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccc0d134445f947349c68a6d07e3cdc2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/StatsSideChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/StatsSideChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..dbe1b5aeec3c8d4e2865eea60dcfa6fcf36fccad --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/StatsSideChannel.cs @@ -0,0 +1,43 @@ +using System; +namespace Unity.MLAgents.SideChannels +{ + /// + /// A Side Channel for sending data. + /// + internal class StatsSideChannel : SideChannel + { + const string k_StatsSideChannelDefaultId = "a1d8f7b7-cec8-50f9-b78b-d3e165a78520"; + + /// + /// Initializes the side channel. The constructor is internal because only one instance is + /// supported at a time. + /// + internal StatsSideChannel() + { + ChannelId = new Guid(k_StatsSideChannelDefaultId); + } + + /// + /// Add a stat value for reporting. + /// + /// The stat name. + /// The stat value. + /// How multiple values should be treated. + public void AddStat(string key, float value, StatAggregationMethod aggregationMethod) + { + using (var msg = new OutgoingMessage()) + { + msg.WriteString(key); + msg.WriteFloat32(value); + msg.WriteInt32((int)aggregationMethod); + QueueMessageToSend(msg); + } + } + + /// + protected override void OnMessageReceived(IncomingMessage msg) + { + throw new UnityAgentsException("StatsSideChannel should never receive messages."); + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/StatsSideChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/StatsSideChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebc11e7092a6d4d376f227bcfbc171a79aff0de7 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/StatsSideChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83a07fdb9e8f04536908a51447dfe548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/SideChannels/TrainingAnalyticsSideChannel.cs b/com.unity.ml-agents/Runtime/SideChannels/TrainingAnalyticsSideChannel.cs new file mode 100644 index 0000000000000000000000000000000000000000..0c880e4be991989000694dd69aa501452ed73f84 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/TrainingAnalyticsSideChannel.cs @@ -0,0 +1,52 @@ +using System; +using Unity.MLAgents.Analytics; +using Unity.MLAgents.CommunicatorObjects; + +namespace Unity.MLAgents.SideChannels +{ + /// + /// Side Channel implementation for recording which training features are being used. + /// + internal class TrainingAnalyticsSideChannel : SideChannel + { + const string k_TrainingAnalyticsConfigId = "b664a4a9-d86f-5a5f-95cb-e8353a7e8356"; + + /// + /// Initializes the side channel. The constructor is internal because only one instance is + /// supported at a time, and is created by the Academy. + /// + internal TrainingAnalyticsSideChannel() + { + ChannelId = new Guid(k_TrainingAnalyticsConfigId); + } + + /// + protected override void OnMessageReceived(IncomingMessage msg) + { + Google.Protobuf.WellKnownTypes.Any anyMessage = null; + try + { + anyMessage = Google.Protobuf.WellKnownTypes.Any.Parser.ParseFrom(msg.GetRawBytes()); + } + catch (Google.Protobuf.InvalidProtocolBufferException) + { + // Bad message, nothing we can do about it, so just ignore. + return; + } + + if (anyMessage.Is(TrainingEnvironmentInitialized.Descriptor)) + { + var envInitProto = anyMessage.Unpack(); + var envInitEvent = envInitProto.ToTrainingEnvironmentInitializedEvent(); + TrainingAnalytics.TrainingEnvironmentInitialized(envInitEvent); + } + else if (anyMessage.Is(TrainingBehaviorInitialized.Descriptor)) + { + var behaviorInitProto = anyMessage.Unpack(); + var behaviorTrainingEvent = behaviorInitProto.ToTrainingBehaviorInitializedEvent(); + TrainingAnalytics.TrainingBehaviorInitialized(behaviorTrainingEvent); + } + // Don't do anything for unknown types, since the user probably can't do anything about it. + } + } +} diff --git a/com.unity.ml-agents/Runtime/SideChannels/TrainingAnalyticsSideChannel.cs.meta b/com.unity.ml-agents/Runtime/SideChannels/TrainingAnalyticsSideChannel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..757d0d0d4fbb697a2a83214b1d71d6a30e83e514 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SideChannels/TrainingAnalyticsSideChannel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 13c87198bbd54b40a0b93308eb37933e +timeCreated: 1608337471 \ No newline at end of file diff --git a/com.unity.ml-agents/Runtime/SimpleMultiAgentGroup.cs b/com.unity.ml-agents/Runtime/SimpleMultiAgentGroup.cs new file mode 100644 index 0000000000000000000000000000000000000000..c5fe6ce83587b268e8b4cf557e984900f60d2959 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SimpleMultiAgentGroup.cs @@ -0,0 +1,145 @@ +using System; +using System.Linq; +using System.Collections.Generic; + +namespace Unity.MLAgents +{ + /// + /// A basic class implementation of MultiAgentGroup. + /// + public class SimpleMultiAgentGroup : IMultiAgentGroup, IDisposable + { + readonly int m_Id = MultiAgentGroupIdCounter.GetGroupId(); + HashSet m_Agents = new HashSet(); + + /// + /// Disposes of the SimpleMultiAgentGroup. + /// + public virtual void Dispose() + { + while (m_Agents.Count > 0) + { + UnregisterAgent(m_Agents.First()); + } + } + + /// + public virtual void RegisterAgent(Agent agent) + { + if (!m_Agents.Contains(agent)) + { + agent.SetMultiAgentGroup(this); + m_Agents.Add(agent); + agent.OnAgentDisabled += UnregisterAgent; + } + } + + /// + public virtual void UnregisterAgent(Agent agent) + { + if (m_Agents.Contains(agent)) + { + agent.SetMultiAgentGroup(null); + m_Agents.Remove(agent); + agent.OnAgentDisabled -= UnregisterAgent; + } + } + + /// + public int GetId() + { + return m_Id; + } + + /// + /// Get list of all agents currently registered to this MultiAgentGroup. + /// + /// + /// List of agents registered to the MultiAgentGroup. + /// + public IReadOnlyCollection GetRegisteredAgents() + { + return m_Agents; + } + + /// + /// Increments the group rewards for all agents in this MultiAgentGroup. + /// + /// + /// This function increases or decreases the group rewards by a given amount for all agents + /// in the group. Use to set the group reward assigned + /// to the current step with a specific value rather than increasing or decreasing it. + /// + /// A positive group reward indicates the whole group's accomplishments or desired behaviors. + /// Every agent in the group will receive the same group reward no matter whether the + /// agent's act directly leads to the reward. Group rewards are meant to reinforce agents + /// to act in the group's best interest instead of individual ones. + /// Group rewards are treated differently than individual agent rewards during training, so + /// calling AddGroupReward() is not equivalent to calling agent.AddReward() on each agent in the group. + /// + /// Incremental group reward value. + public void AddGroupReward(float reward) + { + foreach (var agent in m_Agents) + { + agent.AddGroupReward(reward); + } + } + + /// + /// Set the group rewards for all agents in this MultiAgentGroup. + /// + /// + /// This function replaces any group rewards given during the current step for all agents in the group. + /// Use to incrementally change the group reward rather than + /// overriding it. + /// + /// A positive group reward indicates the whole group's accomplishments or desired behaviors. + /// Every agent in the group will receive the same group reward no matter whether the + /// agent's act directly leads to the reward. Group rewards are meant to reinforce agents + /// to act in the group's best interest instead of indivisual ones. + /// Group rewards are treated differently than individual agent rewards during training, so + /// calling SetGroupReward() is not equivalent to calling agent.SetReward() on each agent in the group. + /// + /// The new value of the group reward. + public void SetGroupReward(float reward) + { + foreach (var agent in m_Agents) + { + agent.SetGroupReward(reward); + } + } + + /// + /// End episodes for all agents in this MultiAgentGroup. + /// + /// + /// This should be used when the episode can no longer continue, such as when the group + /// reaches the goal or fails at the task. + /// + public void EndGroupEpisode() + { + foreach (var agent in m_Agents) + { + agent.EndEpisode(); + } + } + + /// + /// Indicate that the episode is over but not due to the "fault" of the group. + /// This has the same end result as calling , but has a + /// slightly different effect on training. + /// + /// + /// This should be used when the episode could continue, but has gone on for + /// a sufficient number of steps, such as if the environment hits some maximum number of steps. + /// + public void GroupEpisodeInterrupted() + { + foreach (var agent in m_Agents) + { + agent.EpisodeInterrupted(); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/SimpleMultiAgentGroup.cs.meta b/com.unity.ml-agents/Runtime/SimpleMultiAgentGroup.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..33b0a0559e2a6b80935e1cb13facdb25dcf195b9 --- /dev/null +++ b/com.unity.ml-agents/Runtime/SimpleMultiAgentGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3454e3c3c70964dca93b63ee4b650095 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/StatsRecorder.cs b/com.unity.ml-agents/Runtime/StatsRecorder.cs new file mode 100644 index 0000000000000000000000000000000000000000..d7250862b975eeb161f57b1d55ade1990fc526ae --- /dev/null +++ b/com.unity.ml-agents/Runtime/StatsRecorder.cs @@ -0,0 +1,80 @@ +using Unity.MLAgents.SideChannels; + +namespace Unity.MLAgents +{ + /// + /// Determines the behavior of how multiple stats within the same summary period are combined. + /// + public enum StatAggregationMethod + { + /// + /// Values within the summary period are averaged before reporting. + /// + Average = 0, + + /// + /// Only the most recent value is reported. + /// To avoid conflicts when training with multiple concurrent environments, only + /// stats from worker index 0 will be tracked. + /// + MostRecent = 1, + + /// + /// Values within the summary period are summed up before reporting. + /// + Sum = 2, + + /// + /// Values within the summary period are reported as a histogram. + /// + Histogram = 3 + } + + /// + /// Add stats (key-value pairs) for reporting. These values will sent these to a StatsReporter + /// instance, which means the values will appear in the TensorBoard summary, as well as trainer + /// gauges. You can nest stats in TensorBoard by adding "/" in the name (e.g. "Agent/Health" + /// and "Agent/Wallet"). Note that stats are only written to TensorBoard each summary_frequency + /// steps (a trainer configuration). If a stat is received multiple times, within that period + /// then the values will be aggregated using the provided. + /// + public sealed class StatsRecorder + { + /// + /// The side channel that is used to receive the new parameter values. + /// + readonly StatsSideChannel m_Channel; + + /// + /// Constructor. + /// + internal StatsRecorder() + { + m_Channel = new StatsSideChannel(); + SideChannelManager.RegisterSideChannel(m_Channel); + } + + /// + /// Add a stat value for reporting. + /// + /// The stat name. + /// + /// The stat value. You can nest stats in TensorBoard by using "/". + /// + /// + /// How multiple values sent in the same summary window should be treated. + /// + public void Add( + string key, + float value, + StatAggregationMethod aggregationMethod = StatAggregationMethod.Average) + { + m_Channel.AddStat(key, value, aggregationMethod); + } + + internal void Dispose() + { + SideChannelManager.UnregisterSideChannel(m_Channel); + } + } +} diff --git a/com.unity.ml-agents/Runtime/StatsRecorder.cs.meta b/com.unity.ml-agents/Runtime/StatsRecorder.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bfc4addbb19fa2c4afcc73fc56cf673cb89af044 --- /dev/null +++ b/com.unity.ml-agents/Runtime/StatsRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9add8900e8a746e6a4cb410cb27d664 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Timer.cs b/com.unity.ml-agents/Runtime/Timer.cs new file mode 100644 index 0000000000000000000000000000000000000000..fe0ba47211265969748c8cb81b75c632dbeebd97 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Timer.cs @@ -0,0 +1,534 @@ +// Compile with: csc CRefTest.cs -doc:Results.xml +#if UNITY_EDITOR || UNITY_STANDALONE +#define MLA_SUPPORTED_TRAINING_PLATFORM +#endif +using System; +using UnityEngine; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine.Profiling; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Json; +using UnityEngine.SceneManagement; + +namespace Unity.MLAgents +{ + [DataContract] + internal class TimerNode + { + static string s_Separator = "."; + static double s_TicksToSeconds = 1e-7; // 100 ns per tick + + /// + /// Full name of the node. This is the node's parents full name concatenated with this + /// node's name. + /// + string m_FullName; + + /// + /// Child nodes, indexed by name. + /// + [DataMember(Name = "children", Order = 999)] + Dictionary m_Children; + + /// + /// Custom sampler used to add timings to the profiler. + /// + CustomSampler m_Sampler; + + /// + /// Number of total ticks elapsed for this node. + /// + long m_TotalTicks; + + /// + /// If the node is currently running, the time (in ticks) when the node was started. + /// If the node is not running, is set to 0. + /// + long m_TickStart; + + /// + /// Number of times the corresponding code block has been called. + /// + [DataMember(Name = "count")] + int m_NumCalls; + + /// + /// The total recorded ticks for the timer node, plus the currently elapsed ticks + /// if the timer is still running (i.e. if m_TickStart is non-zero). + /// + public long CurrentTicks + { + get + { + var currentTicks = m_TotalTicks; + if (m_TickStart != 0) + { + currentTicks += (DateTime.Now.Ticks - m_TickStart); + } + + return currentTicks; + } + } + + /// + /// Total elapsed seconds. + /// + [DataMember(Name = "total")] + public double TotalSeconds + { + get { return CurrentTicks * s_TicksToSeconds; } + set { } // Serialization needs this, but unused. + } + + /// + /// Total seconds spent in this block, excluding it's children. + /// + [DataMember(Name = "self")] + public double SelfSeconds + { + get + { + long totalChildTicks = 0; + if (m_Children != null) + { + foreach (var child in m_Children.Values) + { + totalChildTicks += child.m_TotalTicks; + } + } + + var selfTicks = Mathf.Max(0, CurrentTicks - totalChildTicks); + return selfTicks * s_TicksToSeconds; + } + set { } // Serialization needs this, but unused. + } + + public IReadOnlyDictionary Children + { + get { return m_Children; } + } + + public int NumCalls + { + get { return m_NumCalls; } + } + + public TimerNode(string name, bool isRoot = false) + { + m_FullName = name; + if (isRoot) + { + // The root node is considered always running. This means that when we output stats, it'll + // have a sensible value for total time (the running time since reset). + // The root node doesn't have a sampler since that could interfere with the profiler. + m_NumCalls = 1; + m_TickStart = DateTime.Now.Ticks; + } + else + { + m_Sampler = CustomSampler.Create(m_FullName); + } + } + + /// + /// Start timing a block of code. + /// + public void Begin() + { + m_Sampler?.Begin(); + m_TickStart = DateTime.Now.Ticks; + } + + /// + /// Stop timing a block of code, and increment internal counts. + /// + public void End() + { + var elapsed = DateTime.Now.Ticks - m_TickStart; + m_TotalTicks += elapsed; + m_TickStart = 0; + m_NumCalls++; + m_Sampler?.End(); + } + + /// + /// Return a child node for the given name. + /// The children dictionary will be created if it does not already exist, and + /// a new Node will be created if it's not already in the dictionary. + /// Note that these allocations only happen once for a given timed block. + /// + /// + /// + public TimerNode GetChild(string name) + { + // Lazily create the children dictionary. + if (m_Children == null) + { + m_Children = new Dictionary(); + } + + if (!m_Children.ContainsKey(name)) + { + var childFullName = m_FullName + s_Separator + name; + var newChild = new TimerNode(childFullName); + m_Children[name] = newChild; + return newChild; + } + + return m_Children[name]; + } + + /// + /// Recursively form a string representing the current timer information. + /// + /// + /// + /// + public string DebugGetTimerString(string parentName = "", int level = 0) + { + var indent = new string(' ', 2 * level); // TODO generalize + var shortName = (level == 0) ? m_FullName : m_FullName.Replace(parentName + s_Separator, ""); + string timerString; + if (level == 0) + { + timerString = $"{shortName}(root)\n"; + } + else + { + timerString = $"{indent}{shortName}\t\traw={TotalSeconds} rawCount={m_NumCalls}\n"; + } + + // TODO use StringBuilder? might be overkill since this is only debugging code? + if (m_Children != null) + { + foreach (var c in m_Children.Values) + { + timerString += c.DebugGetTimerString(m_FullName, level + 1); + } + } + return timerString; + } + } + + [DataContract] + internal class RootNode : TimerNode + { + // Timer output format version + internal const string k_TimerFormatVersion = "0.1.0"; + + [DataMember(Name = "metadata", Order = 0)] + Dictionary m_Metadata = new Dictionary(); + + /// + /// Gauge Nodes to measure arbitrary values. + /// + [DataMember(Name = "gauges", EmitDefaultValue = false)] + Dictionary m_Gauges = new Dictionary(); + + public RootNode(string name = "root") : base(name, true) + { + m_Metadata.Add("timer_format_version", k_TimerFormatVersion); + m_Metadata.Add("start_time_seconds", $"{DateTimeOffset.Now.ToUnixTimeSeconds()}"); + m_Metadata.Add("unity_version", Application.unityVersion); + m_Metadata.Add("command_line_arguments", String.Join(" ", GetCleanedCommandLineArguments())); + } + + /// + /// Cleans Environment CommandLine Argument from license infos + /// + /// cleaned string list of commandLine + private static List GetCleanedCommandLineArguments() + { + List commandLineArgs = Environment.GetCommandLineArgs().ToList(); + List toRemoveIndices = new List { }; + for (var i = 0; i < commandLineArgs.Count; i++) + { + if (commandLineArgs[i].Contains("accessToken") || + commandLineArgs[i].Contains("hubSessionId") || + commandLineArgs[i].Contains("licensingIpc")) + { + toRemoveIndices.Add(i); + toRemoveIndices.Add(i + 1); + } + } + // remove in reverse order + for (var i = toRemoveIndices.Count() - 1; i >= 0; i--) + { + commandLineArgs.RemoveAt(toRemoveIndices[i]); + } + return commandLineArgs; + } + + public void AddMetadata(string key, string value) + { + m_Metadata[key] = value; + } + + public Dictionary Gauges + { + get { return m_Gauges; } + } + + public Dictionary Metadata + { + get { return m_Metadata; } + } + } + + /// + /// Tracks the most recent value of a metric. This is analogous to gauges in statsd and Prometheus. + /// + [DataContract] + internal class GaugeNode + { + const float k_SmoothingFactor = .25f; // weight for exponential moving average. + + /// + /// The most recent value that the gauge was set to. + /// + [DataMember] + public float value; + + /// + /// The smallest value that has been seen for the gauge since it was created. + /// + [DataMember(Name = "min")] + public float minValue; + + /// + /// The largest value that has been seen for the gauge since it was created. + /// + [DataMember(Name = "max")] + public float maxValue; + + /// + /// The exponential moving average of the gauge value. This will take all values into account, + /// but weights older values less as more values are added. + /// + [DataMember(Name = "weightedAverage")] + public float weightedAverage; + + /// + /// The running average of all gauge values. + /// + [DataMember] + public float runningAverage; + + /// + /// The number of times the gauge has been updated. + /// + [DataMember] + public uint count; + + public GaugeNode(float value) + { + this.value = value; + weightedAverage = value; + runningAverage = value; + minValue = value; + maxValue = value; + count = 1; + } + + public void Update(float newValue) + { + ++count; + minValue = Mathf.Min(minValue, newValue); + maxValue = Mathf.Max(maxValue, newValue); + // update exponential moving average + weightedAverage = (k_SmoothingFactor * newValue) + ((1f - k_SmoothingFactor) * weightedAverage); + value = newValue; + + // Update running average - see https://www.johndcook.com/blog/standard_deviation/ for formula. + runningAverage = runningAverage + (newValue - runningAverage) / count; + } + } + + /// + /// A "stack" of timers that allows for lightweight hierarchical profiling of long-running processes. + /// + /// Example usage: + /// + /// using(TimerStack.Instance.Scoped("foo")) + /// { + /// doSomeWork(); + /// for (int i=0; i<5; i++) + /// { + /// using(myTimer.Scoped("bar")) + /// { + /// doSomeMoreWork(); + /// } + /// } + /// } + /// + /// + /// + /// + /// This implements the Singleton pattern (solution 4) as described in + /// https://csharpindepth.com/articles/singleton + /// + internal class TimerStack : IDisposable + { + static readonly TimerStack k_Instance = new TimerStack(); + + Stack m_Stack; + RootNode m_RootNode; + Dictionary m_Metadata; + + // Explicit static constructor to tell C# compiler + // not to mark type as beforefieldinit + static TimerStack() + { + } + + TimerStack() + { + Reset(); + } + + /// + /// Resets the timer stack and the root node. + /// + /// Name of the root node. + public void Reset(string name = "root") + { + m_Stack = new Stack(); + m_RootNode = new RootNode(name); + m_Stack.Push(m_RootNode); + } + + /// + /// The singleton instance. + /// + public static TimerStack Instance + { + get { return k_Instance; } + } + + internal RootNode RootNode + { + get { return m_RootNode; } + } + + /// + /// Updates the referenced gauge in the root node with the provided value. + /// + /// The name of the Gauge to modify. + /// The value to update the Gauge with. + public void SetGauge(string name, float value) + { + if (!float.IsNaN(value)) + { + GaugeNode gauge; + if (m_RootNode.Gauges.TryGetValue(name, out gauge)) + { + gauge.Update(value); + } + else + { + m_RootNode.Gauges[name] = new GaugeNode(value); + } + } + } + + public void AddMetadata(string key, string value) + { + m_RootNode.AddMetadata(key, value); + } + + void Push(string name) + { + var current = m_Stack.Peek(); + var next = current.GetChild(name); + m_Stack.Push(next); + next.Begin(); + } + + void Pop() + { + var node = m_Stack.Pop(); + node.End(); + } + + /// + /// Start a scoped timer. This should be used with the "using" statement. + /// + /// + /// + public TimerStack Scoped(string name) + { + Push(name); + return this; + } + + /// + /// Closes the current scoped timer. This should never be called directly, only + /// at the end of a "using" statement. + /// Note that the instance is not actually disposed of; this is just to allow it to be used + /// conveniently with "using". + /// + public void Dispose() + { + Pop(); + } + + /// + /// Get a string representation of the timers. + /// Potentially slow so call sparingly. + /// + /// + internal string DebugGetTimerString() + { + return m_RootNode.DebugGetTimerString(); + } + + /// + /// Save the timers in JSON format to the provided filename. + /// If the filename is null, a default one will be used. + /// + /// + public void SaveJsonTimers(string filename = null) + { +#if MLA_SUPPORTED_TRAINING_PLATFORM + try + { + if (filename == null) + { + var activeScene = SceneManager.GetActiveScene(); + var timerDir = Path.Combine(Application.dataPath, "ML-Agents", "Timers"); + Directory.CreateDirectory(timerDir); + + filename = Path.Combine(timerDir, $"{activeScene.name}_timers.json"); + } + + var fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + SaveJsonTimers(fs); + fs.Close(); + } + catch (SystemException) + { + // We may not have write access to the directory. + Debug.LogWarning($"Unable to save timers to file {filename}"); + } +#endif + } + + /// + /// Write the timers in JSON format to the provided stream. + /// + /// + public void SaveJsonTimers(Stream stream) + { + // Add some final metadata info + AddMetadata("scene_name", SceneManager.GetActiveScene().name); + AddMetadata("end_time_seconds", $"{DateTimeOffset.Now.ToUnixTimeSeconds()}"); + + var jsonSettings = new DataContractJsonSerializerSettings(); + jsonSettings.UseSimpleDictionaryFormat = true; + var ser = new DataContractJsonSerializer(typeof(RootNode), jsonSettings); + ser.WriteObject(stream, m_RootNode); + } + } +} diff --git a/com.unity.ml-agents/Runtime/Timer.cs.meta b/com.unity.ml-agents/Runtime/Timer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e28315908dbd87e67a80d51e5b54d9cc5e7a19c5 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Timer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d268f7dfcc74c47939e1fc520adb8d81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Unity.ML-Agents.asmdef b/com.unity.ml-agents/Runtime/Unity.ML-Agents.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..3dafd78f4210bbffbf91b97842ad63a2928c0fa0 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Unity.ML-Agents.asmdef @@ -0,0 +1,38 @@ +{ + "name": "Unity.ML-Agents", + "rootNamespace": "", + "references": [ + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects", + "Unity.Mathematics" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "Google.Protobuf.dll", + "Grpc.Core.dll" + ], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.modules.unityanalytics", + "expression": "1.0.0", + "define": "MLA_UNITY_ANALYTICS_MODULE" + }, + { + "name": "com.unity.modules.physics", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS_MODULE" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS2D_MODULE" + } + ], + "noEngineReferences": false +} diff --git a/com.unity.ml-agents/Runtime/Unity.ML-Agents.asmdef.meta b/com.unity.ml-agents/Runtime/Unity.ML-Agents.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..21cbeb979350d6b92953007e7275bc968e0cf703 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Unity.ML-Agents.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 85e0054f8e64b47309646d35f8851f81 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/UnityAgentsException.cs b/com.unity.ml-agents/Runtime/UnityAgentsException.cs new file mode 100644 index 0000000000000000000000000000000000000000..0abc1ace88d3f0fccd9a4d50b86842fad76b5f04 --- /dev/null +++ b/com.unity.ml-agents/Runtime/UnityAgentsException.cs @@ -0,0 +1,32 @@ +using System; + +namespace Unity.MLAgents +{ + /// + /// Contains exceptions specific to ML-Agents. + /// + [Serializable] + public class UnityAgentsException : Exception + { + /// + /// When a UnityAgentsException is called, the timeScale is set to 0. + /// The simulation will end since no steps will be taken. + /// + /// The exception message + public UnityAgentsException(string message) : base(message) + { + } + + /// + /// A constructor is needed for serialization when an exception propagates + /// from a remoting server to the client. + /// + /// Data for serializing/de-serializing + /// Describes the source and destination of the serialized stream + protected UnityAgentsException( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + { + } + } +} diff --git a/com.unity.ml-agents/Runtime/UnityAgentsException.cs.meta b/com.unity.ml-agents/Runtime/UnityAgentsException.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f72768b1df0e18fcd98649b609690d5f833f7e1f --- /dev/null +++ b/com.unity.ml-agents/Runtime/UnityAgentsException.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e63e4a66d820245778f9a2abfa5b68e0 +timeCreated: 1504131359 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Runtime/Utilities.cs b/com.unity.ml-agents/Runtime/Utilities.cs new file mode 100644 index 0000000000000000000000000000000000000000..e9d442504889146c41f7ad9d7c94249014d20755 --- /dev/null +++ b/com.unity.ml-agents/Runtime/Utilities.cs @@ -0,0 +1,60 @@ +using System; +using System.Diagnostics; +using UnityEngine; + +namespace Unity.MLAgents +{ + internal static class Utilities + { + /// + /// Calculates the cumulative sum of an integer array. The result array will be one element + /// larger than the input array since it has a padded 0 at the beginning. + /// If the input is [a, b, c], the result will be [0, a, a+b, a+b+c] + /// + /// + /// Input array whose elements will be cumulatively added + /// + /// The cumulative sum of the input array. + internal static int[] CumSum(int[] input) + { + var runningSum = 0; + var result = new int[input.Length + 1]; + for (var actionIndex = 0; actionIndex < input.Length; actionIndex++) + { + runningSum += input[actionIndex]; + result[actionIndex + 1] = runningSum; + } + return result; + } + + /// + /// Safely destroy a texture. This has to be used differently in unit tests. + /// + /// + internal static void DestroyTexture(Texture2D texture) + { + if (Application.isEditor) + { + // Edit Mode tests complain if we use Destroy() + UnityEngine.Object.DestroyImmediate(texture); + } + else + { + UnityEngine.Object.Destroy(texture); + } + } + + [Conditional("DEBUG")] + internal static void DebugCheckNanAndInfinity(float value, string valueCategory, string caller) + { + if (float.IsNaN(value)) + { + throw new ArgumentException($"NaN {valueCategory} passed to {caller}."); + } + if (float.IsInfinity(value)) + { + throw new ArgumentException($"Inifinity {valueCategory} passed to {caller}."); + } + } + } +} diff --git a/com.unity.ml-agents/Runtime/Utilities.cs.meta b/com.unity.ml-agents/Runtime/Utilities.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1481e00c44551a8cba9e27bddbb1457fa2feeada --- /dev/null +++ b/com.unity.ml-agents/Runtime/Utilities.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0e664c25f496478c9c26df6688379f7e +timeCreated: 1537468595 \ No newline at end of file diff --git a/com.unity.ml-agents/Samples.meta b/com.unity.ml-agents/Samples.meta new file mode 100644 index 0000000000000000000000000000000000000000..6bfe79069d9db4c48d3302d2e24565e6022a656a --- /dev/null +++ b/com.unity.ml-agents/Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df09abf155607462ebf9ac4697220357 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Samples/3DBall.meta b/com.unity.ml-agents/Samples/3DBall.meta new file mode 100644 index 0000000000000000000000000000000000000000..a52f058ba4395ca2f905facab7bde839cdeb249e --- /dev/null +++ b/com.unity.ml-agents/Samples/3DBall.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7c3ff420d48043aea9c820c1f87c5f7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Samples/3DBall/.sample.json b/com.unity.ml-agents/Samples/3DBall/.sample.json new file mode 100644 index 0000000000000000000000000000000000000000..7055a5b2201ce495337348d94152f417dec2af1a --- /dev/null +++ b/com.unity.ml-agents/Samples/3DBall/.sample.json @@ -0,0 +1 @@ +{"displayName":"3D Ball","description":"The 3D Ball sample is a simple environment that is a great for jumping into ML-Agents to see how things work."} diff --git a/com.unity.ml-agents/Samples/3DBall/3DBall.unitypackage b/com.unity.ml-agents/Samples/3DBall/3DBall.unitypackage new file mode 100644 index 0000000000000000000000000000000000000000..eb4043d19d0de4c3410723fc30919efc348ac52d Binary files /dev/null and b/com.unity.ml-agents/Samples/3DBall/3DBall.unitypackage differ diff --git a/com.unity.ml-agents/Samples/3DBall/3DBall.unitypackage.meta b/com.unity.ml-agents/Samples/3DBall/3DBall.unitypackage.meta new file mode 100644 index 0000000000000000000000000000000000000000..0301d45ba4159d0c6d93aec770dbfd7643dc8108 --- /dev/null +++ b/com.unity.ml-agents/Samples/3DBall/3DBall.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3eff7a05c1c4e459a90f7c9951f7d549 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests.meta b/com.unity.ml-agents/Tests.meta new file mode 100644 index 0000000000000000000000000000000000000000..ffec42d32e87bb0048998faa772078371e9ff6ed --- /dev/null +++ b/com.unity.ml-agents/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2715dc4ceb2c345df9ba92d799ae72ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/.tests.json b/com.unity.ml-agents/Tests/.tests.json new file mode 100644 index 0000000000000000000000000000000000000000..327abb29e523ac0bf5338190d4ca6c9a765838bc --- /dev/null +++ b/com.unity.ml-agents/Tests/.tests.json @@ -0,0 +1,3 @@ +{ + "createSeparatePackage": false +} diff --git a/com.unity.ml-agents/Tests/Editor.meta b/com.unity.ml-agents/Tests/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..9a45234ac07abbc40bc1ebef623d3411001edfbf --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b779986bc10d84f2aa8601a3f1c763ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/AcademyTests.cs b/com.unity.ml-agents/Tests/Editor/AcademyTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..0e1d08014d08e4a9e8984e6e2b0dd3c9cf21d086 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/AcademyTests.cs @@ -0,0 +1,50 @@ +using NUnit.Framework; +using Unity.MLAgents.Sensors; +using UnityEngine; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class AcademyTests + { + [Test] + public void TestPackageVersion() + { + var packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(typeof(Agent).Assembly); + Assert.AreEqual("com.unity.ml-agents", packageInfo.name); + Assert.AreEqual(Academy.k_PackageVersion, packageInfo.version); + } + + class RecursiveAgent : Agent + { + int m_collectObsCount; + public override void CollectObservations(VectorSensor sensor) + { + m_collectObsCount++; + if (m_collectObsCount == 1) + { + // NEVER DO THIS IN REAL CODE! + Academy.Instance.EnvironmentStep(); + } + } + } + + [Test] + public void TestRecursiveStepThrows() + { + var gameObj = new GameObject(); + var agent = gameObj.AddComponent(); + agent.Awake(); + agent.LazyInitialize(); + agent.RequestDecision(); + + Assert.Throws(() => + { + Academy.Instance.EnvironmentStep(); + }); + + // Make sure the Academy reset to a good state and is still steppable. + Academy.Instance.EnvironmentStep(); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/AcademyTests.cs.meta b/com.unity.ml-agents/Tests/Editor/AcademyTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fa65ced67da8c59f2f0fb34e71ba01aeecd792d6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/AcademyTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f434773fe0f1b41c5b3f446fa0adece4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Actuators.meta b/com.unity.ml-agents/Tests/Editor/Actuators.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c6399dc6c3d6aeb56c4272ee183fb12d0476285 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c7e705f7d549e43c6be18ae809cd6f54 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActionSegmentTests.cs b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSegmentTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..6fec579a3450dc7b3fd0c29d0a57b15fb5995e4a --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSegmentTests.cs @@ -0,0 +1,62 @@ +using System; +using NUnit.Framework; +using Unity.MLAgents.Actuators; + +namespace Unity.MLAgents.Tests.Actuators +{ + [TestFixture] + public class ActionSegmentTests + { + [Test] + public void TestConstruction() + { + var floatArray = new[] { 1f, 2f, 3f, 4f, 5f, 6f, 7f }; + Assert.Throws( + () => new ActionSegment(floatArray, 100, 1)); + + var segment = new ActionSegment(Array.Empty(), 0, 0); + Assert.AreEqual(segment, ActionSegment.Empty); + } + + [Test] + public void TestIndexing() + { + var floatArray = new[] { 1f, 2f, 3f, 4f, 5f, 6f, 7f }; + for (var i = 0; i < floatArray.Length; i++) + { + var start = 0 + i; + var length = floatArray.Length - i; + var actionSegment = new ActionSegment(floatArray, start, length); + for (var j = 0; j < actionSegment.Length; j++) + { + Assert.AreEqual(actionSegment[j], floatArray[start + j]); + } + } + } + + [Test] + public void TestEnumerator() + { + var floatArray = new[] { 1f, 2f, 3f, 4f, 5f, 6f, 7f }; + for (var i = 0; i < floatArray.Length; i++) + { + var start = 0 + i; + var length = floatArray.Length - i; + var actionSegment = new ActionSegment(floatArray, start, length); + var j = 0; + foreach (var item in actionSegment) + { + Assert.AreEqual(item, floatArray[start + j++]); + } + } + } + + [Test] + public void TestNullConstructor() + { + var actionSegment = new ActionSegment(null); + Assert.IsTrue(actionSegment.Length == 0); + Assert.IsTrue(actionSegment.Array == Array.Empty()); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActionSegmentTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSegmentTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2332580c178ce327e313cabaa807581f8050e243 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSegmentTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 18cb6d052fba43a2b7437d87c0d9abad +timeCreated: 1596486604 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActionSpecTests.cs b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSpecTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..09dfd336705b08c2ed2041a74fbcc36852fa1ebd --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSpecTests.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Unity.MLAgents.Actuators; + +namespace Unity.MLAgents.Tests.Actuators +{ + [TestFixture] + public class ActionSpecTests + { + [Test] + public void ActionSpecCombineTest() + { + var as0 = new ActionSpec(3, new[] { 3, 2, 1 }); + var as1 = new ActionSpec(1, new[] { 35, 122, 1, 3, 8, 3 }); + + var as0NumCon = 3; + var as0NumDis = as0.NumDiscreteActions; + var as1NumCon = 1; + var as1NumDis = as1.NumDiscreteActions; + var branchSizes = new List(); + branchSizes.AddRange(as0.BranchSizes); + branchSizes.AddRange(as1.BranchSizes); + + var asc = ActionSpec.Combine(as0, as1); + + Assert.AreEqual(as0NumCon + as1NumCon, asc.NumContinuousActions); + Assert.AreEqual(as0NumDis + as1NumDis, asc.NumDiscreteActions); + Assert.IsTrue(branchSizes.ToArray().SequenceEqual(asc.BranchSizes)); + + as0 = new ActionSpec(3); + as1 = new ActionSpec(1); + asc = ActionSpec.Combine(as0, as1); + Assert.IsEmpty(asc.BranchSizes); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActionSpecTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSpecTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..18ebcbb881521f2d42f3bdeb85a59f9f39196df5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActionSpecTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 99d76ec04c944b75bc6b85abfff4ac4e +timeCreated: 1613680505 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorDiscreteActionMaskTests.cs b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorDiscreteActionMaskTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..1c486af483693c7bbdf08a8a307afe3a2f933ee1 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorDiscreteActionMaskTests.cs @@ -0,0 +1,136 @@ +using System.Collections.Generic; +using NUnit.Framework; +using Unity.MLAgents.Actuators; + +namespace Unity.MLAgents.Tests.Actuators +{ + [TestFixture] + public class ActuatorDiscreteActionMaskTests + { + [Test] + public void Construction() + { + var masker = new ActuatorDiscreteActionMask(new List(), 0, 0); + Assert.IsNotNull(masker); + } + + [Test] + public void NullMask() + { + var masker = new ActuatorDiscreteActionMask(new List(), 0, 0); + var mask = masker.GetMask(); + Assert.IsNull(mask); + } + + [Test] + public void FirstBranchMask() + { + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 4, 5, 6 }), "actuator1"); + var masker = new ActuatorDiscreteActionMask(new IActuator[] { actuator1 }, 15, 3); + var mask = masker.GetMask(); + Assert.IsNull(mask); + masker.SetActionEnabled(0, 1, false); + masker.SetActionEnabled(0, 2, false); + masker.SetActionEnabled(0, 3, false); + mask = masker.GetMask(); + Assert.IsFalse(mask[0]); + Assert.IsTrue(mask[1]); + Assert.IsTrue(mask[2]); + Assert.IsTrue(mask[3]); + Assert.IsFalse(mask[4]); + Assert.AreEqual(mask.Length, 15); + } + + [Test] + public void CanOverwriteMask() + { + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 4, 5, 6 }), "actuator1"); + var masker = new ActuatorDiscreteActionMask(new IActuator[] { actuator1 }, 15, 3); + masker.SetActionEnabled(0, 1, false); + var mask = masker.GetMask(); + Assert.IsTrue(mask[1]); + + masker.SetActionEnabled(0, 1, true); + Assert.IsFalse(mask[1]); + } + + [Test] + public void SecondBranchMask() + { + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 4, 5, 6 }), "actuator1"); + var masker = new ActuatorDiscreteActionMask(new[] { actuator1 }, 15, 3); + masker.SetActionEnabled(1, 1, false); + masker.SetActionEnabled(1, 2, false); + masker.SetActionEnabled(1, 3, false); + var mask = masker.GetMask(); + Assert.IsFalse(mask[0]); + Assert.IsFalse(mask[4]); + Assert.IsTrue(mask[5]); + Assert.IsTrue(mask[6]); + Assert.IsTrue(mask[7]); + Assert.IsFalse(mask[8]); + Assert.IsFalse(mask[9]); + } + + [Test] + public void MaskReset() + { + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 4, 5, 6 }), "actuator1"); + var masker = new ActuatorDiscreteActionMask(new IActuator[] { actuator1 }, 15, 3); + masker.SetActionEnabled(1, 1, false); + masker.SetActionEnabled(1, 2, false); + masker.SetActionEnabled(1, 3, false); + masker.ResetMask(); + var mask = masker.GetMask(); + for (var i = 0; i < 15; i++) + { + Assert.IsFalse(mask[i]); + } + } + + [Test] + public void ThrowsError() + { + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 4, 5, 6 }), "actuator1"); + var masker = new ActuatorDiscreteActionMask(new IActuator[] { actuator1 }, 15, 3); + Assert.Catch( + () => masker.SetActionEnabled(0, 5, false)); + Assert.Catch( + () => masker.SetActionEnabled(1, 5, false)); + masker.SetActionEnabled(2, 5, false); + Assert.Catch( + () => masker.SetActionEnabled(3, 1, false)); + masker.GetMask(); + masker.ResetMask(); + masker.SetActionEnabled(0, 0, false); + masker.SetActionEnabled(0, 1, false); + masker.SetActionEnabled(0, 2, false); + masker.SetActionEnabled(0, 3, false); + Assert.Catch( + () => masker.GetMask()); + } + + [Test] + public void MultipleMaskEdit() + { + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 4, 5, 6 }), "actuator1"); + var masker = new ActuatorDiscreteActionMask(new IActuator[] { actuator1 }, 15, 3); + masker.SetActionEnabled(0, 0, false); + masker.SetActionEnabled(0, 1, false); + masker.SetActionEnabled(0, 3, false); + masker.SetActionEnabled(2, 1, false); + var mask = masker.GetMask(); + for (var i = 0; i < 15; i++) + { + if ((i == 0) || (i == 1) || (i == 3) || (i == 10)) + { + Assert.IsTrue(mask[i]); + } + else + { + Assert.IsFalse(mask[i]); + } + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorDiscreteActionMaskTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorDiscreteActionMaskTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a5dd1f3ad99ff8f4b5ea3a08e64de9f48d02d464 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorDiscreteActionMaskTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b9f5f87049d04d8bba39d193a3ab2f5a +timeCreated: 1596491682 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..63791b303cfd30b98d2d47ecf768cfb036f02ec8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs @@ -0,0 +1,352 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using UnityEngine; +using UnityEngine.TestTools; +using Assert = UnityEngine.Assertions.Assert; + +namespace Unity.MLAgents.Tests.Actuators +{ + [TestFixture] + public class ActuatorManagerTests + { + [Test] + public void TestEnsureBufferSizeContinuous() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeContinuous(10), "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeContinuous(2), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + var actuator1ActionSpaceDef = actuator1.ActionSpec; + var actuator2ActionSpaceDef = actuator2.ActionSpec; + manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, + actuator1ActionSpaceDef.NumContinuousActions + actuator2ActionSpaceDef.NumContinuousActions, + actuator1ActionSpaceDef.SumOfDiscreteBranchSizes + actuator2ActionSpaceDef.SumOfDiscreteBranchSizes, + actuator1ActionSpaceDef.NumDiscreteActions + actuator2ActionSpaceDef.NumDiscreteActions); + + manager.UpdateActions(new ActionBuffers(new[] + { 0f, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f }, Array.Empty())); + + Assert.IsTrue(12 == manager.NumContinuousActions); + Assert.IsTrue(0 == manager.NumDiscreteActions); + Assert.IsTrue(0 == manager.SumOfDiscreteBranchSizes); + Assert.IsTrue(12 == manager.StoredActions.ContinuousActions.Length); + Assert.IsTrue(0 == manager.StoredActions.DiscreteActions.Length); + } + + [Test] + public void TestEnsureBufferDiscrete() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 1, 1 }), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + var actuator1ActionSpaceDef = actuator1.ActionSpec; + var actuator2ActionSpaceDef = actuator2.ActionSpec; + manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, + actuator1ActionSpaceDef.NumContinuousActions + actuator2ActionSpaceDef.NumContinuousActions, + actuator1ActionSpaceDef.SumOfDiscreteBranchSizes + actuator2ActionSpaceDef.SumOfDiscreteBranchSizes, + actuator1ActionSpaceDef.NumDiscreteActions + actuator2ActionSpaceDef.NumDiscreteActions); + + manager.UpdateActions(new ActionBuffers(Array.Empty(), + new[] { 0, 1, 2, 3, 4, 5, 6 })); + + Assert.IsTrue(0 == manager.NumContinuousActions); + Assert.IsTrue(7 == manager.NumDiscreteActions); + Assert.IsTrue(13 == manager.SumOfDiscreteBranchSizes); + Assert.IsTrue(0 == manager.StoredActions.ContinuousActions.Length); + Assert.IsTrue(7 == manager.StoredActions.DiscreteActions.Length); + } + + [Test] + public void TestAllowMixedActions() + { + // Make sure discrete + continuous actuators are allowed. + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, 3, 10, 4); + } + + [Test] + public void TestFailOnSameActuatorName() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator1"); + manager.Add(actuator1); + manager.Add(actuator2); + manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, 3, 10, 4); + LogAssert.Expect(LogType.Assert, "Actuator names must be unique."); + } + + [Test] + public void TestExecuteActionsDiscrete() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 1, 1 }), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + + var discreteActionBuffer = new[] { 0, 1, 2, 3, 4, 5, 6 }; + manager.UpdateActions(new ActionBuffers(Array.Empty(), + discreteActionBuffer)); + + manager.ExecuteActions(); + var actuator1Actions = actuator1.LastActionBuffer.DiscreteActions; + var actuator2Actions = actuator2.LastActionBuffer.DiscreteActions; + TestSegmentEquality(actuator1Actions, discreteActionBuffer); TestSegmentEquality(actuator2Actions, discreteActionBuffer); + } + + [Test] + public void TestExecuteActionsContinuous() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + + var continuousActionBuffer = new[] { 0f, 1f, 2f, 3f, 4f, 5f }; + manager.UpdateActions(new ActionBuffers(continuousActionBuffer, + Array.Empty())); + + manager.ExecuteActions(); + var actuator1Actions = actuator1.LastActionBuffer.ContinuousActions; + var actuator2Actions = actuator2.LastActionBuffer.ContinuousActions; + TestSegmentEquality(actuator1Actions, continuousActionBuffer); + TestSegmentEquality(actuator2Actions, continuousActionBuffer); + } + + static void TestSegmentEquality(ActionSegment actionSegment, T[] actionBuffer) + where T : struct + { + Assert.IsFalse(actionSegment.Length == 0); + for (var i = 0; i < actionSegment.Length; i++) + { + var action = actionSegment[i]; + Assert.AreEqual(action, actionBuffer[actionSegment.Offset + i]); + } + } + + [Test] + public void TestUpdateActionsContinuous() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + var continuousActionBuffer = new[] { 0f, 1f, 2f, 3f, 4f, 5f }; + manager.UpdateActions(new ActionBuffers(continuousActionBuffer, + Array.Empty())); + + Assert.IsTrue(manager.StoredActions.ContinuousActions.SequenceEqual(continuousActionBuffer)); + } + + [Test] + public void TestUpdateActionsDiscrete() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + var discreteActionBuffer = new[] { 0, 1, 2, 3, 4, 5 }; + manager.UpdateActions(new ActionBuffers(Array.Empty(), + discreteActionBuffer)); + + Debug.Log(manager.StoredActions.DiscreteActions); + Debug.Log(discreteActionBuffer); + Assert.IsTrue(manager.StoredActions.DiscreteActions.SequenceEqual(discreteActionBuffer)); + } + + [Test] + public void TestRemove() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2"); + + manager.Add(actuator1); + manager.Add(actuator2); + Assert.IsTrue(manager.NumDiscreteActions == 6); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 12); + + manager.Remove(actuator2); + + Assert.IsTrue(manager.NumDiscreteActions == 3); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 6); + + manager.Remove(null); + + Assert.IsTrue(manager.NumDiscreteActions == 3); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 6); + + manager.RemoveAt(0); + Assert.IsTrue(manager.NumDiscreteActions == 0); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 0); + } + + [Test] + public void TestClear() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + + Assert.IsTrue(manager.NumDiscreteActions == 6); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 12); + + manager.Clear(); + + Assert.IsTrue(manager.NumDiscreteActions == 0); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 0); + } + + [Test] + public void TestIndexSet() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2"); + manager.Add(actuator1); + Assert.IsTrue(manager.NumDiscreteActions == 4); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 10); + manager[0] = actuator2; + Assert.IsTrue(manager.NumDiscreteActions == 3); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 6); + } + + [Test] + public void TestInsert() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2"); + manager.Add(actuator1); + Assert.IsTrue(manager.NumDiscreteActions == 4); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 10); + manager.Insert(0, actuator2); + Assert.IsTrue(manager.NumDiscreteActions == 7); + Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 16); + Assert.IsTrue(manager.IndexOf(actuator2) == 0); + } + + [Test] + public void TestResetData() + { + var manager = new ActuatorManager(); + var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3), + "actuator1"); + var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2"); + manager.Add(actuator1); + manager.Add(actuator2); + var continuousActionBuffer = new[] { 0f, 1f, 2f, 3f, 4f, 5f }; + manager.UpdateActions(new ActionBuffers(continuousActionBuffer, + Array.Empty())); + + Assert.IsTrue(manager.StoredActions.ContinuousActions.SequenceEqual(continuousActionBuffer)); + Assert.IsTrue(manager.NumContinuousActions == 6); + manager.ResetData(); + + Assert.IsTrue(manager.StoredActions.ContinuousActions.SequenceEqual(new[] { 0f, 0f, 0f, 0f, 0f, 0f })); + } + + [Test] + public void TestWriteDiscreteActionMask() + { + var manager = new ActuatorManager(2); + var va1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "name"); + var va2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 3, 2, 1 }), "name1"); + manager.Add(va1); + manager.Add(va2); + + var groundTruthMask = new[] + { + false, + true, false, + false, true, true, + true, false, true, + false, true, + false + }; + + va1.Masks = new[] + { + Array.Empty(), + new[] { 0 }, + new[] { 1, 2 } + }; + + va2.Masks = new[] + { + new[] {0, 2}, + new[] {1}, + Array.Empty() + }; + manager.WriteActionMask(); + Assert.IsTrue(groundTruthMask.SequenceEqual(manager.DiscreteActionMask.GetMask())); + } + + [Test] + public void TestHeuristic() + { + var manager = new ActuatorManager(2); + var va1 = new TestActuator(ActionSpec.MakeDiscrete(1, 2, 3), "name"); + var va2 = new TestActuator(ActionSpec.MakeDiscrete(3, 2, 1, 8), "name1"); + manager.Add(va1); + manager.Add(va2); + + var actionBuf = new ActionBuffers(Array.Empty(), new[] { 0, 0, 0, 0, 0, 0, 0 }); + manager.ApplyHeuristic(actionBuf); + + Assert.IsTrue(va1.m_HeuristicCalled); + Assert.AreEqual(va1.m_DiscreteBufferSize, 3); + Assert.IsTrue(va2.m_HeuristicCalled); + Assert.AreEqual(va2.m_DiscreteBufferSize, 4); + } + + /// + /// Test that sensors sort by name consistently across culture settings. + /// Example strings and cultures taken from + /// https://docs.microsoft.com/en-us/globalization/locale/sorting-and-string-comparison + /// + /// + [TestCase("da-DK")] + [TestCase("en-US")] + public void TestSortActuators(string culture) + { + List actuators = new List(); + var actuator0 = new TestActuator(ActionSpec.MakeContinuous(2), "Apple"); + var actuator1 = new TestActuator(ActionSpec.MakeContinuous(2), "Æble"); + actuators.Add(actuator0); + actuators.Add(actuator1); + + var originalCulture = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = new CultureInfo(culture); + ActuatorManager.SortActuators(actuators); + CultureInfo.CurrentCulture = originalCulture; + + Assert.AreEqual(actuator1, actuators[0]); + Assert.AreEqual(actuator0, actuators[1]); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4946ff19fb5f374828dea3f11fc6a0bd0fe64415 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d48ba72f0ac64d7db0af22c9d82b11d8 +timeCreated: 1596494279 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/TestActuator.cs b/com.unity.ml-agents/Tests/Editor/Actuators/TestActuator.cs new file mode 100644 index 0000000000000000000000000000000000000000..643e5131b13807f9bbcb4b3e3db0ce4da27da345 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/TestActuator.cs @@ -0,0 +1,48 @@ +using Unity.MLAgents.Actuators; +namespace Unity.MLAgents.Tests.Actuators +{ + internal class TestActuator : IActuator + { + public ActionBuffers LastActionBuffer; + public int[][] Masks; + public bool m_HeuristicCalled; + public int m_DiscreteBufferSize; + + public TestActuator(ActionSpec actuatorSpace, string name) + { + ActionSpec = actuatorSpace; + + Name = name; + } + + public void OnActionReceived(ActionBuffers actionBuffers) + { + LastActionBuffer = actionBuffers; + } + + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + for (var i = 0; i < Masks.Length; i++) + { + foreach (var actionIndex in Masks[i]) + { + actionMask.SetActionEnabled(i, actionIndex, false); + } + } + } + + public ActionSpec ActionSpec { get; } + + public string Name { get; } + + public void ResetData() + { + } + + public void Heuristic(in ActionBuffers actionBuffersOut) + { + m_HeuristicCalled = true; + m_DiscreteBufferSize = actionBuffersOut.DiscreteActions.Length; + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/TestActuator.cs.meta b/com.unity.ml-agents/Tests/Editor/Actuators/TestActuator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..57e13a0e26c338b7b9f1c972351ecca373953544 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/TestActuator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fa950d7b175749bfa287fd8761dd831f +timeCreated: 1596665978 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/VectorActuatorTests.cs b/com.unity.ml-agents/Tests/Editor/Actuators/VectorActuatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..7fe52951c8337eb961d640751e2aa01950a569f8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/VectorActuatorTests.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Assert = UnityEngine.Assertions.Assert; + +namespace Unity.MLAgents.Tests.Actuators +{ + [TestFixture] + public class VectorActuatorTests + { + class TestActionReceiver : IActionReceiver, IHeuristicProvider + { + public ActionBuffers LastActionBuffers; + public int Branch; + public IList Mask; + public ActionSpec ActionSpec { get; } + public bool HeuristicCalled; + + public void OnActionReceived(ActionBuffers actionBuffers) + { + LastActionBuffers = actionBuffers; + } + + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + foreach (var actionIndex in Mask) + { + actionMask.SetActionEnabled(Branch, actionIndex, false); + } + } + + public void Heuristic(in ActionBuffers actionBuffersOut) + { + HeuristicCalled = true; + } + } + + [Test] + public void TestConstruct() + { + var ar = new TestActionReceiver(); + var va = new VectorActuator(ar, ActionSpec.MakeDiscrete(1, 2, 3), "name"); + + Assert.IsTrue(va.ActionSpec.NumDiscreteActions == 3); + Assert.IsTrue(va.ActionSpec.SumOfDiscreteBranchSizes == 6); + Assert.IsTrue(va.ActionSpec.NumContinuousActions == 0); + + var va1 = new VectorActuator(ar, ActionSpec.MakeContinuous(4), "name"); + + Assert.IsTrue(va1.ActionSpec.NumContinuousActions == 4); + Assert.IsTrue(va1.ActionSpec.SumOfDiscreteBranchSizes == 0); + Assert.AreEqual(va1.Name, "name-Continuous"); + } + + [Test] + public void TestOnActionReceived() + { + var ar = new TestActionReceiver(); + var va = new VectorActuator(ar, ActionSpec.MakeDiscrete(1, 2, 3), "name"); + + var discreteActions = new[] { 0, 1, 1 }; + var ab = new ActionBuffers(ActionSegment.Empty, + new ActionSegment(discreteActions, 0, 3)); + + va.OnActionReceived(ab); + + Assert.AreEqual(ar.LastActionBuffers, ab); + va.ResetData(); + Assert.AreEqual(va.ActionBuffers.ContinuousActions, ActionSegment.Empty); + Assert.AreEqual(va.ActionBuffers.DiscreteActions, ActionSegment.Empty); + } + + [Test] + public void TestResetData() + { + var ar = new TestActionReceiver(); + var va = new VectorActuator(ar, ActionSpec.MakeDiscrete(1, 2, 3), "name"); + + var discreteActions = new[] { 0, 1, 1 }; + var ab = new ActionBuffers(ActionSegment.Empty, + new ActionSegment(discreteActions, 0, 3)); + + va.OnActionReceived(ab); + } + + [Test] + public void TestWriteDiscreteActionMask() + { + var ar = new TestActionReceiver(); + var va = new VectorActuator(ar, ActionSpec.MakeDiscrete(1, 2, 3), "name"); + var bdam = new ActuatorDiscreteActionMask(new[] { va }, 6, 3); + + var groundTruthMask = new[] { false, true, false, false, true, true }; + + ar.Branch = 1; + ar.Mask = new[] { 0 }; + va.WriteDiscreteActionMask(bdam); + ar.Branch = 2; + ar.Mask = new[] { 1, 2 }; + va.WriteDiscreteActionMask(bdam); + + Assert.IsTrue(groundTruthMask.SequenceEqual(bdam.GetMask())); + } + + [Test] + public void TestHeuristic() + { + var ar = new TestActionReceiver(); + var va = new VectorActuator(ar, ActionSpec.MakeDiscrete(1, 2, 3), "name"); + + va.Heuristic(new ActionBuffers(Array.Empty(), va.ActionSpec.BranchSizes)); + Assert.IsTrue(ar.HeuristicCalled); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Actuators/VectorActuatorTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Actuators/VectorActuatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2a5a86efd011175c182fcb114237fad8197eab50 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Actuators/VectorActuatorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c2b191d2929f49adab0769705d49d86a +timeCreated: 1596580289 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Analytics.meta b/com.unity.ml-agents/Tests/Editor/Analytics.meta new file mode 100644 index 0000000000000000000000000000000000000000..473f2be08fefdf920bffb21153e933af4b6f3ab6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Analytics.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: adbf291ff40848a296523d69a5be65a5 +timeCreated: 1607379470 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs b/com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..7686517b6b4849a70b195832ab6d66a133791db3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework; +using Unity.MLAgents.Sensors; +using UnityEngine; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Analytics; +using UnityEditor; + + +namespace Unity.MLAgents.Tests.Analytics +{ + [TestFixture] + public class InferenceAnalyticsTests + { + const string k_continuousONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx"; + NNModel continuousONNXModel; + Test3DSensorComponent sensor_21_20_3; + Test3DSensorComponent sensor_20_22_3; + + ActionSpec GetContinuous2vis8vec2actionActionSpec() + { + return ActionSpec.MakeContinuous(2); + } + + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + + continuousONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_continuousONNXPath, typeof(NNModel)); + var go = new GameObject("SensorA"); + sensor_21_20_3 = go.AddComponent(); + sensor_21_20_3.Sensor = new Test3DSensor("SensorA", 21, 20, 3); + sensor_20_22_3 = go.AddComponent(); + sensor_20_22_3.Sensor = new Test3DSensor("SensorB", 20, 22, 3); + } + + [Test] + public void TestModelEvent() + { + var sensors = new List { sensor_21_20_3.Sensor, sensor_20_22_3.Sensor }; + var behaviorName = "continuousModel"; + var actionSpec = GetContinuous2vis8vec2actionActionSpec(); + + var vectorActuator = new VectorActuator(null, actionSpec, "test'"); + var actuators = new IActuator[] { vectorActuator }; + + var continuousEvent = InferenceAnalytics.GetEventForModel( + continuousONNXModel, behaviorName, + InferenceDevice.CPU, sensors, actionSpec, + actuators + ); + + // The behavior name should be hashed, not pass-through. + Assert.AreNotEqual(behaviorName, continuousEvent.BehaviorName); + + Assert.AreEqual(2, continuousEvent.ActionSpec.NumContinuousActions); + Assert.AreEqual(0, continuousEvent.ActionSpec.NumDiscreteActions); + Assert.AreEqual(2, continuousEvent.ObservationSpecs.Count); + Assert.AreEqual(3, continuousEvent.ObservationSpecs[0].DimensionInfos.Length); + Assert.AreEqual(20, continuousEvent.ObservationSpecs[0].DimensionInfos[0].Size); + Assert.AreEqual(0, continuousEvent.ObservationSpecs[0].ObservationType); + Assert.AreEqual((int)DimensionProperty.TranslationalEquivariance, continuousEvent.ObservationSpecs[0].DimensionInfos[0].Flags); + Assert.AreEqual((int)DimensionProperty.None, continuousEvent.ObservationSpecs[0].DimensionInfos[2].Flags); + Assert.AreEqual("None", continuousEvent.ObservationSpecs[0].CompressionType); + Assert.AreEqual(Test3DSensor.k_BuiltInSensorType, continuousEvent.ObservationSpecs[0].BuiltInSensorType); + Assert.AreEqual((int)BuiltInActuatorType.VectorActuator, continuousEvent.ActuatorInfos[0].BuiltInActuatorType); + Assert.AreNotEqual(null, continuousEvent.ModelHash); + + // Make sure nested fields get serialized + var jsonString = JsonUtility.ToJson(continuousEvent, true); + Assert.IsTrue(jsonString.Contains("ObservationSpecs")); + Assert.IsTrue(jsonString.Contains("ActionSpec")); + Assert.IsTrue(jsonString.Contains("NumDiscreteActions")); + Assert.IsTrue(jsonString.Contains("SensorName")); + Assert.IsTrue(jsonString.Contains("Flags")); + Assert.IsTrue(jsonString.Contains("ActuatorInfos")); + } + + [Test] + public void TestBarracudaPolicy() + { + // Explicitly request decisions for a policy so we get code coverage on the event sending + using (new AnalyticsUtils.DisableAnalyticsSending()) + { + var sensors = new List { sensor_21_20_3.Sensor, sensor_20_22_3.Sensor }; + var policy = new BarracudaPolicy( + GetContinuous2vis8vec2actionActionSpec(), + Array.Empty(), + continuousONNXModel, + InferenceDevice.CPU, + "testBehavior" + ); + policy.RequestDecision(new AgentInfo(), sensors); + } + Academy.Instance.Dispose(); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..20f024f03b11183f33ac49c5ace67c5a0ca3ef31 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9f054f620b8b468bbd8ccf7d2cc14ccd +timeCreated: 1607379491 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..0487a7a524b5ebe2d3ede45476fad1e7f3f9814f --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Analytics; +using Unity.MLAgents.Policies; +using UnityEditor; + +namespace Unity.MLAgents.Tests.Analytics +{ + [TestFixture] + public class TrainingAnalyticsTests + { + [TestCase("foo?team=42", ExpectedResult = "foo")] + [TestCase("foo", ExpectedResult = "foo")] + [TestCase("foo?bar?team=1337", ExpectedResult = "foo?bar")] + public string TestParseBehaviorName(string fullyQualifiedBehaviorName) + { + return TrainingAnalytics.ParseBehaviorName(fullyQualifiedBehaviorName); + } + + [Test] + public void TestRemotePolicyEvent() + { + var behaviorName = "testBehavior"; + var sensor1 = new Test3DSensor("SensorA", 21, 20, 3); + var sensor2 = new Test3DSensor("SensorB", 20, 22, 3); + var sensors = new List { sensor1, sensor2 }; + + var actionSpec = ActionSpec.MakeContinuous(2); + + var vectorActuator = new VectorActuator(null, actionSpec, "test'"); + var actuators = new IActuator[] { vectorActuator }; + + var remotePolicyEvent = TrainingAnalytics.GetEventForRemotePolicy(behaviorName, sensors, actionSpec, actuators); + + // The behavior name should be hashed, not pass-through. + Assert.AreNotEqual(behaviorName, remotePolicyEvent.BehaviorName); + + Assert.AreEqual(2, remotePolicyEvent.ObservationSpecs.Count); + Assert.AreEqual(3, remotePolicyEvent.ObservationSpecs[0].DimensionInfos.Length); + Assert.AreEqual(20, remotePolicyEvent.ObservationSpecs[0].DimensionInfos[0].Size); + Assert.AreEqual(0, remotePolicyEvent.ObservationSpecs[0].ObservationType); + Assert.AreEqual("None", remotePolicyEvent.ObservationSpecs[0].CompressionType); + Assert.AreEqual(Test3DSensor.k_BuiltInSensorType, remotePolicyEvent.ObservationSpecs[0].BuiltInSensorType); + + Assert.AreEqual(2, remotePolicyEvent.ActionSpec.NumContinuousActions); + Assert.AreEqual(0, remotePolicyEvent.ActionSpec.NumDiscreteActions); + + Assert.AreEqual(2, remotePolicyEvent.ActuatorInfos[0].NumContinuousActions); + Assert.AreEqual(0, remotePolicyEvent.ActuatorInfos[0].NumDiscreteActions); + } + + [Test] + public void TestRemotePolicy() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + + using (new AnalyticsUtils.DisableAnalyticsSending()) + { + var actionSpec = ActionSpec.MakeContinuous(3); + var policy = new RemotePolicy(actionSpec, Array.Empty(), "TestBehavior?team=42"); + policy.RequestDecision(new AgentInfo(), new List()); + } + + Academy.Instance.Dispose(); + } + + [TestCase("a name we expect to hash", ExpectedResult = "d084a8b6da6a6a1c097cdc9ffea95e1546da4647352113ed77cbe7b4192e6d73")] + [TestCase("another_name", ExpectedResult = "0b74613c872e79aba11e06eda3538f2b646eb2b459e75087829ea500bd703d0b")] + [TestCase("0b74613c872e79aba11e06eda3538f2b646eb2b459e75087829ea500bd703d0b", ExpectedResult = "0b74613c872e79aba11e06eda3538f2b646eb2b459e75087829ea500bd703d0b")] + public string TestTrainingBehaviorInitialized(string stringToMaybeHash) + { + var tbiEvent = new TrainingBehaviorInitializedEvent(); + tbiEvent.BehaviorName = stringToMaybeHash; + tbiEvent.Config = "{}"; + + var sanitizedEvent = TrainingAnalytics.SanitizeTrainingBehaviorInitializedEvent(tbiEvent); + return sanitizedEvent.BehaviorName; + } + + [Test] + public void TestEnableAnalytics() + { +#if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE + Assert.IsTrue(EditorAnalytics.enabled == TrainingAnalytics.EnableAnalytics()); +#else + Assert.IsFalse(TrainingAnalytics.EnableAnalytics()); +#endif + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs.meta b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..df394c157a66e0e2da47d64adb4cbb90d1424762 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Analytics/TrainingAnalyticsTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 70b8f1544bc34b4e8f1bc1068c64f01c +timeCreated: 1610419546 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Areas.meta b/com.unity.ml-agents/Tests/Editor/Areas.meta new file mode 100644 index 0000000000000000000000000000000000000000..42901a0e6bbff460f671542f11db5ea7f7f4bdef --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Areas.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d32a102dc1f004c33b05a30190a9d039 +timeCreated: 1632841906 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Areas/TrainingAreaReplicatorTests.cs b/com.unity.ml-agents/Tests/Editor/Areas/TrainingAreaReplicatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..1daeb980ee980b8caecba0d75a894518a227c00a --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Areas/TrainingAreaReplicatorTests.cs @@ -0,0 +1,83 @@ +using System.Linq; +using NUnit.Framework; +using Unity.Mathematics; +using Unity.MLAgents.Areas; +using UnityEngine; + +namespace Unity.MLAgents.Tests.Areas +{ + [TestFixture] + public class TrainingAreaReplicatorTests + { + TrainingAreaReplicator m_Replicator; + + [SetUp] + public void Setup() + { + var gameObject = new GameObject(); + var trainingArea = new GameObject(); + trainingArea.name = "MyTrainingArea"; + m_Replicator = gameObject.AddComponent(); + m_Replicator.baseArea = trainingArea; + } + + [TearDown] + public void TearDown() + { + var trainingAreas = Resources.FindObjectsOfTypeAll().Where(obj => obj.name == m_Replicator.TrainingAreaName); + foreach (var trainingArea in trainingAreas) + { + Object.DestroyImmediate(trainingArea); + } + m_Replicator = null; + } + + private static object[] NumAreasCases = + { + new object[] {1}, + new object[] {2}, + new object[] {5}, + new object[] {7}, + new object[] {8}, + new object[] {64}, + new object[] {63}, + }; + + [TestCaseSource(nameof(NumAreasCases))] + public void TestComputeGridSize(int numAreas) + { + m_Replicator.numAreas = numAreas; + m_Replicator.Awake(); + m_Replicator.OnEnable(); + var m_CorrectGridSize = int3.zero; + var m_RootNumAreas = Mathf.Pow(numAreas, 1.0f / 3.0f); + m_CorrectGridSize.x = Mathf.CeilToInt(m_RootNumAreas); + m_CorrectGridSize.y = Mathf.CeilToInt(m_RootNumAreas); + m_CorrectGridSize.z = Mathf.CeilToInt((float)numAreas / (m_CorrectGridSize.x * m_CorrectGridSize.y)); + Assert.GreaterOrEqual(m_Replicator.GridSize.x * m_Replicator.GridSize.y * m_Replicator.GridSize.z, m_Replicator.numAreas); + Assert.AreEqual(m_CorrectGridSize, m_Replicator.GridSize); + } + + [Test] + public void TestAddEnvironments() + { + m_Replicator.numAreas = 10; + m_Replicator.buildOnly = false; + m_Replicator.Awake(); + m_Replicator.OnEnable(); + var trainingAreas = Resources.FindObjectsOfTypeAll().Where(obj => obj.name == m_Replicator.TrainingAreaName); + Assert.AreEqual(10, trainingAreas.Count()); + } + + [Test] + public void TestAddEnvironmentsBuildOnly() + { + m_Replicator.numAreas = 10; + m_Replicator.buildOnly = true; + m_Replicator.Awake(); + m_Replicator.OnEnable(); + var trainingAreas = Resources.FindObjectsOfTypeAll().Where(obj => obj.name == m_Replicator.TrainingAreaName); + Assert.AreEqual(1, trainingAreas.Count()); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Areas/TrainingAreaReplicatorTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Areas/TrainingAreaReplicatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4ebc4ba4d109cb07725de74739fdc04e210acc24 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Areas/TrainingAreaReplicatorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 391a03d82068e44b5bba0ca55215b0c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/BehaviorParameterTests.cs b/com.unity.ml-agents/Tests/Editor/BehaviorParameterTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..78f5891785d09c6c1bb084429c440b1c519ed2cb --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/BehaviorParameterTests.cs @@ -0,0 +1,76 @@ +using NUnit.Framework; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using UnityEngine; +using Unity.MLAgents.Policies; +using UnityEditor; +using UnityEngine.TestTools; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class BehaviorParameterTests : IHeuristicProvider + { + const string k_continuousONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx"; + public void Heuristic(in ActionBuffers actionsOut) + { + // No-op + } + + [Test] + public void TestNoModelInferenceOnlyThrows() + { + var gameObj = new GameObject(); + var bp = gameObj.AddComponent(); + bp.BehaviorType = BehaviorType.InferenceOnly; + var actionSpec = new ActionSpec(); + + Assert.Throws(() => + { + bp.GeneratePolicy(actionSpec, new ActuatorManager()); + }); + } + + [Test] + public void TestIsInHeuristicMode() + { + var gameObj = new GameObject(); + var bp = gameObj.AddComponent(); + bp.Model = null; + gameObj.AddComponent(); + bp.BehaviorType = BehaviorType.HeuristicOnly; + Assert.IsTrue(bp.IsInHeuristicMode()); + + bp.BehaviorType = BehaviorType.Default; + Assert.IsTrue(bp.IsInHeuristicMode()); + + bp.Model = ScriptableObject.CreateInstance(); + Assert.IsFalse(bp.IsInHeuristicMode()); + } + + [Test] + public void TestPolicyUpdateEventFired() + { + var gameObj = new GameObject(); + var bp = gameObj.AddComponent(); + gameObj.AddComponent().LazyInitialize(); + bp.OnPolicyUpdated += delegate (bool isInHeuristicMode) { Debug.Log($"OnPolicyChanged:{isInHeuristicMode}"); }; + bp.BehaviorType = BehaviorType.HeuristicOnly; + LogAssert.Expect(LogType.Log, $"OnPolicyChanged:{true}"); + + bp.BehaviorType = BehaviorType.Default; + LogAssert.Expect(LogType.Log, $"OnPolicyChanged:{true}"); + + Assert.Throws(() => + { + bp.BehaviorType = BehaviorType.InferenceOnly; + }); + + bp.Model = AssetDatabase.LoadAssetAtPath(k_continuousONNXPath); + LogAssert.Expect(LogType.Log, $"OnPolicyChanged:{false}"); + + bp.BehaviorType = BehaviorType.HeuristicOnly; + LogAssert.Expect(LogType.Log, $"OnPolicyChanged:{true}"); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/BehaviorParameterTests.cs.meta b/com.unity.ml-agents/Tests/Editor/BehaviorParameterTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0656104d8cba5cfe3fccfeca12b082d00c1c3bf2 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/BehaviorParameterTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 877266b9e1bfe4330a68ab5f2da1836b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Communicator.meta b/com.unity.ml-agents/Tests/Editor/Communicator.meta new file mode 100644 index 0000000000000000000000000000000000000000..170d273a27c4c1ed34295947e03911dd1f1dbce1 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: da8f640243c749388a0329393c8fce64 +timeCreated: 1586386315 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Communicator/GrpcExtensionsTests.cs b/com.unity.ml-agents/Tests/Editor/Communicator/GrpcExtensionsTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..34bd3caaea78cefa5d551520bbe41bb3b28548c6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator/GrpcExtensionsTests.cs @@ -0,0 +1,276 @@ +using System; +using System.Text.RegularExpressions; +using Google.Protobuf; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Demonstrations; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; + +using Unity.MLAgents.Analytics; +using Unity.MLAgents.CommunicatorObjects; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class GrpcExtensionsTests + { + [SetUp] + public void SetUp() + { + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); + } + + [Test] + public void TestDefaultBrainParametersToProto() + { + // Should be able to convert a default instance to proto. + var brain = new BrainParameters(); + brain.ToProto("foo", false); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + brain.ToProto("foo", false); + } + + [Test] + public void TestDefaultActionSpecToProto() + { + // Should be able to convert a default instance to proto. + var actionSpec = new ActionSpec(); + actionSpec.ToBrainParametersProto("foo", false); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + actionSpec.ToBrainParametersProto("foo", false); + + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); + // Continuous + actionSpec = ActionSpec.MakeContinuous(3); + actionSpec.ToBrainParametersProto("foo", false); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + actionSpec.ToBrainParametersProto("foo", false); + + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); + + // Discrete + actionSpec = ActionSpec.MakeDiscrete(1, 2, 3); + actionSpec.ToBrainParametersProto("foo", false); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + actionSpec.ToBrainParametersProto("foo", false); + } + + [Test] + public void ToBrainParameters() + { + // Should be able to convert a default instance to proto. + var actionSpec = new ActionSpec(); + actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); + + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); + // Continuous + actionSpec = ActionSpec.MakeContinuous(3); + actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); + + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities(); + + // Discrete + actionSpec = ActionSpec.MakeDiscrete(1, 2, 3); + actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + HybridActions = false + }; + actionSpec.ToBrainParametersProto("foo", false).ToBrainParameters(); + } + + [Test] + public void TestDefaultAgentInfoToProto() + { + // Should be able to convert a default instance to proto. + var agentInfo = new AgentInfo(); + var pairProto = agentInfo.ToInfoActionPairProto(); + pairProto.AgentInfo.Observations.Add(new ObservationProto + { + CompressedData = ByteString.Empty, + CompressionType = CompressionTypeProto.None, + FloatData = new ObservationProto.Types.FloatData(), + ObservationType = ObservationTypeProto.Default, + Name = "Sensor" + }); + pairProto.AgentInfo.Observations[0].Shape.Add(0); + pairProto.GetObservationSummaries(); + agentInfo.ToAgentInfoProto(); + agentInfo.groupId = 1; + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + MultiAgentGroups = false + }; + agentInfo.ToAgentInfoProto(); + LogAssert.Expect(LogType.Warning, new Regex(".+")); + Academy.Instance.TrainerCapabilities = new UnityRLCapabilities + { + BaseRLCapabilities = true, + MultiAgentGroups = true + }; + agentInfo.ToAgentInfoProto(); + } + + [Test] + public void TestDefaultDemonstrationMetaDataToProto() + { + // Should be able to convert a default instance to proto. + var demoMetaData = new DemonstrationMetaData(); + demoMetaData.ToProto(); + } + + class DummySensor : ISensor + { + public ObservationSpec ObservationSpec; + public SensorCompressionType CompressionType; + + public ObservationSpec GetObservationSpec() + { + return ObservationSpec; + } + + public int Write(ObservationWriter writer) + { + return 0; + } + + public byte[] GetCompressedObservation() + { + return new byte[] { 13, 37 }; + } + + public void Update() { } + + public void Reset() { } + + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(CompressionType); + } + + public string GetName() + { + return "Dummy"; + } + } + + [Test] + public void TestGetObservationProtoCapabilities() + { + // Shape, compression type, concatenatedPngObservations, expect throw + var variants = new[] + { + // Vector observations + (new[] {3}, SensorCompressionType.None, false, false), + // Uncompressed floats + (new[] {4, 4, 3}, SensorCompressionType.None, false, false), + // Compressed floats, 3 channels + (new[] {4, 4, 3}, SensorCompressionType.PNG, false, true), + + // Compressed floats, >3 channels + (new[] {4, 4, 4}, SensorCompressionType.PNG, false, false), // Unsupported - results in uncompressed + (new[] {4, 4, 4}, SensorCompressionType.PNG, true, true), // Supported compressed + }; + + foreach (var (shape, compressionType, supportsMultiPngObs, expectCompressed) in variants) + { + var inplaceShape = InplaceArray.FromList(shape); + var dummySensor = new DummySensor(); + var obsWriter = new ObservationWriter(); + + if (shape.Length == 1) + { + dummySensor.ObservationSpec = ObservationSpec.Vector(shape[0]); + } + else if (shape.Length == 3) + { + dummySensor.ObservationSpec = ObservationSpec.Visual(shape[0], shape[1], shape[2]); + } + else + { + throw new ArgumentOutOfRangeException(); + } + dummySensor.CompressionType = compressionType; + obsWriter.SetTarget(new float[128], inplaceShape, 0); + + var caps = new UnityRLCapabilities + { + ConcatenatedPngObservations = supportsMultiPngObs + }; + Academy.Instance.TrainerCapabilities = caps; + + + var obsProto = dummySensor.GetObservationProto(obsWriter); + if (expectCompressed) + { + Assert.Greater(obsProto.CompressedData.Length, 0); + Assert.AreEqual(obsProto.FloatData, null); + } + else + { + Assert.Greater(obsProto.FloatData.Data.Count, 0); + Assert.AreEqual(obsProto.CompressedData.Length, 0); + } + } + } + + [Test] + public void TestDefaultTrainingEvents() + { + var trainingEnvInit = new TrainingEnvironmentInitialized + { + PythonVersion = "test", + }; + var trainingEnvInitEvent = trainingEnvInit.ToTrainingEnvironmentInitializedEvent(); + Assert.AreEqual(trainingEnvInit.PythonVersion, trainingEnvInitEvent.TrainerPythonVersion); + + var trainingBehavInit = new TrainingBehaviorInitialized + { + BehaviorName = "testBehavior", + ExtrinsicRewardEnabled = true, + CuriosityRewardEnabled = true, + + RecurrentEnabled = true, + SelfPlayEnabled = true, + }; + var trainingBehavInitEvent = trainingBehavInit.ToTrainingBehaviorInitializedEvent(); + Assert.AreEqual(trainingBehavInit.BehaviorName, trainingBehavInitEvent.BehaviorName); + + Assert.AreEqual(RewardSignals.Extrinsic | RewardSignals.Curiosity, trainingBehavInitEvent.RewardSignalFlags); + Assert.AreEqual(TrainingFeatures.Recurrent | TrainingFeatures.SelfPlay, trainingBehavInitEvent.TrainingFeatureFlags); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Communicator/GrpcExtensionsTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Communicator/GrpcExtensionsTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..411f1cd45ec165f8539030dbd355a5caabc54dad --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator/GrpcExtensionsTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7aa28d0e370064c18bb8a913417ad21d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs b/com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..937c8555fad4434504a21c565cfcdaa6831e4521 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs @@ -0,0 +1,40 @@ +using NUnit.Framework; +using UnityEngine.TestTools; + +namespace Unity.MLAgents.Tests.Communicator +{ + [TestFixture] + public class RpcCommunicatorTests + { + [Test] + public void TestCheckCommunicationVersionsAreCompatible() + { + var unityVerStr = "1.0.0"; + var pythonVerStr = "1.0.0"; + + Assert.IsTrue(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr, + pythonVerStr)); + LogAssert.NoUnexpectedReceived(); + + pythonVerStr = "1.1.0"; + Assert.IsTrue(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr, + pythonVerStr)); + LogAssert.NoUnexpectedReceived(); + + unityVerStr = "2.0.0"; + Assert.IsFalse(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr, + pythonVerStr)); + + unityVerStr = "0.15.0"; + pythonVerStr = "0.15.0"; + Assert.IsTrue(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr, + pythonVerStr)); + unityVerStr = "0.16.0"; + Assert.IsFalse(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr, + pythonVerStr)); + unityVerStr = "1.15.0"; + Assert.IsFalse(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr, + pythonVerStr)); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1d0689e5cb7e83378b85c80616d0b15c264a6b8e --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 251fab8dff424abb95b2b381c7c924c3 +timeCreated: 1586386329 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Communicator/UnityRLCapabilitiesTests.cs b/com.unity.ml-agents/Tests/Editor/Communicator/UnityRLCapabilitiesTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..402ceda612f886b72f2be9bfcd2005d5b8e2d087 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator/UnityRLCapabilitiesTests.cs @@ -0,0 +1,22 @@ +using System.Text.RegularExpressions; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Unity.MLAgents.Tests.Communicator +{ + [TestFixture] + public class UnityRLCapabilitiesTests + { + [Test] + public void TestWarnOnPythonMissingBaseRLCapabilities() + { + var caps = new UnityRLCapabilities(); + Assert.False(caps.WarnOnPythonMissingBaseRLCapabilities()); + LogAssert.NoUnexpectedReceived(); + caps = new UnityRLCapabilities(false); + Assert.True(caps.WarnOnPythonMissingBaseRLCapabilities()); + LogAssert.Expect(LogType.Warning, new Regex(".+")); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Communicator/UnityRLCapabilitiesTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Communicator/UnityRLCapabilitiesTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fc7b8cec7ad9bd6ab590872c2376558e0147a54e --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Communicator/UnityRLCapabilitiesTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e6a3e82911b84029a446dcfd2d8af520 +timeCreated: 1587695055 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs b/com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..55060f5645d20ea4befd058c884785d52b783729 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs @@ -0,0 +1,150 @@ +using NUnit.Framework; +using UnityEngine; +using System.IO.Abstractions.TestingHelpers; +using System.Reflection; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.CommunicatorObjects; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Demonstrations; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Utils.Tests; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class DemonstrationTests + { + const string k_DemoDirectory = "Assets/Demonstrations/"; + const string k_ExtensionType = ".demo"; + const string k_DemoName = "Test"; + + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [Test] + public void TestSanitization() + { + const string dirtyString = "abc1234567&!@"; + const string knownCleanString = "abc123"; + var cleanString = DemonstrationRecorder.SanitizeName(dirtyString, 6); + Assert.AreNotEqual(dirtyString, cleanString); + Assert.AreEqual(cleanString, knownCleanString); + } + + [Test] + public void TestStoreInitialize() + { + var fileSystem = new MockFileSystem(); + + var gameobj = new GameObject("gameObj"); + + var bp = gameobj.AddComponent(); + bp.BrainParameters.VectorObservationSize = 3; + bp.BrainParameters.NumStackedVectorObservations = 2; + bp.BrainParameters.VectorActionDescriptions = new[] { "TestActionA", "TestActionB" }; + bp.BrainParameters.ActionSpec = ActionSpec.MakeDiscrete(2, 2); + + gameobj.AddComponent(); + + Assert.IsFalse(fileSystem.Directory.Exists(k_DemoDirectory)); + + var demoRec = gameobj.AddComponent(); + demoRec.Record = true; + demoRec.DemonstrationName = k_DemoName; + demoRec.DemonstrationDirectory = k_DemoDirectory; + var demoWriter = demoRec.LazyInitialize(fileSystem); + + Assert.IsTrue(fileSystem.Directory.Exists(k_DemoDirectory)); + Assert.IsTrue(fileSystem.FileExists(k_DemoDirectory + k_DemoName + k_ExtensionType)); + + var agentInfo = new AgentInfo + { + reward = 1f, + discreteActionMasks = new[] { false, true }, + done = true, + episodeId = 5, + maxStepReached = true, + storedActions = new ActionBuffers(null, new[] { 0, 1 }), + }; + + + demoWriter.Record(agentInfo, new System.Collections.Generic.List()); + demoRec.Close(); + + // Make sure close can be called multiple times + demoWriter.Close(); + demoRec.Close(); + + // Make sure trying to write after closing doesn't raise an error. + demoWriter.Record(agentInfo, new System.Collections.Generic.List()); + } + + public class ObservationAgent : TestAgent + { + public override void CollectObservations(VectorSensor sensor) + { + collectObservationsCalls += 1; + sensor.AddObservation(1f); + sensor.AddObservation(2f); + sensor.AddObservation(3f); + } + } + + [Test] + public void TestAgentWrite() + { + var agentGo1 = new GameObject("TestAgent"); + var bpA = agentGo1.AddComponent(); + bpA.BrainParameters.VectorObservationSize = 3; + bpA.BrainParameters.NumStackedVectorObservations = 1; + bpA.BrainParameters.VectorActionDescriptions = new[] { "TestActionA", "TestActionB" }; + bpA.BrainParameters.ActionSpec = ActionSpec.MakeDiscrete(2, 2); + + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + + agentGo1.AddComponent(); + var demoRecorder = agentGo1.GetComponent(); + var fileSystem = new MockFileSystem(); + demoRecorder.DemonstrationDirectory = k_DemoDirectory; + demoRecorder.DemonstrationName = "TestBrain"; + demoRecorder.Record = true; + demoRecorder.LazyInitialize(fileSystem); + + var agentEnableMethod = typeof(Agent).GetMethod("OnEnable", + BindingFlags.Instance | BindingFlags.NonPublic); + var agentSendInfo = typeof(Agent).GetMethod("SendInfo", + BindingFlags.Instance | BindingFlags.NonPublic); + + agentEnableMethod?.Invoke(agent1, new object[] { }); + + // Step the agent + agent1.RequestDecision(); + agentSendInfo?.Invoke(agent1, new object[] { }); + + demoRecorder.Close(); + + // Read back the demo file and make sure observations were written + var reader = fileSystem.File.OpenRead("Assets/Demonstrations/TestBrain.demo"); + reader.Seek(DemonstrationWriter.MetaDataBytes + 1, 0); + BrainParametersProto.Parser.ParseDelimitedFrom(reader); + + var agentInfoProto = AgentInfoActionPairProto.Parser.ParseDelimitedFrom(reader).AgentInfo; + var obs = agentInfoProto.Observations[2]; // skip dummy sensors + { + var vecObs = obs.FloatData.Data; + Assert.AreEqual(bpA.BrainParameters.VectorObservationSize, vecObs.Count); + for (var i = 0; i < vecObs.Count; i++) + { + Assert.AreEqual((float)i + 1, vecObs[i]); + } + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs.meta b/com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..434861ff9b9625cff65d36e94a54d5c49d89bfa5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c5a970f5b6be4b57b3bd7a5f84c3623 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Inference.meta b/com.unity.ml-agents/Tests/Editor/Inference.meta new file mode 100644 index 0000000000000000000000000000000000000000..1427471ab066360cb0a8226fb0a4fe50749bab5c --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b8fc3bc69d3a4cd9a66ad334f944fb2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Inference/DiscreteActionOutputApplierTest.cs b/com.unity.ml-agents/Tests/Editor/Inference/DiscreteActionOutputApplierTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..aa3fc8c40d8b0113402dca7ddca76c8e977e8521 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/DiscreteActionOutputApplierTest.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using Unity.Barracuda; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; + +namespace Unity.MLAgents.Tests +{ + public class DiscreteActionOutputApplierTest + { + [Test] + public void TestDiscreteApply() + { + var actionSpec = ActionSpec.MakeDiscrete(3, 2); + + var applier = new DiscreteActionOutputApplier(actionSpec, 2020, null); + var agentIds = new List { 42, 1337 }; + var actionBuffers = new Dictionary(); + actionBuffers[42] = new ActionBuffers(actionSpec); + actionBuffers[1337] = new ActionBuffers(actionSpec); + + var actionTensor = new TensorProxy + { + data = new Tensor( + 2, + 2, + new[] + { + 2.0f, // Agent 0, branch 0 + 1.0f, // Agent 0, branch 1 + 0.0f, // Agent 1, branch 0 + 0.0f // Agent 1, branch 1 + }), + shape = new long[] { 2, 2 }, + valueType = TensorProxy.TensorType.FloatingPoint + }; + + applier.Apply(actionTensor, agentIds, actionBuffers); + Assert.AreEqual(2, actionBuffers[42].DiscreteActions[0]); + Assert.AreEqual(1, actionBuffers[42].DiscreteActions[1]); + + Assert.AreEqual(0, actionBuffers[1337].DiscreteActions[0]); + Assert.AreEqual(0, actionBuffers[1337].DiscreteActions[1]); + } + } + + public class LegacyDiscreteActionOutputApplierTest + { + [Test] + public void TestDiscreteApply() + { + var actionSpec = ActionSpec.MakeDiscrete(3, 2); + const float smallLogProb = -1000.0f; + const float largeLogProb = -1.0f; + + var logProbs = new TensorProxy + { + data = new Tensor( + 2, + 5, + new[] + { + smallLogProb, smallLogProb, largeLogProb, // Agent 0, branch 0 + smallLogProb, largeLogProb, // Agent 0, branch 1 + largeLogProb, smallLogProb, smallLogProb, // Agent 1, branch 0 + largeLogProb, smallLogProb, // Agent 1, branch 1 + }), + valueType = TensorProxy.TensorType.FloatingPoint + }; + + var applier = new LegacyDiscreteActionOutputApplier(actionSpec, 2020, null); + var agentIds = new List { 42, 1337 }; + var actionBuffers = new Dictionary(); + actionBuffers[42] = new ActionBuffers(actionSpec); + actionBuffers[1337] = new ActionBuffers(actionSpec); + + applier.Apply(logProbs, agentIds, actionBuffers); + Assert.AreEqual(2, actionBuffers[42].DiscreteActions[0]); + Assert.AreEqual(1, actionBuffers[42].DiscreteActions[1]); + + Assert.AreEqual(0, actionBuffers[1337].DiscreteActions[0]); + Assert.AreEqual(0, actionBuffers[1337].DiscreteActions[1]); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Inference/DiscreteActionOutputApplierTest.cs.meta b/com.unity.ml-agents/Tests/Editor/Inference/DiscreteActionOutputApplierTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac93a50aaba54c1924c30d7c96b2e53b58e226f5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/DiscreteActionOutputApplierTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa4c4ceac5f246a0b341958724ecd752 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorApplier.cs b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorApplier.cs new file mode 100644 index 0000000000000000000000000000000000000000..e679254908c1ed20168ae274e7e826fd7c55855a --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorApplier.cs @@ -0,0 +1,200 @@ +using System.Collections.Generic; +using NUnit.Framework; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; + +namespace Unity.MLAgents.Tests +{ + public class EditModeTestInternalBrainTensorApplier + { + class TestAgent : Agent + { + } + + [Test] + public void Construction() + { + var actionSpec = new ActionSpec(); + var alloc = new TensorCachingAllocator(); + var mem = new Dictionary>(); + var tensorGenerator = new TensorApplier(actionSpec, 0, alloc, mem); + Assert.IsNotNull(tensorGenerator); + alloc.Dispose(); + } + + [Test] + public void ApplyContinuousActionOutput() + { + var actionSpec = ActionSpec.MakeContinuous(3); + var inputTensor = new TensorProxy() + { + shape = new long[] { 2, 3 }, + data = new Tensor(2, 3, new float[] { 1, 2, 3, 4, 5, 6 }) + }; + + var applier = new ContinuousActionOutputApplier(actionSpec); + + var agentIds = new List() { 0, 1 }; + // Dictionary from AgentId to Action + var actionDict = new Dictionary() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; + + applier.Apply(inputTensor, agentIds, actionDict); + + + Assert.AreEqual(actionDict[0].ContinuousActions[0], 1); + Assert.AreEqual(actionDict[0].ContinuousActions[1], 2); + Assert.AreEqual(actionDict[0].ContinuousActions[2], 3); + + Assert.AreEqual(actionDict[1].ContinuousActions[0], 4); + Assert.AreEqual(actionDict[1].ContinuousActions[1], 5); + Assert.AreEqual(actionDict[1].ContinuousActions[2], 6); + } + + [Test] + public void ApplyDiscreteActionOutputLegacy() + { + var actionSpec = ActionSpec.MakeDiscrete(2, 3); + var inputTensor = new TensorProxy() + { + shape = new long[] { 2, 5 }, + data = new Tensor( + 2, + 5, + new[] { 0.5f, 22.5f, 0.1f, 5f, 1f, 4f, 5f, 6f, 7f, 8f }) + }; + var alloc = new TensorCachingAllocator(); + var applier = new LegacyDiscreteActionOutputApplier(actionSpec, 0, alloc); + + var agentIds = new List() { 0, 1 }; + // Dictionary from AgentId to Action + var actionDict = new Dictionary() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; + + + applier.Apply(inputTensor, agentIds, actionDict); + + Assert.AreEqual(actionDict[0].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[0].DiscreteActions[1], 1); + + Assert.AreEqual(actionDict[1].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[1].DiscreteActions[1], 2); + alloc.Dispose(); + } + + [Test] + public void ApplyDiscreteActionOutput() + { + var actionSpec = ActionSpec.MakeDiscrete(2, 3); + var inputTensor = new TensorProxy() + { + shape = new long[] { 2, 2 }, + data = new Tensor( + 2, + 2, + new[] { 1f, 1f, 1f, 2f }), + }; + var alloc = new TensorCachingAllocator(); + var applier = new DiscreteActionOutputApplier(actionSpec, 0, alloc); + + var agentIds = new List() { 0, 1 }; + // Dictionary from AgentId to Action + var actionDict = new Dictionary() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; + + + applier.Apply(inputTensor, agentIds, actionDict); + + Assert.AreEqual(actionDict[0].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[0].DiscreteActions[1], 1); + + Assert.AreEqual(actionDict[1].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[1].DiscreteActions[1], 2); + alloc.Dispose(); + } + + [Test] + public void ApplyHybridActionOutputLegacy() + { + var actionSpec = new ActionSpec(3, new[] { 2, 3 }); + var continuousInputTensor = new TensorProxy() + { + shape = new long[] { 2, 3 }, + data = new Tensor(2, 3, new float[] { 1, 2, 3, 4, 5, 6 }) + }; + var discreteInputTensor = new TensorProxy() + { + shape = new long[] { 2, 8 }, + data = new Tensor( + 2, + 5, + new[] { 0.5f, 22.5f, 0.1f, 5f, 1f, 4f, 5f, 6f, 7f, 8f }) + }; + var continuousApplier = new ContinuousActionOutputApplier(actionSpec); + var alloc = new TensorCachingAllocator(); + var discreteApplier = new LegacyDiscreteActionOutputApplier(actionSpec, 0, alloc); + + var agentIds = new List() { 0, 1 }; + // Dictionary from AgentId to Action + var actionDict = new Dictionary() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; + + + continuousApplier.Apply(continuousInputTensor, agentIds, actionDict); + discreteApplier.Apply(discreteInputTensor, agentIds, actionDict); + + Assert.AreEqual(actionDict[0].ContinuousActions[0], 1); + Assert.AreEqual(actionDict[0].ContinuousActions[1], 2); + Assert.AreEqual(actionDict[0].ContinuousActions[2], 3); + Assert.AreEqual(actionDict[0].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[0].DiscreteActions[1], 1); + + Assert.AreEqual(actionDict[1].ContinuousActions[0], 4); + Assert.AreEqual(actionDict[1].ContinuousActions[1], 5); + Assert.AreEqual(actionDict[1].ContinuousActions[2], 6); + Assert.AreEqual(actionDict[1].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[1].DiscreteActions[1], 2); + alloc.Dispose(); + } + + [Test] + public void ApplyHybridActionOutput() + { + var actionSpec = new ActionSpec(3, new[] { 2, 3 }); + var continuousInputTensor = new TensorProxy() + { + shape = new long[] { 2, 3 }, + data = new Tensor(2, 3, new float[] { 1, 2, 3, 4, 5, 6 }) + }; + var discreteInputTensor = new TensorProxy() + { + shape = new long[] { 2, 2 }, + data = new Tensor( + 2, + 2, + new[] { 1f, 1f, 1f, 2f }), + }; + var continuousApplier = new ContinuousActionOutputApplier(actionSpec); + var alloc = new TensorCachingAllocator(); + var discreteApplier = new DiscreteActionOutputApplier(actionSpec, 0, alloc); + + var agentIds = new List() { 0, 1 }; + // Dictionary from AgentId to Action + var actionDict = new Dictionary() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; + + + continuousApplier.Apply(continuousInputTensor, agentIds, actionDict); + discreteApplier.Apply(discreteInputTensor, agentIds, actionDict); + + Assert.AreEqual(actionDict[0].ContinuousActions[0], 1); + Assert.AreEqual(actionDict[0].ContinuousActions[1], 2); + Assert.AreEqual(actionDict[0].ContinuousActions[2], 3); + Assert.AreEqual(actionDict[0].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[0].DiscreteActions[1], 1); + + Assert.AreEqual(actionDict[1].ContinuousActions[0], 4); + Assert.AreEqual(actionDict[1].ContinuousActions[1], 5); + Assert.AreEqual(actionDict[1].ContinuousActions[2], 6); + Assert.AreEqual(actionDict[1].DiscreteActions[0], 1); + Assert.AreEqual(actionDict[1].DiscreteActions[1], 2); + alloc.Dispose(); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorApplier.cs.meta b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorApplier.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5f80c46f6ded8f0adf5d1a112bdf12191fba7f22 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorApplier.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be419f7ed5c24b24a6f2636d3b107535 +timeCreated: 1537915674 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorGenerator.cs b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..579a204c4bbb7f3e5ff11ed9a6edc27c690a75d7 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorGenerator.cs @@ -0,0 +1,191 @@ +using System.Collections.Generic; +using Unity.Barracuda; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Utils.Tests; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class EditModeTestInternalBrainTensorGenerator + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + static List GetFakeAgents(ObservableAttributeOptions observableAttributeOptions = ObservableAttributeOptions.Ignore) + { + var goA = new GameObject("goA"); + var bpA = goA.AddComponent(); + bpA.BrainParameters.VectorObservationSize = 3; + bpA.BrainParameters.NumStackedVectorObservations = 1; + bpA.ObservableAttributeHandling = observableAttributeOptions; + var agentA = goA.AddComponent(); + + var goB = new GameObject("goB"); + var bpB = goB.AddComponent(); + bpB.BrainParameters.VectorObservationSize = 3; + bpB.BrainParameters.NumStackedVectorObservations = 1; + bpB.ObservableAttributeHandling = observableAttributeOptions; + var agentB = goB.AddComponent(); + + var agents = new List { agentA, agentB }; + foreach (var agent in agents) + { + agent.LazyInitialize(); + } + agentA.collectObservationsSensor.AddObservation(new Vector3(1, 2, 3)); + agentB.collectObservationsSensor.AddObservation(new Vector3(4, 5, 6)); + + var infoA = new AgentInfo + { + storedActions = new ActionBuffers(null, new[] { 1, 2 }), + discreteActionMasks = null, + }; + + var infoB = new AgentInfo + { + storedActions = new ActionBuffers(null, new[] { 3, 4 }), + discreteActionMasks = new[] { true, false, false, false, false }, + }; + + + agentA._Info = infoA; + agentB._Info = infoB; + return agents; + } + + [Test] + public void Construction() + { + var alloc = new TensorCachingAllocator(); + var mem = new Dictionary>(); + var tensorGenerator = new TensorGenerator(0, alloc, mem); + Assert.IsNotNull(tensorGenerator); + alloc.Dispose(); + } + + [Test] + public void GenerateBatchSize() + { + var inputTensor = new TensorProxy(); + var alloc = new TensorCachingAllocator(); + const int batchSize = 4; + var generator = new BatchSizeGenerator(alloc); + generator.Generate(inputTensor, batchSize, null); + Assert.IsNotNull(inputTensor.data); + Assert.AreEqual(inputTensor.data[0], batchSize); + alloc.Dispose(); + } + + [Test] + public void GenerateSequenceLength() + { + var inputTensor = new TensorProxy(); + var alloc = new TensorCachingAllocator(); + const int batchSize = 4; + var generator = new SequenceLengthGenerator(alloc); + generator.Generate(inputTensor, batchSize, null); + Assert.IsNotNull(inputTensor.data); + Assert.AreEqual(inputTensor.data[0], 1); + alloc.Dispose(); + } + + [Test] + public void GenerateVectorObservation() + { + var inputTensor = new TensorProxy + { + shape = new long[] { 2, 4 } + }; + const int batchSize = 4; + var agentInfos = GetFakeAgents(ObservableAttributeOptions.ExamineAll); + var alloc = new TensorCachingAllocator(); + var generator = new ObservationGenerator(alloc); + generator.AddSensorIndex(0); // ObservableAttribute (size 1) + generator.AddSensorIndex(1); // TestSensor (size 0) + generator.AddSensorIndex(2); // TestSensor (size 0) + generator.AddSensorIndex(3); // VectorSensor (size 3) + var agent0 = agentInfos[0]; + var agent1 = agentInfos[1]; + var inputs = new List + { + new AgentInfoSensorsPair {agentInfo = agent0._Info, sensors = agent0.sensors}, + new AgentInfoSensorsPair {agentInfo = agent1._Info, sensors = agent1.sensors}, + }; + generator.Generate(inputTensor, batchSize, inputs); + Assert.IsNotNull(inputTensor.data); + Assert.AreEqual(inputTensor.data[0, 1], 1); + Assert.AreEqual(inputTensor.data[0, 3], 3); + Assert.AreEqual(inputTensor.data[1, 1], 4); + Assert.AreEqual(inputTensor.data[1, 3], 6); + alloc.Dispose(); + } + + [Test] + public void GeneratePreviousActionInput() + { + var inputTensor = new TensorProxy + { + shape = new long[] { 2, 2 }, + valueType = TensorProxy.TensorType.Integer + }; + const int batchSize = 4; + var agentInfos = GetFakeAgents(); + var alloc = new TensorCachingAllocator(); + var generator = new PreviousActionInputGenerator(alloc); + var agent0 = agentInfos[0]; + var agent1 = agentInfos[1]; + var inputs = new List + { + new AgentInfoSensorsPair {agentInfo = agent0._Info, sensors = agent0.sensors}, + new AgentInfoSensorsPair {agentInfo = agent1._Info, sensors = agent1.sensors}, + }; + generator.Generate(inputTensor, batchSize, inputs); + Assert.IsNotNull(inputTensor.data); + Assert.AreEqual(inputTensor.data[0, 0], 1); + Assert.AreEqual(inputTensor.data[0, 1], 2); + Assert.AreEqual(inputTensor.data[1, 0], 3); + Assert.AreEqual(inputTensor.data[1, 1], 4); + alloc.Dispose(); + } + + [Test] + public void GenerateActionMaskInput() + { + var inputTensor = new TensorProxy + { + shape = new long[] { 2, 5 }, + valueType = TensorProxy.TensorType.FloatingPoint + }; + const int batchSize = 4; + var agentInfos = GetFakeAgents(); + var alloc = new TensorCachingAllocator(); + var generator = new ActionMaskInputGenerator(alloc); + + var agent0 = agentInfos[0]; + var agent1 = agentInfos[1]; + var inputs = new List + { + new AgentInfoSensorsPair {agentInfo = agent0._Info, sensors = agent0.sensors}, + new AgentInfoSensorsPair {agentInfo = agent1._Info, sensors = agent1.sensors}, + }; + + generator.Generate(inputTensor, batchSize, inputs); + Assert.IsNotNull(inputTensor.data); + Assert.AreEqual(inputTensor.data[0, 0], 1); + Assert.AreEqual(inputTensor.data[0, 4], 1); + Assert.AreEqual(inputTensor.data[1, 0], 0); + Assert.AreEqual(inputTensor.data[1, 4], 1); + alloc.Dispose(); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorGenerator.cs.meta b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bffd9e8144840dc85b279cf330a1f4bd3260cea4 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/EditModeTestInternalBrainTensorGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2d2076c51c414ac7a91f8fbf15d4f7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Inference/ModelRunnerTest.cs b/com.unity.ml-agents/Tests/Editor/Inference/ModelRunnerTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..0fbc933f5084d94289c5851b3c469be1697489f3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/ModelRunnerTest.cs @@ -0,0 +1,240 @@ +using System; +using System.Linq; +using NUnit.Framework; +using UnityEngine; +using UnityEditor; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Policies; +using System.Collections.Generic; + +namespace Unity.MLAgents.Tests +{ + public class FloatThresholdComparer : IEqualityComparer + { + private readonly float _threshold; + public FloatThresholdComparer(float threshold) + { + _threshold = threshold; + } + + public bool Equals(float x, float y) + { + return Math.Abs(x - y) < _threshold; + } + + public int GetHashCode(float f) + { + throw new NotImplementedException("Unable to generate a hash code for threshold floats, do not use this method"); + } + } + + [TestFixture] + public class ModelRunnerTest + { + const string k_hybrid_ONNX_recurr_v2 = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx"; + + const string k_continuousONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx"; + const string k_discreteONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx"; + const string k_hybridONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx"; + const string k_continuousNNPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn"; + const string k_discreteNNPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn"; + // models with deterministic action tensors + private const string k_deterministic_discreteNNPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx"; + private const string k_deterministic_continuousNNPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx"; + + NNModel hybridONNXModelV2; + NNModel continuousONNXModel; + NNModel discreteONNXModel; + NNModel hybridONNXModel; + NNModel continuousNNModel; + NNModel discreteNNModel; + NNModel deterministicDiscreteNNModel; + NNModel deterministicContinuousNNModel; + Test3DSensorComponent sensor_21_20_3; + Test3DSensorComponent sensor_20_22_3; + + + ActionSpec GetContinuous2vis8vec2actionActionSpec() + { + return ActionSpec.MakeContinuous(2); + } + + ActionSpec GetDiscrete1vis0vec_2_3action_recurrModelActionSpec() + { + return ActionSpec.MakeDiscrete(2, 3); + } + + ActionSpec GetHybrid0vis53vec_3c_2dActionSpec() + { + return new ActionSpec(3, new[] { 2 }); + } + + [SetUp] + public void SetUp() + { + hybridONNXModelV2 = (NNModel)AssetDatabase.LoadAssetAtPath(k_hybrid_ONNX_recurr_v2, typeof(NNModel)); + + continuousONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_continuousONNXPath, typeof(NNModel)); + discreteONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_discreteONNXPath, typeof(NNModel)); + hybridONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_hybridONNXPath, typeof(NNModel)); + continuousNNModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_continuousNNPath, typeof(NNModel)); + discreteNNModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_discreteNNPath, typeof(NNModel)); + deterministicDiscreteNNModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_deterministic_discreteNNPath, typeof(NNModel)); + deterministicContinuousNNModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_deterministic_continuousNNPath, typeof(NNModel)); + var go = new GameObject("SensorA"); + sensor_21_20_3 = go.AddComponent(); + sensor_21_20_3.Sensor = new Test3DSensor("SensorA", 21, 20, 3); + sensor_20_22_3 = go.AddComponent(); + sensor_20_22_3.Sensor = new Test3DSensor("SensorB", 20, 22, 3); + } + + [Test] + public void TestModelExist() + { + Assert.IsNotNull(continuousONNXModel); + Assert.IsNotNull(discreteONNXModel); + Assert.IsNotNull(hybridONNXModel); + Assert.IsNotNull(continuousNNModel); + Assert.IsNotNull(discreteNNModel); + Assert.IsNotNull(hybridONNXModelV2); + Assert.IsNotNull(deterministicDiscreteNNModel); + Assert.IsNotNull(deterministicContinuousNNModel); + } + + [Test] + public void TestCreation() + { + var inferenceDevice = InferenceDevice.Burst; + var modelRunner = new ModelRunner(continuousONNXModel, GetContinuous2vis8vec2actionActionSpec(), inferenceDevice); + modelRunner.Dispose(); + Assert.Throws(() => + { + // Cannot load a model trained with 1.x that has an LSTM + modelRunner = new ModelRunner(discreteONNXModel, GetDiscrete1vis0vec_2_3action_recurrModelActionSpec(), inferenceDevice); + modelRunner.Dispose(); + }); + modelRunner = new ModelRunner(hybridONNXModel, GetHybrid0vis53vec_3c_2dActionSpec(), inferenceDevice); + modelRunner.Dispose(); + modelRunner = new ModelRunner(continuousNNModel, GetContinuous2vis8vec2actionActionSpec(), inferenceDevice); + modelRunner.Dispose(); + + Assert.Throws(() => + { + // Cannot load a model trained with 1.x that has an LSTM + modelRunner = new ModelRunner(discreteNNModel, GetDiscrete1vis0vec_2_3action_recurrModelActionSpec(), inferenceDevice); + modelRunner.Dispose(); + }); + // This one was trained with 2.0 so it should not raise an error: + modelRunner = new ModelRunner(hybridONNXModelV2, new ActionSpec(2, new[] { 2, 3 }), inferenceDevice); + modelRunner.Dispose(); + + // V2.0 Model that has serialized deterministic action tensors, discrete + modelRunner = new ModelRunner(deterministicDiscreteNNModel, new ActionSpec(0, new[] { 7 }), inferenceDevice); + modelRunner.Dispose(); + // V2.0 Model that has serialized deterministic action tensors, continuous + modelRunner = new ModelRunner(deterministicContinuousNNModel, + GetContinuous2vis8vec2actionActionSpec(), inferenceDevice, + deterministicInference: true); + modelRunner.Dispose(); + } + + [Test] + public void TestHasModel() + { + var modelRunner = new ModelRunner(continuousONNXModel, GetContinuous2vis8vec2actionActionSpec(), InferenceDevice.CPU); + Assert.True(modelRunner.HasModel(continuousONNXModel, InferenceDevice.CPU)); + Assert.False(modelRunner.HasModel(continuousONNXModel, InferenceDevice.GPU)); + Assert.False(modelRunner.HasModel(discreteONNXModel, InferenceDevice.CPU)); + modelRunner.Dispose(); + } + + [Test] + public void TestRunModel() + { + var actionSpec = GetContinuous2vis8vec2actionActionSpec(); + var modelRunner = new ModelRunner(continuousONNXModel, actionSpec, InferenceDevice.Burst); + var sensor_8 = new Sensors.VectorSensor(8, "VectorSensor8"); + var info1 = new AgentInfo(); + info1.episodeId = 1; + modelRunner.PutObservations(info1, new[] + { + sensor_8, + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }.ToList()); + var info2 = new AgentInfo(); + info2.episodeId = 2; + modelRunner.PutObservations(info2, new[] + { + sensor_8, + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }.ToList()); + + modelRunner.DecideBatch(); + + Assert.IsFalse(modelRunner.GetAction(1).Equals(ActionBuffers.Empty)); + Assert.IsFalse(modelRunner.GetAction(2).Equals(ActionBuffers.Empty)); + Assert.IsTrue(modelRunner.GetAction(3).Equals(ActionBuffers.Empty)); + Assert.AreEqual(actionSpec.NumDiscreteActions, modelRunner.GetAction(1).DiscreteActions.Length); + modelRunner.Dispose(); + } + + [Test] + public void TestRunModel_stochastic() + { + var actionSpec = GetContinuous2vis8vec2actionActionSpec(); + // deterministicInference = false by default + var modelRunner = new ModelRunner(deterministicContinuousNNModel, actionSpec, InferenceDevice.Burst); + var sensor_8 = new Sensors.VectorSensor(8, "VectorSensor8"); + var info1 = new AgentInfo(); + var obs = new[] + { + sensor_8, + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }.ToList(); + info1.episodeId = 1; + modelRunner.PutObservations(info1, obs); + modelRunner.DecideBatch(); + var stochAction1 = (float[])modelRunner.GetAction(1).ContinuousActions.Array.Clone(); + + modelRunner.PutObservations(info1, obs); + modelRunner.DecideBatch(); + var stochAction2 = (float[])modelRunner.GetAction(1).ContinuousActions.Array.Clone(); + // Stochastic action selection should output randomly different action values with same obs + Assert.IsFalse(Enumerable.SequenceEqual(stochAction1, stochAction2, new FloatThresholdComparer(0.001f))); + modelRunner.Dispose(); + } + + [Test] + public void TestRunModel_deterministic() + { + var actionSpec = GetContinuous2vis8vec2actionActionSpec(); + var modelRunner = new ModelRunner(deterministicContinuousNNModel, actionSpec, InferenceDevice.Burst); + var sensor_8 = new Sensors.VectorSensor(8, "VectorSensor8"); + var info1 = new AgentInfo(); + var obs = new[] + { + sensor_8, + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }.ToList(); + var deterministicModelRunner = new ModelRunner(deterministicContinuousNNModel, actionSpec, InferenceDevice.Burst, + deterministicInference: true); + info1.episodeId = 1; + deterministicModelRunner.PutObservations(info1, obs); + deterministicModelRunner.DecideBatch(); + var deterministicAction1 = (float[])deterministicModelRunner.GetAction(1).ContinuousActions.Array.Clone(); + + deterministicModelRunner.PutObservations(info1, obs); + deterministicModelRunner.DecideBatch(); + var deterministicAction2 = (float[])deterministicModelRunner.GetAction(1).ContinuousActions.Array.Clone(); + // Deterministic action selection should output same action everytime + Assert.IsTrue(Enumerable.SequenceEqual(deterministicAction1, deterministicAction2, new FloatThresholdComparer(0.001f))); + modelRunner.Dispose(); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Inference/ModelRunnerTest.cs.meta b/com.unity.ml-agents/Tests/Editor/Inference/ModelRunnerTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..273d3bb579936f3734845e7ac62e5c133876e1ac --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/ModelRunnerTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2b924bac7d86467183ad9dc1436e550 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Inference/ParameterLoaderTest.cs b/com.unity.ml-agents/Tests/Editor/Inference/ParameterLoaderTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..ae9d52d74be7b803098f1cf9d16935e0a8e5cce5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/ParameterLoaderTest.cs @@ -0,0 +1,558 @@ +using System.Linq; +using NUnit.Framework; +using UnityEngine; +using UnityEditor; +using Unity.Barracuda; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Policies; + +namespace Unity.MLAgents.Tests +{ + public class Test3DSensorComponent : SensorComponent + { + public ISensor Sensor; + + public override ISensor[] CreateSensors() + { + return new ISensor[] { Sensor }; + } + } + + public class Test3DSensor : ISensor, IBuiltInSensor + { + int m_Width; + int m_Height; + int m_Channels; + string m_Name; + // Dummy value for the IBuiltInSensor interface + public const int k_BuiltInSensorType = -42; + + public Test3DSensor(string name, int width, int height, int channels) + { + m_Width = width; + m_Height = height; + m_Channels = channels; + m_Name = name; + } + + public ObservationSpec GetObservationSpec() + { + return ObservationSpec.Visual(m_Height, m_Width, m_Channels); + } + + public int Write(ObservationWriter writer) + { + for (int i = 0; i < m_Width * m_Height * m_Channels; i++) + { + writer[i] = 0.0f; + } + return m_Width * m_Height * m_Channels; + } + + public byte[] GetCompressedObservation() + { + return new byte[0]; + } + + public void Update() { } + public void Reset() { } + + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + + public string GetName() + { + return m_Name; + } + + public BuiltInSensorType GetBuiltInSensorType() + { + return (BuiltInSensorType)k_BuiltInSensorType; + } + } + + [TestFixture] + public class ParameterLoaderTest + { + const string k_discrete_ONNX_v2 = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx"; + const string k_hybrid_ONNX_recurr_v2 = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx"; + + + // ONNX model with continuous/discrete action output (support hybrid action) + const string k_continuousONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx"; + const string k_discreteONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx"; + const string k_hybridONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx"; + // NN model with single action output (deprecated, does not support hybrid action). + // Same BrainParameters settings as the corresponding ONNX model. + const string k_continuousNNPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn"; + const string k_discreteNNPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn"; + + NNModel rank2ONNXModel; + NNModel hybridRecurrV2Model; + NNModel continuousONNXModel; + NNModel discreteONNXModel; + NNModel hybridONNXModel; + NNModel continuousNNModel; + NNModel discreteNNModel; + Test3DSensorComponent sensor_21_20_3; + Test3DSensorComponent sensor_20_22_3; + BufferSensor sensor_23_20; + VectorSensor sensor_8; + VectorSensor sensor_10; + + BrainParameters GetContinuous2vis8vec2actionBrainParameters() + { + var validBrainParameters = new BrainParameters(); + validBrainParameters.VectorObservationSize = 8; + validBrainParameters.NumStackedVectorObservations = 1; + validBrainParameters.ActionSpec = ActionSpec.MakeContinuous(2); + return validBrainParameters; + } + + BrainParameters GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters() + { + var validBrainParameters = new BrainParameters(); + validBrainParameters.VectorObservationSize = 0; + validBrainParameters.NumStackedVectorObservations = 1; + validBrainParameters.ActionSpec = ActionSpec.MakeDiscrete(2, 3); + return validBrainParameters; + } + + BrainParameters GetHybridBrainParameters() + { + var validBrainParameters = new BrainParameters(); + validBrainParameters.VectorObservationSize = 53; + validBrainParameters.NumStackedVectorObservations = 1; + validBrainParameters.ActionSpec = new ActionSpec(3, new[] { 2 }); + return validBrainParameters; + } + + BrainParameters GetRank2BrainParameters() + { + var validBrainParameters = new BrainParameters(); + validBrainParameters.VectorObservationSize = 4; + validBrainParameters.NumStackedVectorObservations = 2; + validBrainParameters.ActionSpec = ActionSpec.MakeDiscrete(3, 3, 3); + return validBrainParameters; + } + + BrainParameters GetRecurrHybridBrainParameters() + { + var validBrainParameters = new BrainParameters(); + validBrainParameters.VectorObservationSize = 8; + validBrainParameters.NumStackedVectorObservations = 1; + validBrainParameters.ActionSpec = new ActionSpec(2, new int[] { 2, 3 }); + return validBrainParameters; + } + + [SetUp] + public void SetUp() + { + continuousONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_continuousONNXPath, typeof(NNModel)); + discreteONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_discreteONNXPath, typeof(NNModel)); + hybridONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_hybridONNXPath, typeof(NNModel)); + continuousNNModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_continuousNNPath, typeof(NNModel)); + discreteNNModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_discreteNNPath, typeof(NNModel)); + rank2ONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_discrete_ONNX_v2, typeof(NNModel)); + hybridRecurrV2Model = (NNModel)AssetDatabase.LoadAssetAtPath(k_hybrid_ONNX_recurr_v2, typeof(NNModel)); + var go = new GameObject("SensorA"); + sensor_21_20_3 = go.AddComponent(); + sensor_21_20_3.Sensor = new Test3DSensor("SensorA", 21, 20, 3); + sensor_20_22_3 = go.AddComponent(); + sensor_20_22_3.Sensor = new Test3DSensor("SensorA", 20, 22, 3); + sensor_23_20 = new BufferSensor(20, 23, "BufferSensor"); + sensor_8 = new VectorSensor(8, "VectorSensor8"); + sensor_10 = new VectorSensor(10, "VectorSensor10"); + } + + [Test] + public void TestModelExist() + { + Assert.IsNotNull(continuousONNXModel); + Assert.IsNotNull(discreteONNXModel); + Assert.IsNotNull(hybridONNXModel); + Assert.IsNotNull(continuousNNModel); + Assert.IsNotNull(discreteNNModel); + Assert.IsNotNull(rank2ONNXModel); + Assert.IsNotNull(hybridRecurrV2Model); + } + + [TestCase(true)] + [TestCase(false)] + public void TestGetInputTensorsContinuous(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(continuousNNModel) : ModelLoader.Load(continuousONNXModel); + var inputNames = model.GetInputNames(); + // Model should contain 3 inputs : vector, visual 1 and visual 2 + Assert.AreEqual(3, inputNames.Count()); + Assert.Contains(TensorNames.VectorObservationPlaceholder, inputNames); + Assert.Contains(TensorNames.VisualObservationPlaceholderPrefix + "0", inputNames); + Assert.Contains(TensorNames.VisualObservationPlaceholderPrefix + "1", inputNames); + + Assert.AreEqual(2, model.GetNumVisualInputs()); + + // Test if the model is null + model = null; + Assert.AreEqual(0, model.GetInputTensors().Count); + Assert.AreEqual(0, model.GetNumVisualInputs()); + } + + [TestCase(true)] + [TestCase(false)] + public void TestGetInputTensorsDiscrete(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(discreteNNModel) : ModelLoader.Load(discreteONNXModel); + var inputNames = model.GetInputNames(); + // Model should contain 2 inputs : recurrent and visual 1 + + Assert.Contains(TensorNames.VisualObservationPlaceholderPrefix + "0", inputNames); + // TODO :There are some memory tensors as well + } + + [Test] + public void TestGetInputTensorsHybrid() + { + var model = ModelLoader.Load(hybridONNXModel); + var inputNames = model.GetInputNames(); + Assert.Contains(TensorNames.VectorObservationPlaceholder, inputNames); + } + + [TestCase(true)] + [TestCase(false)] + public void TestGetOutputTensorsContinuous(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(continuousNNModel) : ModelLoader.Load(continuousONNXModel); + var outputNames = model.GetOutputNames(); + var actionOutputName = useDeprecatedNNModel ? TensorNames.ActionOutputDeprecated : TensorNames.ContinuousActionOutput; + Assert.Contains(actionOutputName, outputNames); + Assert.AreEqual(1, outputNames.Count()); + + model = null; + Assert.AreEqual(0, model.GetOutputNames().Count()); + } + + [TestCase(true)] + [TestCase(false)] + public void TestGetOutputTensorsDiscrete(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(discreteNNModel) : ModelLoader.Load(discreteONNXModel); + var outputNames = model.GetOutputNames(); + var actionOutputName = useDeprecatedNNModel ? TensorNames.ActionOutputDeprecated : TensorNames.DiscreteActionOutput; + Assert.Contains(actionOutputName, outputNames); + // TODO : There are some memory tensors as well + } + + [Test] + public void TestGetOutputTensorsHybrid() + { + var model = ModelLoader.Load(hybridONNXModel); + var outputNames = model.GetOutputNames(); + + Assert.AreEqual(2, outputNames.Count()); + Assert.Contains(TensorNames.ContinuousActionOutput, outputNames); + Assert.Contains(TensorNames.DiscreteActionOutput, outputNames); + + model = null; + Assert.AreEqual(0, model.GetOutputNames().Count()); + } + + [Test] + public void TestCheckModelRank2() + { + var model = ModelLoader.Load(rank2ONNXModel); + var validBrainParameters = GetRank2BrainParameters(); + + var errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] { sensor_23_20, sensor_10, sensor_8 }, new ActuatorComponent[0] + ); + Assert.AreEqual(0, errors.Count()); // There should not be any errors + + errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] { sensor_23_20, sensor_10 }, new ActuatorComponent[0] + ); + Assert.AreNotEqual(0, errors.Count()); // Wrong number of sensors + + errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] { new BufferSensor(20, 40, "BufferSensor"), sensor_10, sensor_8 }, new ActuatorComponent[0] + ); + Assert.AreNotEqual(0, errors.Count()); // Wrong buffer sensor size + + errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] { sensor_23_20, sensor_10, sensor_10 }, new ActuatorComponent[0] + ); + Assert.AreNotEqual(0, errors.Count()); // Wrong vector sensor size + } + + [TestCase(true)] + [TestCase(false)] + public void TestCheckModelValidContinuous(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(continuousNNModel) : ModelLoader.Load(continuousONNXModel); + var validBrainParameters = GetContinuous2vis8vec2actionBrainParameters(); + + var errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] + { + new VectorSensor(8), + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.AreEqual(0, errors.Count()); // There should not be any errors + } + + [TestCase(true)] + [TestCase(false)] + public void TestCheckModelValidDiscrete(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(discreteNNModel) : ModelLoader.Load(discreteONNXModel); + var validBrainParameters = GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters(); + + var errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] { sensor_21_20_3.CreateSensors()[0] }, new ActuatorComponent[0] + ); + foreach (var e in errors) + { + Debug.Log(e.Message); + } + Assert.Greater(errors.Count(), 0); // There should be an error since LSTM v1.x is not supported + } + + [Test] + public void TestCheckModelValidRecurrent() + { + var model = ModelLoader.Load(hybridRecurrV2Model); + var num_errors = 0; // A model trained with v2 should not raise errors + var validBrainParameters = GetRecurrHybridBrainParameters(); + + var errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] { sensor_8 }, new ActuatorComponent[0] + ); + Assert.AreEqual(num_errors, errors.Count()); // There should not be any errors + + var invalidBrainParameters = GetRecurrHybridBrainParameters(); + invalidBrainParameters.ActionSpec = new ActionSpec(1, new int[] { 2, 3 }); + errors = BarracudaModelParamLoader.CheckModel( + model, invalidBrainParameters, + new ISensor[] { sensor_8 }, new ActuatorComponent[0] + ); + Assert.AreEqual(1, errors.Count()); // 1 continuous action instead of 2 + + invalidBrainParameters.ActionSpec = new ActionSpec(2, new int[] { 3, 2 }); + errors = BarracudaModelParamLoader.CheckModel( + model, invalidBrainParameters, + new ISensor[] { sensor_8 }, new ActuatorComponent[0] + ); + Assert.AreEqual(1, errors.Count()); // Discrete action branches flipped + } + + [Test] + public void TestCheckModelValidHybrid() + { + var model = ModelLoader.Load(hybridONNXModel); + var validBrainParameters = GetHybridBrainParameters(); + + var errors = BarracudaModelParamLoader.CheckModel( + model, validBrainParameters, + new ISensor[] + { + new VectorSensor(validBrainParameters.VectorObservationSize) + }, new ActuatorComponent[0] + ); + Assert.AreEqual(0, errors.Count()); // There should not be any errors + } + + [TestCase(true)] + [TestCase(false)] + public void TestCheckModelThrowsVectorObservationContinuous(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(continuousNNModel) : ModelLoader.Load(continuousONNXModel); + + var brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.VectorObservationSize = 9; // Invalid observation + var errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, + new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + + brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.NumStackedVectorObservations = 2;// Invalid stacking + errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, + new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + + [TestCase(true)] + [TestCase(false)] + public void TestCheckModelThrowsVectorObservationDiscrete(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(discreteNNModel) : ModelLoader.Load(discreteONNXModel); + + var brainParameters = GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters(); + brainParameters.VectorObservationSize = 1; // Invalid observation + var errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, new ISensor[] + { + sensor_21_20_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + + [Test] + public void TestCheckModelThrowsVectorObservationHybrid() + { + var model = ModelLoader.Load(hybridONNXModel); + + var brainParameters = GetHybridBrainParameters(); + brainParameters.VectorObservationSize = 9; // Invalid observation + var errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, + new ISensor[] { }, new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + + brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.NumStackedVectorObservations = 2;// Invalid stacking + errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, + new ISensor[] { }, new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + + [TestCase(true)] + [TestCase(false)] + public void TestCheckModelThrowsActionContinuous(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(continuousNNModel) : ModelLoader.Load(continuousONNXModel); + + var brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.ActionSpec = ActionSpec.MakeContinuous(3); // Invalid action + var errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + + brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.ActionSpec = ActionSpec.MakeDiscrete(3); // Invalid SpaceType + errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + + [TestCase(true)] + [TestCase(false)] + public void TestCheckModelThrowsActionDiscrete(bool useDeprecatedNNModel) + { + var model = useDeprecatedNNModel ? ModelLoader.Load(discreteNNModel) : ModelLoader.Load(discreteONNXModel); + + var brainParameters = GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters(); + brainParameters.ActionSpec = ActionSpec.MakeDiscrete(3, 3); // Invalid action + var errors = BarracudaModelParamLoader.CheckModel( + model, brainParameters, + new ISensor[] { sensor_21_20_3.CreateSensors()[0] }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + + brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.ActionSpec = ActionSpec.MakeContinuous(2); // Invalid SpaceType + errors = BarracudaModelParamLoader.CheckModel( + model, + brainParameters, + new ISensor[] { sensor_21_20_3.CreateSensors()[0] }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + + [Test] + public void TestCheckModelThrowsActionHybrid() + { + var model = ModelLoader.Load(hybridONNXModel); + + var brainParameters = GetHybridBrainParameters(); + brainParameters.ActionSpec = new ActionSpec(3, new[] { 3 }); // Invalid discrete action size + var errors = BarracudaModelParamLoader.CheckModel( + model, + brainParameters, + new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + + brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + brainParameters.ActionSpec = ActionSpec.MakeDiscrete(2); // Missing continuous action + errors = BarracudaModelParamLoader.CheckModel( + model, + brainParameters, + new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + + [Test] + public void TestCheckModelThrowsNoModel() + { + var brainParameters = GetContinuous2vis8vec2actionBrainParameters(); + var errors = BarracudaModelParamLoader.CheckModel( + null, + brainParameters, + new ISensor[] + { + sensor_21_20_3.CreateSensors()[0], + sensor_20_22_3.CreateSensors()[0] + }, + new ActuatorComponent[0] + ); + Assert.Greater(errors.Count(), 0); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Inference/ParameterLoaderTest.cs.meta b/com.unity.ml-agents/Tests/Editor/Inference/ParameterLoaderTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..25bff938efabf5307993759207c074c680d97774 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/ParameterLoaderTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edd38d6ad78c8456d80f0a90bcb2e1b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Inference/TensorUtilsTest.cs b/com.unity.ml-agents/Tests/Editor/Inference/TensorUtilsTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..5673b7ddef9f7f891e15cb6e696dbd09a717c2e9 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/TensorUtilsTest.cs @@ -0,0 +1,135 @@ +using System; +using NUnit.Framework; +using Unity.Barracuda; +using Unity.MLAgents.Inference; +using Unity.MLAgents.Inference.Utils; + +namespace Unity.MLAgents.Tests +{ + public class TensorUtilsTest + { + [TestCase(4, TestName = "TestResizeTensor_4D")] + [TestCase(8, TestName = "TestResizeTensor_8D")] + public void TestResizeTensor(int dimension) + { + var alloc = new TensorCachingAllocator(); + var height = 64; + var width = 84; + var channels = 3; + + // Set shape to {1, ..., height, width, channels} + // For 8D, the ... are all 1's + var shape = new long[dimension]; + for (var i = 0; i < dimension; i++) + { + shape[i] = 1; + } + + shape[dimension - 3] = height; + shape[dimension - 2] = width; + shape[dimension - 1] = channels; + + var intShape = new int[dimension]; + for (var i = 0; i < dimension; i++) + { + intShape[i] = (int)shape[i]; + } + + var tensorProxy = new TensorProxy + { + valueType = TensorProxy.TensorType.Integer, + data = new Tensor(intShape), + shape = shape, + }; + + // These should be invariant after the resize. + Assert.AreEqual(height, tensorProxy.data.shape.height); + Assert.AreEqual(width, tensorProxy.data.shape.width); + Assert.AreEqual(channels, tensorProxy.data.shape.channels); + + TensorUtils.ResizeTensor(tensorProxy, 42, alloc); + + Assert.AreEqual(height, tensorProxy.shape[dimension - 3]); + Assert.AreEqual(width, tensorProxy.shape[dimension - 2]); + Assert.AreEqual(channels, tensorProxy.shape[dimension - 1]); + + Assert.AreEqual(height, tensorProxy.data.shape.height); + Assert.AreEqual(width, tensorProxy.data.shape.width); + Assert.AreEqual(channels, tensorProxy.data.shape.channels); + + alloc.Dispose(); + } + + [Test] + public void RandomNormalTestTensorInt() + { + var rn = new RandomNormal(1982); + var t = new TensorProxy + { + valueType = TensorProxy.TensorType.Integer + }; + + Assert.Throws( + () => TensorUtils.FillTensorWithRandomNormal(t, rn)); + } + + [Test] + public void RandomNormalTestDataNull() + { + var rn = new RandomNormal(1982); + var t = new TensorProxy + { + valueType = TensorProxy.TensorType.FloatingPoint + }; + + Assert.Throws( + () => TensorUtils.FillTensorWithRandomNormal(t, rn)); + } + + [Test] + public void RandomNormalTestTensor() + { + var rn = new RandomNormal(1982); + var t = new TensorProxy + { + valueType = TensorProxy.TensorType.FloatingPoint, + data = new Tensor(1, 3, 4, 2) + }; + + TensorUtils.FillTensorWithRandomNormal(t, rn); + + var reference = new[] + { + -0.4315872f, + -1.11074f, + 0.3414804f, + -1.130287f, + 0.1413168f, + -0.5105762f, + -0.3027347f, + -0.2645015f, + 1.225356f, + -0.02921959f, + 0.3716498f, + -1.092338f, + 0.9561074f, + -0.5018106f, + 1.167787f, + -0.7763879f, + -0.07491868f, + 0.5396146f, + -0.1377991f, + 0.3331701f, + 0.06144788f, + 0.9520947f, + 1.088157f, + -1.177194f, + }; + + for (var i = 0; i < t.data.length; i++) + { + Assert.AreEqual(t.data[i], reference[i], 0.0001); + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Inference/TensorUtilsTest.cs.meta b/com.unity.ml-agents/Tests/Editor/Inference/TensorUtilsTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4141d495048ed8a176b8f7e36c35031f508017f8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Inference/TensorUtilsTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a700a7c6187a433ca44d60d243bb0cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/InplaceArrayTests.cs b/com.unity.ml-agents/Tests/Editor/InplaceArrayTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..2e8f21cf289f51bc444cececa0b125770adc0775 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/InplaceArrayTests.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections; +using NUnit.Framework; + + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class InplaceArrayTests + { + class LengthCases : IEnumerable + { + public IEnumerator GetEnumerator() + { + yield return 1; + yield return 2; + yield return 3; + yield return 4; + } + } + + private InplaceArray GetTestArray(int length) + { + switch (length) + { + case 1: + return new InplaceArray(11); + case 2: + return new InplaceArray(11, 22); + case 3: + return new InplaceArray(11, 22, 33); + case 4: + return new InplaceArray(11, 22, 33, 44); + default: + throw new ArgumentException("bad test!"); + } + } + + private InplaceArray GetZeroArray(int length) + { + switch (length) + { + case 1: + return new InplaceArray(0); + case 2: + return new InplaceArray(0, 0); + case 3: + return new InplaceArray(0, 0, 0); + case 4: + return new InplaceArray(0, 0, 0, 0); + default: + throw new ArgumentException("bad test!"); + } + } + + [Test] + public void TestInplaceArrayCtor() + { + var a1 = new InplaceArray(11); + Assert.AreEqual(1, a1.Length); + Assert.AreEqual(11, a1[0]); + + var a2 = new InplaceArray(11, 22); + Assert.AreEqual(2, a2.Length); + Assert.AreEqual(11, a2[0]); + Assert.AreEqual(22, a2[1]); + + var a3 = new InplaceArray(11, 22, 33); + Assert.AreEqual(3, a3.Length); + Assert.AreEqual(11, a3[0]); + Assert.AreEqual(22, a3[1]); + Assert.AreEqual(33, a3[2]); + + var a4 = new InplaceArray(11, 22, 33, 44); + Assert.AreEqual(4, a4.Length); + Assert.AreEqual(11, a4[0]); + Assert.AreEqual(22, a4[1]); + Assert.AreEqual(33, a4[2]); + Assert.AreEqual(44, a4[3]); + } + + [TestCaseSource(typeof(LengthCases))] + public void TestInplaceGetSet(int length) + { + var original = GetTestArray(length); + + for (var i = 0; i < original.Length; i++) + { + var modified = original; + modified[i] = 0; + for (var j = 0; j < original.Length; j++) + { + if (i == j) + { + // This is the one we overwrote + Assert.AreEqual(0, modified[j]); + } + else + { + // Other elements should be unchanged + Assert.AreEqual(original[j], modified[j]); + } + } + } + } + + [TestCaseSource(typeof(LengthCases))] + public void TestInvalidAccess(int length) + { + var tmp = 0; + var a = GetTestArray(length); + // get + Assert.Throws(() => { tmp += a[-1]; }); + Assert.Throws(() => { tmp += a[length]; }); + + // set + Assert.Throws(() => { a[-1] = 0; }); + Assert.Throws(() => { a[length] = 0; }); + + // Make sure temp is used + Assert.AreEqual(0, tmp); + } + + [Test] + public void TestOperatorEqualsDifferentLengths() + { + // Check arrays of different length are never equal (even if they have 0s in all elements) + for (var l1 = 1; l1 <= 4; l1++) + { + var a1 = GetZeroArray(l1); + for (var l2 = 1; l2 <= 4; l2++) + { + var a2 = GetZeroArray(l2); + if (l1 == l2) + { + Assert.AreEqual(a1, a2); + Assert.IsTrue(a1 == a2); + } + else + { + Assert.AreNotEqual(a1, a2); + Assert.IsTrue(a1 != a2); + } + } + } + } + + [TestCaseSource(typeof(LengthCases))] + public void TestOperatorEquals(int length) + { + for (var index = 0; index < length; index++) + { + var a1 = GetTestArray(length); + var a2 = GetTestArray(length); + Assert.AreEqual(a1, a2); + Assert.IsTrue(a1 == a2); + + a1[index] = 42; + Assert.AreNotEqual(a1, a2); + Assert.IsTrue(a1 != a2); + + a2[index] = 42; + Assert.AreEqual(a1, a2); + Assert.IsTrue(a1 == a2); + } + } + + [Test] + public void TestToString() + { + Assert.AreEqual("[1]", new InplaceArray(1).ToString()); + Assert.AreEqual("[1, 2]", new InplaceArray(1, 2).ToString()); + Assert.AreEqual("[1, 2, 3]", new InplaceArray(1, 2, 3).ToString()); + Assert.AreEqual("[1, 2, 3, 4]", new InplaceArray(1, 2, 3, 4).ToString()); + } + + [TestCaseSource(typeof(LengthCases))] + public void TestFromList(int length) + { + var intArray = new int[length]; + for (var i = 0; i < length; i++) + { + intArray[i] = (i + 1) * 11; // 11, 22, etc. + } + + var converted = InplaceArray.FromList(intArray); + Assert.AreEqual(GetTestArray(length), converted); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/InplaceArrayTests.cs.meta b/com.unity.ml-agents/Tests/Editor/InplaceArrayTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..227738d65fd363b10bee518e2a0170279c2a7997 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/InplaceArrayTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e1cdc27e533749fabc04b3cdeb93501 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations.meta b/com.unity.ml-agents/Tests/Editor/Integrations.meta new file mode 100644 index 0000000000000000000000000000000000000000..395f71ca51b20b3821c912d768c7d3be0d1e5e04 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7e89e6f6ab7e4c9397958c0320bd5931 +timeCreated: 1618359633 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3.meta new file mode 100644 index 0000000000000000000000000000000000000000..f710b9aa061d909b0ada63a04fc9bfe8d44e4e52 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 77b0212dde404f7c8ce9aac13bd550b8 +timeCreated: 1601332716 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/AbstractBoardTests.cs b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/AbstractBoardTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..3b46c7ec3e23dbb863b3dbf23a46ebece55f147a --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/AbstractBoardTests.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using NUnit.Framework; +using Unity.MLAgents.Integrations.Match3; + +namespace Unity.MLAgents.Tests.Integrations.Match3 +{ + internal class StringBoard : AbstractBoard + { + internal int MaxRows; + internal int MaxColumns; + internal int NumCellTypes; + internal int NumSpecialTypes; + public int CurrentRows; + public int CurrentColumns; + + public override BoardSize GetMaxBoardSize() + { + return new BoardSize + { + Rows = MaxRows, + Columns = MaxColumns, + NumCellTypes = NumCellTypes, + NumSpecialTypes = NumSpecialTypes + }; + } + + public override BoardSize GetCurrentBoardSize() + { + return new BoardSize + { + Rows = CurrentRows, + Columns = CurrentColumns, + NumCellTypes = NumCellTypes, + NumSpecialTypes = NumSpecialTypes + }; + } + + private string[] m_Board; + private string[] m_Special; + + /// + /// Convert a string like "000\n010\n000" to a board representation + /// Row 0 is considered the bottom row + /// + /// + public void SetBoard(string newBoard) + { + m_Board = newBoard.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); + MaxRows = m_Board.Length; + MaxColumns = m_Board[0].Length; + CurrentRows = MaxRows; + CurrentColumns = MaxColumns; + NumCellTypes = 0; + for (var r = 0; r < MaxRows; r++) + { + for (var c = 0; c < MaxColumns; c++) + { + NumCellTypes = Mathf.Max(NumCellTypes, 1 + GetCellType(r, c)); + } + } + } + + public void SetSpecial(string newSpecial) + { + m_Special = newSpecial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); + Debug.Assert(MaxRows == m_Special.Length); + Debug.Assert(MaxColumns == m_Special[0].Length); + NumSpecialTypes = 0; + for (var r = 0; r < MaxRows; r++) + { + for (var c = 0; c < MaxColumns; c++) + { + NumSpecialTypes = Mathf.Max(NumSpecialTypes, GetSpecialType(r, c)); + } + } + } + + public override bool MakeMove(Move m) + { + return true; + } + + public override bool IsMoveValid(Move m) + { + return SimpleIsMoveValid(m); + } + + public override int GetCellType(int row, int col) + { + if (row >= CurrentRows || col >= CurrentColumns) + { + throw new IndexOutOfRangeException("Tried to get celltype out of bounds"); + } + + var character = m_Board[m_Board.Length - 1 - row][col]; + return (character - '0'); + } + + public override int GetSpecialType(int row, int col) + { + if (row >= CurrentRows || col >= CurrentColumns) + { + throw new IndexOutOfRangeException("Tried to get specialtype out of bounds"); + } + + var character = m_Special[m_Board.Length - 1 - row][col]; + return (character - '0'); + } + } + + public class AbstractBoardTests + { + [Test] + public void TestBoardInit() + { + var boardString = +@"000 + 000 + 010"; + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + board.SetBoard(boardString); + + var boardSize = board.GetMaxBoardSize(); + + Assert.AreEqual(3, boardSize.Rows); + Assert.AreEqual(3, boardSize.Columns); + Assert.AreEqual(2, boardSize.NumCellTypes); + for (var r = 0; r < 3; r++) + { + for (var c = 0; c < 3; c++) + { + var expected = (r == 0 && c == 1) ? 1 : 0; + Assert.AreEqual(expected, board.GetCellType(r, c)); + } + } + } + + internal static List GetValidMoves4x4(bool fullBoard, BoardSize boardSize) + { + var validMoves = new List + { + Move.FromPositionAndDirection(2, 1, Direction.Down, boardSize), // equivalent to (1, 1, Up) + Move.FromPositionAndDirection(1, 1, Direction.Down, boardSize), + Move.FromPositionAndDirection(1, 1, Direction.Left, boardSize), + Move.FromPositionAndDirection(1, 1, Direction.Right, boardSize), + Move.FromPositionAndDirection(0, 1, Direction.Left, boardSize), + }; + + if (fullBoard) + { + // This would move out of range on the small board + // Equivalent to (3, 1, Down) + validMoves.Add(Move.FromPositionAndDirection(2, 1, Direction.Up, boardSize)); + + // These moves require matching with a cell that's off the small board, so they're invalid + // (even though the move itself doesn't go out of range). + validMoves.Add(Move.FromPositionAndDirection(2, 1, Direction.Left, boardSize)); // Equivalent to (2, 0, Right) + validMoves.Add(Move.FromPositionAndDirection(2, 1, Direction.Right, boardSize)); + } + + return validMoves; + } + + [TestCase(true, TestName = "Full Board")] + [TestCase(false, TestName = "Small Board")] + public void TestCheckValidMoves(bool fullBoard) + { + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + + var boardString = +@"0105 + 1024 + 0203 + 2022"; + board.SetBoard(boardString); + var boardSize = board.GetMaxBoardSize(); + if (!fullBoard) + { + board.CurrentRows -= 1; + } + + var validMoves = GetValidMoves4x4(fullBoard, boardSize); + + foreach (var m in validMoves) + { + Assert.IsTrue(board.IsMoveValid(m)); + } + + // Run through all moves and make sure those are the only valid ones + HashSet validIndices = new HashSet(); + foreach (var m in validMoves) + { + validIndices.Add(m.MoveIndex); + } + + // Make sure iterating over AllMoves is OK with the smaller board + foreach (var move in board.AllMoves()) + { + var expected = validIndices.Contains(move.MoveIndex); + Assert.AreEqual(expected, board.IsMoveValid(move), $"({move.Row}, {move.Column}, {move.Direction})"); + } + + HashSet validIndicesFromIterator = new HashSet(); + foreach (var move in board.ValidMoves()) + { + validIndicesFromIterator.Add(move.MoveIndex); + } + Assert.IsTrue(validIndices.SetEquals(validIndicesFromIterator)); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/AbstractBoardTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/AbstractBoardTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..79da98cb7a5fedcb4cf3e40feb87ded218b35fb1 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/AbstractBoardTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a6d0404471364cd5b0b86ef72e6fe653 +timeCreated: 1601332740 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3ActuatorTests.cs b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3ActuatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..6711ed3b12e70467bf9d140e7aa63563a56c53f8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3ActuatorTests.cs @@ -0,0 +1,207 @@ +using System.Collections.Generic; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Integrations.Match3; +using UnityEngine; + +namespace Unity.MLAgents.Tests.Integrations.Match3 +{ + internal class SimpleBoard : AbstractBoard + { + public int Rows; + public int Columns; + public int NumCellTypes; + public int NumSpecialTypes; + + public int LastMoveIndex; + public bool MovesAreValid = true; + + public bool CallbackCalled; + + public override BoardSize GetMaxBoardSize() + { + return new BoardSize + { + Rows = Rows, + Columns = Columns, + NumCellTypes = NumCellTypes, + NumSpecialTypes = NumSpecialTypes + }; + } + + public override int GetCellType(int row, int col) + { + return 0; + } + + public override int GetSpecialType(int row, int col) + { + return 0; + } + + public override bool IsMoveValid(Move m) + { + return MovesAreValid; + } + + public override bool MakeMove(Move m) + { + LastMoveIndex = m.MoveIndex; + return MovesAreValid; + } + + public void Callback() + { + CallbackCalled = true; + } + } + + public class Match3ActuatorTests + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [TestCase(true)] + [TestCase(false)] + public void TestValidMoves(bool movesAreValid) + { + // Check that a board with no valid moves doesn't raise an exception. + var gameObj = new GameObject(); + var board = gameObj.AddComponent(); + var agent = gameObj.AddComponent(); + gameObj.AddComponent(); + + board.Rows = 5; + board.Columns = 5; + board.NumCellTypes = 5; + board.NumSpecialTypes = 0; + + board.MovesAreValid = movesAreValid; + board.OnNoValidMovesAction = board.Callback; + board.LastMoveIndex = -1; + + agent.LazyInitialize(); + agent.RequestDecision(); + Academy.Instance.EnvironmentStep(); + + if (movesAreValid) + { + Assert.IsFalse(board.CallbackCalled); + } + else + { + Assert.IsTrue(board.CallbackCalled); + } + Assert.AreNotEqual(-1, board.LastMoveIndex); + } + + [Test] + public void TestActionSpec() + { + var gameObj = new GameObject(); + var board = gameObj.AddComponent(); + var actuator = gameObj.AddComponent(); + + board.Rows = 5; + board.Columns = 5; + board.NumCellTypes = 5; + board.NumSpecialTypes = 0; + + var actionSpec = actuator.ActionSpec; + Assert.AreEqual(1, actionSpec.NumDiscreteActions); + Assert.AreEqual(board.NumMoves(), actionSpec.BranchSizes[0]); + } + + [Test] + public void TestActionSpecNullBoard() + { + var gameObj = new GameObject(); + var actuator = gameObj.AddComponent(); + + var actionSpec = actuator.ActionSpec; + Assert.AreEqual(0, actionSpec.NumDiscreteActions); + Assert.AreEqual(0, actionSpec.NumContinuousActions); + } + + public class HashSetActionMask : IDiscreteActionMask + { + public HashSet[] HashSets; + public HashSetActionMask(ActionSpec spec) + { + HashSets = new HashSet[spec.NumDiscreteActions]; + for (var i = 0; i < spec.NumDiscreteActions; i++) + { + HashSets[i] = new HashSet(); + } + } + + public void SetActionEnabled(int branch, int actionIndex, bool isEnabled) + { + var hashSet = HashSets[branch]; + if (isEnabled) + { + hashSet.Remove(actionIndex); + } + else + { + hashSet.Add(actionIndex); + } + } + } + + [TestCase(true, TestName = "Full Board")] + [TestCase(false, TestName = "Small Board")] + public void TestMasking(bool fullBoard) + { + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + + var boardString = +@"0105 + 1024 + 0203 + 2022"; + board.SetBoard(boardString); + var boardSize = board.GetMaxBoardSize(); + if (!fullBoard) + { + board.CurrentRows -= 1; + } + + var validMoves = AbstractBoardTests.GetValidMoves4x4(fullBoard, boardSize); + + var actuatorComponent = gameObj.AddComponent(); + var actuator = actuatorComponent.CreateActuators()[0]; + + var masks = new HashSetActionMask(actuator.ActionSpec); + actuator.WriteDiscreteActionMask(masks); + + // Run through all moves and make sure those are the only valid ones + HashSet validIndices = new HashSet(); + foreach (var m in validMoves) + { + validIndices.Add(m.MoveIndex); + } + + // Valid moves and masked moves should be disjoint + Assert.IsFalse(validIndices.Overlaps(masks.HashSets[0])); + // And they should add up to all the potential moves + Assert.AreEqual(validIndices.Count + masks.HashSets[0].Count, board.NumMoves()); + } + + [Test] + public void TestNoBoardReturnsEmptyActuators() + { + var gameObj = new GameObject("board"); + var actuatorComponent = gameObj.AddComponent(); + var actuators = actuatorComponent.CreateActuators(); + Assert.AreEqual(0, actuators.Length); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3ActuatorTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3ActuatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3731b4e758021712ed04bfb6d049156637e0b86b --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3ActuatorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2edf24df24ac426085cb31a94d063683 +timeCreated: 1603392289 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3SensorTests.cs b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3SensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..8528b18464c694a8aa48941bdfca10b12264b84d --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3SensorTests.cs @@ -0,0 +1,407 @@ +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Integrations.Match3; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests.Integrations.Match3 +{ + public class Match3SensorTests + { + // Whether the expected PNG data should be written to a file. + // Only set this to true if the compressed observation format changes. + private bool WritePNGDataToFile = false; + private const string k_CellObservationPng = "match3obs_"; + private const string k_SpecialObservationPng = "match3obs_special_"; + private const string k_Suffix2x2 = "2x2_"; + + [TestCase(true, TestName = "Full Board")] + [TestCase(false, TestName = "Small Board")] + public void TestVectorObservations(bool fullBoard) + { + var boardString = +@"000 + 000 + 010"; + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + board.SetBoard(boardString); + if (!fullBoard) + { + board.CurrentRows = 2; + board.CurrentColumns = 2; + } + + var sensorComponent = gameObj.AddComponent(); + sensorComponent.ObservationType = Match3ObservationType.Vector; + var sensor = sensorComponent.CreateSensors()[0]; + + var expectedShape = new InplaceArray(3 * 3 * 2); + Assert.AreEqual(expectedShape, sensor.GetObservationSpec().Shape); + + float[] expectedObs; + + if (fullBoard) + { + expectedObs = new float[] + { + 1, 0, /* 0 */ 0, 1, /* 1 */ 1, 0, /* 0 */ + 1, 0, /* 0 */ 1, 0, /* 0 */ 1, 0, /* 0 */ + 1, 0, /* 0 */ 1, 0, /* 0 */ 1, 0, /* 0 */ + }; + } + else + { + expectedObs = new float[] + { + 1, 0, /* 0 */ 0, 1, /* 1 */ 0, 0, /* empty */ + 1, 0, /* 0 */ 1, 0, /* 0 */ 0, 0, /* empty */ + 0, 0, /* empty */ 0, 0, /* empty */ 0, 0, /* empty */ + }; + } + SensorTestHelper.CompareObservation(sensor, expectedObs); + } + + [Test] + public void TestVectorObservationsSpecial() + { + var boardString = +@"000 + 000 + 010"; + var specialString = +@"010 + 200 + 000"; + + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + board.SetBoard(boardString); + board.SetSpecial(specialString); + + var sensorComponent = gameObj.AddComponent(); + sensorComponent.ObservationType = Match3ObservationType.Vector; + var sensors = sensorComponent.CreateSensors(); + var cellSensor = sensors[0]; + var specialSensor = sensors[1]; + + { + var expectedShape = new InplaceArray(3 * 3 * 2); + Assert.AreEqual(expectedShape, cellSensor.GetObservationSpec().Shape); + + var expectedObs = new float[] + { + 1, 0, /* (0) */ 0, 1, /* (1) */ 1, 0, /* (0) */ + 1, 0, /* (0) */ 1, 0, /* (0) */ 1, 0, /* (0) */ + 1, 0, /* (0) */ 1, 0, /* (0) */ 1, 0, /* (0) */ + }; + SensorTestHelper.CompareObservation(cellSensor, expectedObs); + } + { + var expectedShape = new InplaceArray(3 * 3 * 3); + Assert.AreEqual(expectedShape, specialSensor.GetObservationSpec().Shape); + + var expectedObs = new float[] + { + 1, 0, 0, /* (0) */ 1, 0, 0, /* (1) */ 1, 0, 0, /* (0) */ + 0, 0, 1, /* (2) */ 1, 0, 0, /* (0) */ 1, 0, 0, /* (0) */ + 1, 0, 0, /* (0) */ 0, 1, 0, /* (1) */ 1, 0, 0, /* (0) */ + }; + SensorTestHelper.CompareObservation(specialSensor, expectedObs); + } + } + + [TestCase(true, TestName = "Full Board")] + [TestCase(false, TestName = "Small Board")] + public void TestVisualObservations(bool fullBoard) + { + var boardString = +@"000 + 000 + 010"; + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + board.SetBoard(boardString); + if (!fullBoard) + { + board.CurrentRows = 2; + board.CurrentColumns = 2; + } + + var sensorComponent = gameObj.AddComponent(); + sensorComponent.ObservationType = Match3ObservationType.UncompressedVisual; + var sensor = sensorComponent.CreateSensors()[0]; + + var expectedShape = new InplaceArray(3, 3, 2); + Assert.AreEqual(expectedShape, sensor.GetObservationSpec().Shape); + + Assert.AreEqual(SensorCompressionType.None, sensor.GetCompressionSpec().SensorCompressionType); + + float[] expectedObs; + float[,,] expectedObs3D; + + if (fullBoard) + { + expectedObs = new float[] + { + 1, 0, /**/ 0, 1, /**/ 1, 0, + 1, 0, /**/ 1, 0, /**/ 1, 0, + 1, 0, /**/ 1, 0, /**/ 1, 0, + }; + + expectedObs3D = new float[,,] + { + {{1, 0}, {0, 1}, {1, 0}}, + {{1, 0}, {1, 0}, {1, 0}}, + {{1, 0}, {1, 0}, {1, 0}}, + }; + } + else + { + expectedObs = new float[] + { + 1, 0, /* 0 */ 0, 1, /* 1 */ 0, 0, /* empty */ + 1, 0, /* 0 */ 1, 0, /* 0 */ 0, 0, /* empty */ + 0, 0, /* empty */ 0, 0, /* empty */ 0, 0, /* empty */ + }; + expectedObs3D = new float[,,] + { + {{1, 0}, {0, 1}, {0, 0}}, + {{1, 0}, {1, 0}, {0, 0}}, + {{0, 0}, {0, 0}, {0, 0}}, + }; + } + SensorTestHelper.CompareObservation(sensor, expectedObs); + SensorTestHelper.CompareObservation(sensor, expectedObs3D); + } + + [Test] + public void TestVisualObservationsSpecial() + { + var boardString = +@"000 + 000 + 010"; + var specialString = +@"010 + 200 + 000"; + + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + board.SetBoard(boardString); + board.SetSpecial(specialString); + + var sensorComponent = gameObj.AddComponent(); + sensorComponent.ObservationType = Match3ObservationType.UncompressedVisual; + var sensors = sensorComponent.CreateSensors(); + var cellSensor = sensors[0]; + var specialSensor = sensors[1]; + + { + var expectedShape = new InplaceArray(3, 3, 2); + Assert.AreEqual(expectedShape, cellSensor.GetObservationSpec().Shape); + + Assert.AreEqual(SensorCompressionType.None, cellSensor.GetCompressionSpec().SensorCompressionType); + + var expectedObs = new float[] + { + 1, 0, /* (0) */ 0, 1, /* (1) */ 1, 0, /* (0) */ + 1, 0, /* (0) */ 1, 0, /* (0) */ 1, 0, /* (0) */ + 1, 0, /* (0) */ 1, 0, /* (0) */ 1, 0, /* (0) */ + }; + SensorTestHelper.CompareObservation(cellSensor, expectedObs); + + var expectedObs3D = new float[,,] + { + {{1, 0}, {0, 1}, {1, 0}}, + {{1, 0}, {1, 0}, {1, 0}}, + {{1, 0}, {1, 0}, {1, 0}}, + }; + SensorTestHelper.CompareObservation(cellSensor, expectedObs3D); + } + { + var expectedShape = new InplaceArray(3, 3, 3); + Assert.AreEqual(expectedShape, specialSensor.GetObservationSpec().Shape); + + Assert.AreEqual(SensorCompressionType.None, specialSensor.GetCompressionSpec().SensorCompressionType); + + var expectedObs = new float[] + { + 1, 0, 0, /* (0) */ 1, 0, 0, /* (1) */ 1, 0, 0, /* (0) */ + 0, 0, 1, /* (2) */ 1, 0, 0, /* (0) */ 1, 0, 0, /* (0) */ + 1, 0, 0, /* (0) */ 0, 1, 0, /* (1) */ 1, 0, 0, /* (0) */ + }; + SensorTestHelper.CompareObservation(specialSensor, expectedObs); + + var expectedObs3D = new float[,,] + { + {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, + {{0, 0, 1}, {1, 0, 0}, {1, 0, 0}}, + {{1, 0, 0}, {0, 1, 0}, {1, 0, 0}}, + }; + SensorTestHelper.CompareObservation(specialSensor, expectedObs3D); + } + + // Test that Dispose() cleans up the component and its sensors + sensorComponent.Dispose(); + + var flags = BindingFlags.Instance | BindingFlags.NonPublic; + var componentSensors = (ISensor[])typeof(Match3SensorComponent).GetField("m_Sensors", flags).GetValue(sensorComponent); + Assert.IsNull(componentSensors); + var cellTexture = (Texture2D)typeof(Match3Sensor).GetField("m_ObservationTexture", flags).GetValue(cellSensor); + Assert.IsNull(cellTexture); + var specialTexture = (Texture2D)typeof(Match3Sensor).GetField("m_ObservationTexture", flags).GetValue(cellSensor); + Assert.IsNull(specialTexture); + } + + [TestCase(true, false, TestName = "Full Board, No Special")] + [TestCase(false, false, TestName = "Small Board, No Special")] + [TestCase(true, true, TestName = "Full Board, Special")] + [TestCase(false, true, TestName = "Small Board, Special")] + public void TestCompressedVisualObservationsSpecial(bool fullBoard, bool useSpecial) + { + var boardString = +@"003 + 000 + 010"; + var specialString = +@"014 + 200 + 000"; + + var gameObj = new GameObject("board"); + var board = gameObj.AddComponent(); + board.SetBoard(boardString); + var paths = new List { k_CellObservationPng }; + if (useSpecial) + { + board.SetSpecial(specialString); + paths.Add(k_SpecialObservationPng); + } + + if (!fullBoard) + { + // Shrink the board, and change the paths we're using for the ground truth PNGs + board.CurrentRows = 2; + board.CurrentColumns = 2; + for (var i = 0; i < paths.Count; i++) + { + paths[i] = paths[i] + k_Suffix2x2; + } + } + + var sensorComponent = gameObj.AddComponent(); + sensorComponent.ObservationType = Match3ObservationType.CompressedVisual; + var sensors = sensorComponent.CreateSensors(); + + var expectedNumChannels = new[] { 4, 5 }; + + for (var i = 0; i < paths.Count; i++) + { + var sensor = sensors[i]; + var expectedShape = new InplaceArray(3, 3, expectedNumChannels[i]); + Assert.AreEqual(expectedShape, sensor.GetObservationSpec().Shape); + + Assert.AreEqual(SensorCompressionType.PNG, sensor.GetCompressionSpec().SensorCompressionType); + + var pngData = sensor.GetCompressedObservation(); + if (WritePNGDataToFile) + { + // Enable this if the format of the observation changes + SavePNGs(pngData, paths[i]); + } + + var expectedPng = LoadPNGs(paths[i], 2); + Assert.AreEqual(expectedPng, pngData); + } + } + + /// + /// Helper method for un-concatenating PNG observations. + /// + /// + /// + List SplitPNGs(byte[] concatenated) + { + var pngsOut = new List(); + var pngHeader = new byte[] { 137, 80, 78, 71, 13, 10, 26, 10 }; + + var current = new List(); + for (var i = 0; i < concatenated.Length; i++) + { + current.Add(concatenated[i]); + + // Check if the header starts at the next position + // If so, we'll start a new output array. + var headerIsNext = false; + if (i + 1 < concatenated.Length - pngHeader.Length) + { + for (var j = 0; j < pngHeader.Length; j++) + { + if (concatenated[i + 1 + j] != pngHeader[j]) + { + break; + } + + if (j == pngHeader.Length - 1) + { + headerIsNext = true; + } + } + } + + if (headerIsNext) + { + pngsOut.Add(current.ToArray()); + current = new List(); + } + } + pngsOut.Add(current.ToArray()); + + return pngsOut; + } + + void SavePNGs(byte[] concatenatedPngData, string pathPrefix) + { + var splitPngs = SplitPNGs(concatenatedPngData); + + for (var i = 0; i < splitPngs.Count; i++) + { + var pngData = splitPngs[i]; + var path = $"Packages/com.unity.ml-agents/Tests/Editor/Integrations/Match3/{pathPrefix}{i}.png"; + using (var sw = File.Create(path)) + { + foreach (var b in pngData) + { + sw.WriteByte(b); + } + } + } + } + + byte[] LoadPNGs(string pathPrefix, int numExpected) + { + var bytesOut = new List(); + for (var i = 0; i < numExpected; i++) + { + var path = $"Packages/com.unity.ml-agents/Tests/Editor/Integrations/Match3/{pathPrefix}{i}.png"; + var res = File.ReadAllBytes(path); + bytesOut.AddRange(res); + } + + return bytesOut.ToArray(); + } + + [Test] + public void TestNoBoardReturnsEmptySensors() + { + var gameObj = new GameObject("board"); + var sensorComponent = gameObj.AddComponent(); + var sensors = sensorComponent.CreateSensors(); + Assert.AreEqual(0, sensors.Length); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3SensorTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3SensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..38a1a4d010697ae074e69bc91b2e9ce99439f978 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/Match3SensorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dfe94a9d6e994f408cb97d07dd44c994 +timeCreated: 1603493723 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/MoveTests.cs b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/MoveTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..f4755b4860b7fc74cf5d14881cabc669faf1311f --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/MoveTests.cs @@ -0,0 +1,65 @@ +using System; +using NUnit.Framework; +using Unity.MLAgents.Integrations.Match3; + +namespace Unity.MLAgents.Tests.Integrations.Match3 +{ + public class MoveTests + { + [Test] + public void TestMoveEquivalence() + { + var board10x10 = new BoardSize { Rows = 10, Columns = 10 }; + var moveUp = Move.FromPositionAndDirection(1, 1, Direction.Up, board10x10); + var moveDown = Move.FromPositionAndDirection(2, 1, Direction.Down, board10x10); + Assert.AreEqual(moveUp.MoveIndex, moveDown.MoveIndex); + + var moveRight = Move.FromPositionAndDirection(1, 1, Direction.Right, board10x10); + var moveLeft = Move.FromPositionAndDirection(1, 2, Direction.Left, board10x10); + Assert.AreEqual(moveRight.MoveIndex, moveLeft.MoveIndex); + } + + [Test] + public void TestNext() + { + var maxRows = 8; + var maxCols = 13; + var boardSize = new BoardSize + { + Rows = maxRows, + Columns = maxCols + }; + // make sure using Next agrees with FromMoveIndex. + var advanceMove = Move.FromMoveIndex(0, boardSize); + for (var moveIndex = 0; moveIndex < Move.NumPotentialMoves(boardSize); moveIndex++) + { + var moveFromIndex = Move.FromMoveIndex(moveIndex, boardSize); + Assert.AreEqual(advanceMove.MoveIndex, moveFromIndex.MoveIndex); + Assert.AreEqual(advanceMove.Row, moveFromIndex.Row); + Assert.AreEqual(advanceMove.Column, moveFromIndex.Column); + Assert.AreEqual(advanceMove.Direction, moveFromIndex.Direction); + + advanceMove.Next(boardSize); + } + } + + // These are off the board + [TestCase(-1, 5, Direction.Up)] + [TestCase(10, 5, Direction.Up)] + [TestCase(5, -1, Direction.Up)] + [TestCase(5, 10, Direction.Up)] + // These are on the board but would move off + [TestCase(0, 5, Direction.Down)] + [TestCase(9, 5, Direction.Up)] + [TestCase(5, 0, Direction.Left)] + [TestCase(5, 9, Direction.Right)] + public void TestInvalidMove(int row, int col, Direction dir) + { + var board10x10 = new BoardSize { Rows = 10, Columns = 10 }; + Assert.Throws(() => + { + Move.FromPositionAndDirection(row, col, dir, board10x10); + }); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/MoveTests.cs.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/MoveTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e016865fcb566aeaea501afdccf99cf105c9b70c --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/MoveTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 42981032af6f4241ae20fe24e898f60b +timeCreated: 1601336681 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_0.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0743d0bc134ec0cc0a2ad89b3355f4443046cd01 Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_0.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_0.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_0.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9faafa2e61b6bca6b4b3c7ec69e11df090b6e7fd --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_0.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: d91bf3f1eb13c4361bfb8bb61b94a71a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_1.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_1.png new file mode 100644 index 0000000000000000000000000000000000000000..afd50b9af82ee86f0e947e2fb064de756e19cadf Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_1.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_1.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_1.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..adbae821a03089654385bdf946f5fc5381f238de --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_1.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: dba7ae2c8d38c4c20b14412feb512a73 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_0.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..678315a87eb115daafe86707337bc2cc82864080 Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_0.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_0.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_0.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7e8aa6438a2d53621d2dfe319bbd89939dfdc885 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_0.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 63cd02fa3b69e430aa14ed2b919071fb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_1.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f66a52754c4dbadae09817e056e6f19951889ab Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_1.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_1.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_1.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..8a8b427966e4b2d04a85c6a382982ba2885f84cb --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_2x2_1.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 09381a5789a894c39b220f74e8b59a2a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_0.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_0.png new file mode 100644 index 0000000000000000000000000000000000000000..217e1f0b0aafc4928f5bebf50e6dc803805542ed Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_0.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_0.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_0.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..880d53c638409fa0396950141f9e9974bdbbc555 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_0.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 79c99419c5c4a4378b93c1496ea40338 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_1.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed8c591ed238951a01759867febf685ef30124a Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_1.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_1.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_1.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..be876a47d60b2abe775a0b5f494eeede5b00bb1e --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_1.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 0ba48eb2f5f7e4ccc91a1c28784b2e13 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_0.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..15a5808be12b1ef4d3a674f9e5f8ee471540c69a Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_0.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_0.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_0.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c625d01a60db669621d0660ebac59e93159980c6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_0.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 3364811072f604580bd30b733f84f485 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_1.png b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f66a52754c4dbadae09817e056e6f19951889ab Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_1.png differ diff --git a/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_1.png.meta b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_1.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..a05eb54ec5ead03025c353ca0bcf767c62a0ff91 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Integrations/Match3/match3obs_special_2x2_1.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 8fc3c98253b4846dc99475d4cd3ba93b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..221fe71cf7e4cd8abff4ed5c493e5ee923e48bff --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs @@ -0,0 +1,742 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using NUnit.Framework; +using System.Reflection; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; +using Unity.MLAgents.Policies; +using Unity.MLAgents.SideChannels; +using Unity.MLAgents.Utils.Tests; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class EditModeTestGeneration + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [Test] + public void TestAcademy() + { + var aca = Academy.Instance; + Assert.AreNotEqual(null, aca); + Assert.AreEqual(0, aca.EpisodeCount); + Assert.AreEqual(0, aca.StepCount); + Assert.AreEqual(0, aca.TotalStepCount); + } + + [Test] + public void TestAgent() + { + var agentGo = new GameObject("TestAgent"); + agentGo.AddComponent(); + var agent = agentGo.GetComponent(); + Assert.AreNotEqual(null, agent); + Assert.AreEqual(0, agent.initializeAgentCalls); + } + } + + [TestFixture] + public class EditModeTestInitialization + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [Test] + public void TestAcademy() + { + Assert.AreEqual(false, Academy.IsInitialized); + var aca = Academy.Instance; + Assert.AreEqual(true, Academy.IsInitialized); + + // Check that init is idempotent + aca.LazyInitialize(); + aca.LazyInitialize(); + + Assert.AreEqual(0, aca.EpisodeCount); + Assert.AreEqual(0, aca.StepCount); + Assert.AreEqual(0, aca.TotalStepCount); + Assert.AreNotEqual(null, SideChannelManager.GetSideChannel()); + Assert.AreNotEqual(null, SideChannelManager.GetSideChannel()); + Assert.AreNotEqual(null, SideChannelManager.GetSideChannel()); + + // Check that Dispose is idempotent + aca.Dispose(); + Assert.AreEqual(false, Academy.IsInitialized); + aca.Dispose(); + } + + [Test] + public void TestAcademyDispose() + { + var envParams1 = SideChannelManager.GetSideChannel(); + var engineParams1 = SideChannelManager.GetSideChannel(); + var statsParams1 = SideChannelManager.GetSideChannel(); + Academy.Instance.Dispose(); + + Academy.Instance.LazyInitialize(); + var envParams2 = SideChannelManager.GetSideChannel(); + var engineParams2 = SideChannelManager.GetSideChannel(); + var statsParams2 = SideChannelManager.GetSideChannel(); + Academy.Instance.Dispose(); + + Assert.AreNotEqual(envParams1, envParams2); + Assert.AreNotEqual(engineParams1, engineParams2); + Assert.AreNotEqual(statsParams1, statsParams2); + } + + [Test] + public void TestAgent() + { + var agentGo1 = new GameObject("TestAgent"); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var bp1 = agentGo1.GetComponent(); + bp1.ObservableAttributeHandling = ObservableAttributeOptions.ExcludeInherited; + + var agentGo2 = new GameObject("TestAgent"); + agentGo2.AddComponent(); + var agent2 = agentGo2.GetComponent(); + + Assert.AreEqual(0, agent1.agentOnEpisodeBeginCalls); + Assert.AreEqual(0, agent2.agentOnEpisodeBeginCalls); + Assert.AreEqual(0, agent1.initializeAgentCalls); + Assert.AreEqual(0, agent2.initializeAgentCalls); + Assert.AreEqual(0, agent1.agentActionCalls); + Assert.AreEqual(0, agent2.agentActionCalls); + + + agent2.LazyInitialize(); + agent1.LazyInitialize(); + + // agent1 was not enabled when the academy started + // The agents have been initialized + Assert.AreEqual(0, agent1.agentOnEpisodeBeginCalls); + Assert.AreEqual(0, agent2.agentOnEpisodeBeginCalls); + Assert.AreEqual(1, agent1.initializeAgentCalls); + Assert.AreEqual(1, agent2.initializeAgentCalls); + Assert.AreEqual(0, agent1.agentActionCalls); + Assert.AreEqual(0, agent2.agentActionCalls); + + // Make sure the Sensors were sorted + Assert.AreEqual(agent1.sensors[0].GetName(), "observableFloat"); + Assert.AreEqual(agent1.sensors[1].GetName(), "testsensor1"); + Assert.AreEqual(agent1.sensors[2].GetName(), "testsensor2"); + + // agent2 should only have two sensors (no observableFloat) + Assert.AreEqual(agent2.sensors[0].GetName(), "testsensor1"); + Assert.AreEqual(agent2.sensors[1].GetName(), "testsensor2"); + } + } + + [TestFixture] + public class EditModeTestStep + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [Test] + public void TestAcademy() + { + var aca = Academy.Instance; + + var numberReset = 0; + for (var i = 0; i < 10; i++) + { + Assert.AreEqual(numberReset, aca.EpisodeCount); + Assert.AreEqual(i, aca.StepCount); + + // The reset happens at the beginning of the first step + if (i == 0) + { + numberReset += 1; + } + Academy.Instance.EnvironmentStep(); + } + } + + [Test] + public void TestAcademyAutostep() + { + var aca = Academy.Instance; + Assert.IsTrue(aca.AutomaticSteppingEnabled); + aca.AutomaticSteppingEnabled = false; + Assert.IsFalse(aca.AutomaticSteppingEnabled); + aca.AutomaticSteppingEnabled = true; + Assert.IsTrue(aca.AutomaticSteppingEnabled); + } + + [Test] + public void TestAgent() + { + var agentGo1 = new GameObject("TestAgent"); + var bp1 = agentGo1.AddComponent(); + bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var agentGo2 = new GameObject("TestAgent"); + var bp2 = agentGo2.AddComponent(); + bp2.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + agentGo2.AddComponent(); + var agent2 = agentGo2.GetComponent(); + + var aca = Academy.Instance; + + var decisionRequester = agent1.gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 2; + decisionRequester.Awake(); + // agent1 will take an action at every step and request a decision every 2 steps + // agent2 will request decisions only when RequestDecision is called + + agent1.LazyInitialize(); + + var numberAgent1Episodes = 0; + var numberAgent2Episodes = 0; + var numberAgent2Initialization = 0; + var requestDecision = 0; + var requestAction = 0; + for (var i = 0; i < 50; i++) + { + Assert.AreEqual(numberAgent1Episodes, agent1.agentOnEpisodeBeginCalls); + Assert.AreEqual(numberAgent2Episodes, agent2.agentOnEpisodeBeginCalls); + Assert.AreEqual(1, agent1.initializeAgentCalls); + Assert.AreEqual(numberAgent2Initialization, agent2.initializeAgentCalls); + Assert.AreEqual(i, agent1.agentActionCalls); + Assert.AreEqual(requestAction, agent2.agentActionCalls); + Assert.AreEqual((i + 1) / 2, agent1.collectObservationsCalls); + Assert.AreEqual(requestDecision, agent2.collectObservationsCalls); + // Agent 1 starts a new episode at the first step + if (i == 0) + { + numberAgent1Episodes += 1; + } + //Agent 2 is only initialized at step 2 + if (i == 2) + { + // Since Agent2 is initialized after the Academy has stepped, its OnEpisodeBegin should be called now. + Assert.AreEqual(0, agent2.agentOnEpisodeBeginCalls); + agent2.LazyInitialize(); + Assert.AreEqual(1, agent2.agentOnEpisodeBeginCalls); + numberAgent2Initialization += 1; + numberAgent2Episodes += 1; + } + + // We are testing request decision and request actions when called + // at different intervals + if ((i % 3 == 0) && (i > 2)) + { + //Every 3 steps after agent 2 is initialized, request decision + requestDecision += 1; + requestAction += 1; + agent2.RequestDecision(); + } + else if ((i % 5 == 0) && (i > 2)) + { + // Every 5 steps after agent 2 is initialized, request action + requestAction += 1; + agent2.RequestAction(); + } + aca.EnvironmentStep(); + } + } + } + + [TestFixture] + public class EditModeTestReset + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [Test] + public void TestAcademy() + { + var aca = Academy.Instance; + + var numberReset = 0; + var stepsSinceReset = 0; + for (var i = 0; i < 50; i++) + { + Assert.AreEqual(stepsSinceReset, aca.StepCount); + Assert.AreEqual(numberReset, aca.EpisodeCount); + Assert.AreEqual(i, aca.TotalStepCount); + + // Academy resets at the first step + if (i == 0) + { + numberReset += 1; + } + + stepsSinceReset += 1; + aca.EnvironmentStep(); + } + } + + [Test] + public void TestAgent() + { + var agentGo1 = new GameObject("TestAgent"); + var bp1 = agentGo1.AddComponent(); + bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var agentGo2 = new GameObject("TestAgent"); + var bp2 = agentGo2.AddComponent(); + bp2.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + agentGo2.AddComponent(); + var agent2 = agentGo2.GetComponent(); + + var aca = Academy.Instance; + + var decisionRequester = agent1.gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 2; + + agent2.LazyInitialize(); + + var numberAgent1Episodes = 0; + var numberAgent2Episodes = 0; + var numberAcaReset = 0; + var acaStepsSinceReset = 0; + var agent2StepForEpisode = 0; + for (var i = 0; i < 5000; i++) + { + Assert.AreEqual(acaStepsSinceReset, aca.StepCount); + Assert.AreEqual(numberAcaReset, aca.EpisodeCount); + + Assert.AreEqual(i, aca.TotalStepCount); + Assert.AreEqual(numberAgent2Episodes, agent2.agentOnEpisodeBeginCalls); + Assert.AreEqual(agent2StepForEpisode, agent2.StepCount); + + // Agent 2 and academy reset at the first step + if (i == 0) + { + Assert.AreEqual(numberAgent2Episodes, agent2.agentOnEpisodeBeginCalls); + numberAcaReset += 1; + numberAgent2Episodes += 1; + } + + //Agent 1 is only initialized at step 2 + if (i == 2) + { + Assert.AreEqual(numberAgent1Episodes, agent1.agentOnEpisodeBeginCalls); + agent1.LazyInitialize(); + numberAgent1Episodes += 1; + Assert.AreEqual(numberAgent1Episodes, agent1.agentOnEpisodeBeginCalls); + } + + // Set agent 1 to done every 11 steps to test behavior + if (i % 11 == 5) + { + Assert.AreEqual(numberAgent1Episodes, agent1.agentOnEpisodeBeginCalls); + agent1.EndEpisode(); + numberAgent1Episodes += 1; + Assert.AreEqual(numberAgent1Episodes, agent1.agentOnEpisodeBeginCalls); + } + + // Ending the episode for agent 2 regularly + if (i % 13 == 3) + { + Assert.AreEqual(numberAgent2Episodes, agent2.agentOnEpisodeBeginCalls); + agent2.EndEpisode(); + numberAgent2Episodes += 1; + agent2StepForEpisode = 0; + Assert.AreEqual(numberAgent2Episodes, agent2.agentOnEpisodeBeginCalls); + } + + // Request a decision for agent 2 regularly + if (i % 3 == 2) + { + agent2.RequestDecision(); + } + else if (i % 5 == 1) + { + // Request an action without decision regularly + agent2.RequestAction(); + } + + acaStepsSinceReset += 1; + agent2StepForEpisode += 1; + aca.EnvironmentStep(); + } + } + } + + [TestFixture] + public class EditModeTestMiscellaneous + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + [Test] + public void TestCumulativeReward() + { + var agentGo1 = new GameObject("TestAgent"); + var bp1 = agentGo1.AddComponent(); + bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + var agent1 = agentGo1.AddComponent(); + var agentGo2 = new GameObject("TestAgent"); + var bp2 = agentGo2.AddComponent(); + bp2.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + var agent2 = agentGo2.AddComponent(); + var aca = Academy.Instance; + + var decisionRequester = agent1.gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 2; + decisionRequester.Awake(); + + + agent1.MaxStep = 20; + + agent2.LazyInitialize(); + agent1.LazyInitialize(); + agent2.SetPolicy(new TestPolicy()); + + var expectedAgent1ActionForEpisode = 0; + + for (var i = 0; i < 50; i++) + { + expectedAgent1ActionForEpisode += 1; + if (expectedAgent1ActionForEpisode == agent1.MaxStep || i == 0) + { + expectedAgent1ActionForEpisode = 0; + } + agent2.RequestAction(); + Assert.LessOrEqual(Mathf.Abs(expectedAgent1ActionForEpisode * 10.1f - agent1.GetCumulativeReward()), 0.05f); + Assert.LessOrEqual(Mathf.Abs(i * 0.1f - agent2.GetCumulativeReward()), 0.05f); + + agent1.AddReward(10f); + aca.EnvironmentStep(); + } + } + + [Test] + public void TestMaxStepsReset() + { + var agentGo1 = new GameObject("TestAgent"); + var bp1 = agentGo1.AddComponent(); + bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var aca = Academy.Instance; + + var decisionRequester = agent1.gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 1; + decisionRequester.Awake(); + + const int maxStep = 6; + agent1.MaxStep = maxStep; + agent1.LazyInitialize(); + + var expectedAgentStepCount = 0; + var expectedEpisodes = 0; + var expectedAgentAction = 0; + var expectedAgentActionForEpisode = 0; + var expectedCollectObsCalls = 0; + var expectedCollectObsCallsForEpisode = 0; + var expectedCompletedEpisodes = 0; + var expectedSensorResetCalls = 0; + + for (var i = 0; i < 15; i++) + { + // Agent should observe and act on each Academy step + expectedAgentAction += 1; + expectedAgentActionForEpisode += 1; + expectedCollectObsCalls += 1; + expectedCollectObsCallsForEpisode += 1; + expectedAgentStepCount += 1; + + // If the next step will put the agent at maxSteps, we expect it to reset + if (agent1.StepCount == maxStep - 1 || (i == 0)) + { + expectedEpisodes += 1; + } + + if (agent1.StepCount == maxStep - 1) + { + expectedAgentActionForEpisode = 0; + expectedCollectObsCallsForEpisode = 0; + expectedAgentStepCount = 0; + expectedCompletedEpisodes++; + expectedSensorResetCalls++; + expectedCollectObsCalls += 1; + } + aca.EnvironmentStep(); + + Assert.AreEqual(expectedAgentStepCount, agent1.StepCount); + Assert.AreEqual(expectedEpisodes, agent1.agentOnEpisodeBeginCalls); + Assert.AreEqual(expectedAgentAction, agent1.agentActionCalls); + Assert.AreEqual(expectedAgentActionForEpisode, agent1.agentActionCallsForEpisode); + Assert.AreEqual(expectedCollectObsCalls, agent1.collectObservationsCalls); + Assert.AreEqual(expectedCollectObsCallsForEpisode, agent1.collectObservationsCallsForEpisode); + Assert.AreEqual(expectedCompletedEpisodes, agent1.CompletedEpisodes); + Assert.AreEqual(expectedSensorResetCalls, agent1.sensor1.numResetCalls); + } + } + + [Test] + public void TestHeuristicPolicyStepsSensors() + { + // Make sure that Agents with HeuristicPolicies step their sensors each Academy step. + var agentGo1 = new GameObject("TestAgent"); + var bp1 = agentGo1.AddComponent(); + bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var aca = Academy.Instance; + + var decisionRequester = agent1.gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 1; + decisionRequester.Awake(); + + agent1.LazyInitialize(); + Assert.AreEqual(agent1.GetPolicy().GetType(), typeof(HeuristicPolicy)); + + var numSteps = 10; + for (var i = 0; i < numSteps; i++) + { + aca.EnvironmentStep(); + } + Assert.AreEqual(numSteps, agent1.heuristicCalls); + Assert.AreEqual(numSteps, agent1.sensor1.numWriteCalls); + Assert.AreEqual(numSteps, agent1.sensor2.numCompressedCalls); + + Assert.AreEqual( + agent1.collectObservationsCallsForEpisode, + agent1.GetStoredActionBuffers().ContinuousActions[0] + ); + } + + [Test] + public void TestNullList() + { + var nullList = new HeuristicPolicy.NullList(); + Assert.Throws(() => + { + _ = ((IEnumerable)nullList).GetEnumerator(); + }); + + Assert.Throws(() => + { + _ = ((IEnumerable)nullList).GetEnumerator(); + }); + + Assert.Throws(() => + { + nullList.CopyTo(new[] { 0f }, 0); + }); + + nullList.Add(0); + Assert.IsTrue(nullList.Count == 0); + + nullList.Clear(); + Assert.IsTrue(nullList.Count == 0); + + nullList.Add(0); + Assert.IsFalse(nullList.Contains(0)); + Assert.IsFalse(nullList.Remove(0)); + Assert.IsFalse(nullList.IsReadOnly); + Assert.IsTrue(nullList.IndexOf(0) == -1); + nullList.Insert(0, 0); + Assert.IsFalse(nullList.Count > 0); + nullList.RemoveAt(0); + Assert.IsTrue(nullList.Count == 0); + Assert.IsTrue(Mathf.Approximately(0f, nullList[0])); + Assert.IsTrue(Mathf.Approximately(0f, nullList[1])); + } + } + + [TestFixture] + public class TestOnEnableOverride + { + public class OnEnableAgent : Agent + { + public bool callBase; + + protected override void OnEnable() + { + if (callBase) + base.OnEnable(); + } + } + + static void _InnerAgentTestOnEnableOverride(bool callBase = false) + { + var go = new GameObject(); + var agent = go.AddComponent(); + agent.callBase = callBase; + var onEnable = typeof(OnEnableAgent).GetMethod("OnEnable", BindingFlags.NonPublic | BindingFlags.Instance); + var sendInfo = typeof(Agent).GetMethod("SendInfoToBrain", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(onEnable); + onEnable.Invoke(agent, null); + Assert.NotNull(sendInfo); + if (agent.callBase) + { + Assert.DoesNotThrow(() => sendInfo.Invoke(agent, null)); + } + else + { + Assert.Throws(() => + { + try + { + sendInfo.Invoke(agent, null); + } + catch (TargetInvocationException e) + { + throw e.GetBaseException(); + } + }); + } + } + + [Test] + public void TestAgentCallBaseOnEnable() + { + _InnerAgentTestOnEnableOverride(true); + } + + [Test] + public void TestAgentDontCallBaseOnEnable() + { + _InnerAgentTestOnEnableOverride(); + } + } + + [TestFixture] + public class ObservableAttributeBehaviorTests + { + public class BaseObservableAgent : Agent + { + [Observable] + public float BaseField; + } + + public class DerivedObservableAgent : BaseObservableAgent + { + [Observable] + public float DerivedField; + } + + + [Test] + public void TestObservableAttributeBehaviorIgnore() + { + var variants = new[] + { + // No observables found + (ObservableAttributeOptions.Ignore, 0), + // Only DerivedField found + (ObservableAttributeOptions.ExcludeInherited, 1), + // DerivedField and BaseField found + (ObservableAttributeOptions.ExamineAll, 2) + }; + + foreach (var (behavior, expectedNumSensors) in variants) + { + var go = new GameObject(); + var agent = go.AddComponent(); + var bp = go.GetComponent(); + bp.ObservableAttributeHandling = behavior; + agent.LazyInitialize(); + int numAttributeSensors = 0; + foreach (var sensor in agent.sensors) + { + if (sensor.GetType() != typeof(VectorSensor)) + { + numAttributeSensors++; + } + } + Assert.AreEqual(expectedNumSensors, numAttributeSensors); + } + } + } + + [TestFixture] + public class AgentRecursionTests + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + class CollectObsEndEpisodeAgent : Agent + { + public override void CollectObservations(VectorSensor sensor) + { + // NEVER DO THIS IN REAL CODE! + EndEpisode(); + } + } + + class OnEpisodeBeginEndEpisodeAgent : Agent + { + public override void OnEpisodeBegin() + { + // NEVER DO THIS IN REAL CODE! + EndEpisode(); + } + } + + void TestRecursiveThrows() where T : Agent + { + var gameObj = new GameObject(); + var agent = gameObj.AddComponent(); + agent.LazyInitialize(); + agent.RequestDecision(); + + Assert.Throws(() => + { + Academy.Instance.EnvironmentStep(); + }); + } + + [Test] + public void TestRecursiveCollectObsEndEpisodeThrows() + { + TestRecursiveThrows(); + } + + [Test] + public void TestRecursiveOnEpisodeBeginEndEpisodeThrows() + { + TestRecursiveThrows(); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs.meta b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2823ab05a5945c7abaff0cc3a6d2e591541900e0 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3170fcbfa5f4d4a8ca82c50c750e9083 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/MultiAgentGroupTests.cs b/com.unity.ml-agents/Tests/Editor/MultiAgentGroupTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..5d987d55dfc98e743b924b71cc0f3f8b91634e37 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/MultiAgentGroupTests.cs @@ -0,0 +1,118 @@ +using System; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; + +namespace Unity.MLAgents.Tests +{ + public class MultiAgentGroupTests + { + class TestAgent : Agent + { + internal int _GroupId + { + get + { + return (int)typeof(Agent).GetField("m_GroupId", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + } + + internal float _GroupReward + { + get + { + return (float)typeof(Agent).GetField("m_GroupReward", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + } + + internal Action _OnAgentDisabledActions + { + get + { + return (Action)typeof(Agent).GetField("OnAgentDisabled", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + } + } + + [Test] + public void TestRegisteredAgentGroupId() + { + var agentGo = new GameObject("TestAgent"); + agentGo.AddComponent(); + var agent = agentGo.GetComponent(); + + // test register + SimpleMultiAgentGroup agentGroup1 = new SimpleMultiAgentGroup(); + agentGroup1.RegisterAgent(agent); + Assert.AreEqual(agentGroup1.GetId(), agent._GroupId); + Assert.IsNotNull(agent._OnAgentDisabledActions); + + // should not be able to registered to multiple groups + SimpleMultiAgentGroup agentGroup2 = new SimpleMultiAgentGroup(); + Assert.Throws( + () => agentGroup2.RegisterAgent(agent)); + Assert.AreEqual(agentGroup1.GetId(), agent._GroupId); + + // test unregister + agentGroup1.UnregisterAgent(agent); + Assert.AreEqual(0, agent._GroupId); + Assert.IsNull(agent._OnAgentDisabledActions); + + // test register to another group after unregister + agentGroup2.RegisterAgent(agent); + Assert.AreEqual(agentGroup2.GetId(), agent._GroupId); + Assert.IsNotNull(agent._OnAgentDisabledActions); + } + + [Test] + public void TestRegisterMultipleAgent() + { + var agentGo1 = new GameObject("TestAgent"); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var agentGo2 = new GameObject("TestAgent"); + agentGo2.AddComponent(); + var agent2 = agentGo2.GetComponent(); + + SimpleMultiAgentGroup agentGroup = new SimpleMultiAgentGroup(); + agentGroup.RegisterAgent(agent1); // register + Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 1); + agentGroup.UnregisterAgent(agent2); // unregister non-member agent + Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 1); + agentGroup.UnregisterAgent(agent1); // unregister + Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 0); + agentGroup.RegisterAgent(agent1); + agentGroup.RegisterAgent(agent1); // duplicated register + Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 1); + agentGroup.RegisterAgent(agent2); // register another + Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 2); + + // test add/set group rewards + agentGroup.AddGroupReward(0.1f); + Assert.AreEqual(0.1f, agent1._GroupReward); + agentGroup.AddGroupReward(0.5f); + Assert.AreEqual(0.6f, agent1._GroupReward); + agentGroup.SetGroupReward(0.3f); + Assert.AreEqual(0.3f, agent1._GroupReward); + // unregistered agent should not receive group reward + agentGroup.UnregisterAgent(agent1); + agentGroup.AddGroupReward(0.2f); + Assert.AreEqual(0.3f, agent1._GroupReward); + Assert.AreEqual(0.5f, agent2._GroupReward); + + // dispose group should automatically unregister all + agentGroup.Dispose(); + Assert.AreEqual(0, agent1._GroupId); + Assert.AreEqual(0, agent2._GroupId); + } + + [Test] + public void TestGroupIdCounter() + { + SimpleMultiAgentGroup group1 = new SimpleMultiAgentGroup(); + SimpleMultiAgentGroup group2 = new SimpleMultiAgentGroup(); + // id should be unique + Assert.AreNotEqual(group1.GetId(), group2.GetId()); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/MultiAgentGroupTests.cs.meta b/com.unity.ml-agents/Tests/Editor/MultiAgentGroupTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7edd5022788dd0f9dc9cea8b823966f9c8d23c6d --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/MultiAgentGroupTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef0158fde748d478ca5ee3bbe22a4c9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/MultinomialTest.cs b/com.unity.ml-agents/Tests/Editor/MultinomialTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..28e3b1db6e69d41ba77a0e618ebaec9943dec795 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/MultinomialTest.cs @@ -0,0 +1,54 @@ +using NUnit.Framework; +using Unity.MLAgents.Inference.Utils; + +namespace Unity.MLAgents.Tests +{ + public class MultinomialTest + { + [Test] + public void TestDim1() + { + var m = new Multinomial(2018); + var cdf = new[] { 1f }; + + Assert.AreEqual(0, m.Sample(cdf)); + Assert.AreEqual(0, m.Sample(cdf)); + Assert.AreEqual(0, m.Sample(cdf)); + } + + [Test] + public void TestDim1Unscaled() + { + var m = new Multinomial(2018); + var cdf = new[] { 0.1f }; + + Assert.AreEqual(0, m.Sample(cdf)); + Assert.AreEqual(0, m.Sample(cdf)); + Assert.AreEqual(0, m.Sample(cdf)); + } + + [Test] + public void TestDim3() + { + var m = new Multinomial(2018); + var cdf = new[] { 0.1f, 0.3f, 1.0f }; + + Assert.AreEqual(2, m.Sample(cdf)); + Assert.AreEqual(2, m.Sample(cdf)); + Assert.AreEqual(2, m.Sample(cdf)); + Assert.AreEqual(1, m.Sample(cdf)); + } + + [Test] + public void TestDim3Unscaled() + { + var m = new Multinomial(2018); + var cdf = new[] { 0.05f, 0.15f, 0.5f }; + + Assert.AreEqual(2, m.Sample(cdf)); + Assert.AreEqual(2, m.Sample(cdf)); + Assert.AreEqual(2, m.Sample(cdf)); + Assert.AreEqual(1, m.Sample(cdf)); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/MultinomialTest.cs.meta b/com.unity.ml-agents/Tests/Editor/MultinomialTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..44fd9bbe91f9cbf23542f0f8f1c62cecf945a013 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/MultinomialTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 668f4ac2d83814df5a8883722633e4e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/ObservationSpecTests.cs b/com.unity.ml-agents/Tests/Editor/ObservationSpecTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..3dd0c911567ead739381746499bb67feac6dcfc7 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/ObservationSpecTests.cs @@ -0,0 +1,75 @@ +using NUnit.Framework; +using Unity.MLAgents.Sensors; + + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class ObservationSpecTests + { + [Test] + public void TestVectorObsSpec() + { + var obsSpec = ObservationSpec.Vector(5); + Assert.AreEqual(1, obsSpec.Rank); + + var shape = obsSpec.Shape; + Assert.AreEqual(1, shape.Length); + Assert.AreEqual(5, shape[0]); + + var dimensionProps = obsSpec.DimensionProperties; + Assert.AreEqual(1, dimensionProps.Length); + Assert.AreEqual(DimensionProperty.None, dimensionProps[0]); + + Assert.AreEqual(ObservationType.Default, obsSpec.ObservationType); + } + + [Test] + public void TestVariableLengthObsSpec() + { + var obsSpec = ObservationSpec.VariableLength(5, 6); + Assert.AreEqual(2, obsSpec.Rank); + + var shape = obsSpec.Shape; + Assert.AreEqual(2, shape.Length); + Assert.AreEqual(5, shape[0]); + Assert.AreEqual(6, shape[1]); + + var dimensionProps = obsSpec.DimensionProperties; + Assert.AreEqual(2, dimensionProps.Length); + Assert.AreEqual(DimensionProperty.VariableSize, dimensionProps[0]); + Assert.AreEqual(DimensionProperty.None, dimensionProps[1]); + + Assert.AreEqual(ObservationType.Default, obsSpec.ObservationType); + } + + [Test] + public void TestVisualObsSpec() + { + var obsSpec = ObservationSpec.Visual(5, 6, 7); + Assert.AreEqual(3, obsSpec.Rank); + + var shape = obsSpec.Shape; + Assert.AreEqual(3, shape.Length); + Assert.AreEqual(5, shape[0]); + Assert.AreEqual(6, shape[1]); + Assert.AreEqual(7, shape[2]); + + var dimensionProps = obsSpec.DimensionProperties; + Assert.AreEqual(3, dimensionProps.Length); + Assert.AreEqual(DimensionProperty.TranslationalEquivariance, dimensionProps[0]); + Assert.AreEqual(DimensionProperty.TranslationalEquivariance, dimensionProps[1]); + Assert.AreEqual(DimensionProperty.None, dimensionProps[2]); + + Assert.AreEqual(ObservationType.Default, obsSpec.ObservationType); + } + + [Test] + public void TestMismatchShapeDimensionPropThrows() + { + var shape = new InplaceArray(1, 2); + var dimProps = new InplaceArray(DimensionProperty.TranslationalEquivariance); + Assert.Throws(() => new ObservationSpec(shape, dimProps)); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/ObservationSpecTests.cs.meta b/com.unity.ml-agents/Tests/Editor/ObservationSpecTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2ea6756e5031646da242b5aaaad9a734db765dbf --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/ObservationSpecTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 27ff1979bd5e4b8ebeb4d98f414a5090 +timeCreated: 1615863866 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Policies.meta b/com.unity.ml-agents/Tests/Editor/Policies.meta new file mode 100644 index 0000000000000000000000000000000000000000..be3f189b91e57f05fa55749b9c829bef0e8e649b --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Policies.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df271cac120e4d6893b14599fa8eb64d +timeCreated: 1617813392 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Policies/HeuristicPolicyTest.cs b/com.unity.ml-agents/Tests/Editor/Policies/HeuristicPolicyTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..22b48ea9e74e39a7a0a711a682907f5633b2d2f4 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Policies/HeuristicPolicyTest.cs @@ -0,0 +1,123 @@ +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using UnityEngine; + +namespace Unity.MLAgents.Tests.Policies +{ + [TestFixture] + public class HeuristicPolicyTest + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + } + + /// + /// Assert that the action buffers are initialized to zero, and then set them to non-zero values. + /// + /// + static void CheckAndSetBuffer(in ActionBuffers actionsOut) + { + var continuousActions = actionsOut.ContinuousActions; + for (var continuousIndex = 0; continuousIndex < continuousActions.Length; continuousIndex++) + { + Assert.AreEqual(continuousActions[continuousIndex], 0.0f); + continuousActions[continuousIndex] = 1.0f; + } + + var discreteActions = actionsOut.DiscreteActions; + for (var discreteIndex = 0; discreteIndex < discreteActions.Length; discreteIndex++) + { + Assert.AreEqual(discreteActions[discreteIndex], 0); + discreteActions[discreteIndex] = 1; + } + } + + class ActionClearedAgent : Agent + { + public int HeuristicCalls; + public override void Heuristic(in ActionBuffers actionsOut) + { + CheckAndSetBuffer(actionsOut); + HeuristicCalls++; + } + } + + class ActionClearedActuator : IActuator + { + public int HeuristicCalls; + public ActionClearedActuator(ActionSpec actionSpec) + { + ActionSpec = actionSpec; + Name = GetType().Name; + } + + public void OnActionReceived(ActionBuffers actionBuffers) + { + } + + public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) + { + } + + public void Heuristic(in ActionBuffers actionBuffersOut) + { + CheckAndSetBuffer(actionBuffersOut); + HeuristicCalls++; + } + + public ActionSpec ActionSpec { get; } + public string Name { get; } + + public void ResetData() + { + } + } + + class ActionClearedActuatorComponent : ActuatorComponent + { + public ActionClearedActuator ActionClearedActuator; + public ActionClearedActuatorComponent() + { + ActionSpec = new ActionSpec(2, new[] { 3, 3 }); + } + + public override IActuator[] CreateActuators() + { + ActionClearedActuator = new ActionClearedActuator(ActionSpec); + return new IActuator[] { ActionClearedActuator }; + } + + public override ActionSpec ActionSpec { get; } + } + + [Test] + public void TestActionsCleared() + { + var gameObj = new GameObject(); + var agent = gameObj.AddComponent(); + var behaviorParameters = agent.GetComponent(); + behaviorParameters.BrainParameters.ActionSpec = new ActionSpec(1, new[] { 4 }); + behaviorParameters.BrainParameters.VectorObservationSize = 0; + behaviorParameters.BehaviorType = BehaviorType.HeuristicOnly; + + var actuatorComponent = gameObj.AddComponent(); + agent.LazyInitialize(); + + const int k_NumSteps = 5; + for (var i = 0; i < k_NumSteps; i++) + { + agent.RequestDecision(); + Academy.Instance.EnvironmentStep(); + } + + Assert.AreEqual(agent.HeuristicCalls, k_NumSteps); + Assert.AreEqual(actuatorComponent.ActionClearedActuator.HeuristicCalls, k_NumSteps); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Policies/HeuristicPolicyTest.cs.meta b/com.unity.ml-agents/Tests/Editor/Policies/HeuristicPolicyTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..682a64b746a26d34e3b7c651941dc901462798de --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Policies/HeuristicPolicyTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5108e92f91a04ddab9d628c9bc57cadb +timeCreated: 1617813411 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/PublicAPI.meta b/com.unity.ml-agents/Tests/Editor/PublicAPI.meta new file mode 100644 index 0000000000000000000000000000000000000000..96673482aba2c9cfc87838707816a33e43248c0b --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/PublicAPI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5aa894d83ebc411581c8475cd2f9ae0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/PublicAPI/PublicApiValidation.cs b/com.unity.ml-agents/Tests/Editor/PublicAPI/PublicApiValidation.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd45bfefc508ceda26f9dcea33a1ec5829aa5282 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/PublicAPI/PublicApiValidation.cs @@ -0,0 +1,101 @@ +using Unity.MLAgents.Sensors; +using NUnit.Framework; +using Unity.MLAgents; +using UnityEngine; + +namespace Unity.MLAgentsExamples +{ + /// + /// The purpose of these tests is to make sure that we can do basic operations like creating + /// an Agent and adding components from code without requiring access to internal methods. + /// The tests aren't intended to add extra test coverage (although they might) and might + /// not check any conditions. + /// + [TestFixture] + public class PublicApiValidation + { + [Test] + public void CheckSetupCameraSensorComponent() + { + var gameObject = new GameObject(); + var width = 24; + var height = 16; + + var sensorComponent = gameObject.AddComponent(); + sensorComponent.Camera = Camera.main; + sensorComponent.SensorName = "camera1"; + sensorComponent.Width = width; + sensorComponent.Height = height; + sensorComponent.Grayscale = true; + + // Make sure the sets actually applied + Assert.AreEqual("camera1", sensorComponent.SensorName); + Assert.AreEqual(width, sensorComponent.Width); + Assert.AreEqual(height, sensorComponent.Height); + Assert.IsTrue(sensorComponent.Grayscale); + } + + [Test] + public void CheckSetupRenderTextureSensorComponent() + { + var gameObject = new GameObject(); + + var sensorComponent = gameObject.AddComponent(); + var width = 24; + var height = 16; + var texture = new RenderTexture(width, height, 0); + sensorComponent.RenderTexture = texture; + sensorComponent.SensorName = "rtx1"; + sensorComponent.Grayscale = true; + + // Make sure the sets actually applied + Assert.AreEqual("rtx1", sensorComponent.SensorName); + Assert.IsTrue(sensorComponent.Grayscale); + } + +#if MLA_UNITY_PHYSICS_MODULE + [Test] + public void CheckSetupRayPerceptionSensorComponent() + { + var gameObject = new GameObject(); + + var sensorComponent = gameObject.AddComponent(); + sensorComponent.SensorName = "ray3d"; + sensorComponent.DetectableTags = new List { "Player", "Respawn" }; + sensorComponent.RaysPerDirection = 3; + sensorComponent.MaxRayDegrees = 30; + sensorComponent.SphereCastRadius = .1f; + sensorComponent.RayLayerMask = 0; + sensorComponent.ObservationStacks = 2; + + sensorComponent.CreateSensors(); + + var sensor = sensorComponent.RaySensor; + sensor.Update(); + var outputs = sensor.RayPerceptionOutput; + Assert.AreEqual(outputs.RayOutputs.Length, 2 * sensorComponent.RaysPerDirection + 1); + } + +#endif + + /// + /// Make sure we can inherit from DecisionRequester and override some logic. + /// + class CustomDecisionRequester : DecisionRequester + { + /// + /// Example logic. If the killswitch flag is set, the Agent never requests a decision. + /// + public bool KillswitchEnabled; + + public CustomDecisionRequester() + { + } + + protected override bool ShouldRequestDecision(DecisionRequestContext context) + { + return !KillswitchEnabled && base.ShouldRequestDecision(context); + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/PublicAPI/PublicApiValidation.cs.meta b/com.unity.ml-agents/Tests/Editor/PublicAPI/PublicApiValidation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9f344cf15c327c10a487f846b80717443c89ad24 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/PublicAPI/PublicApiValidation.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 016a3ac45b0345e3ab95f14ecaabdb11 +timeCreated: 1583858370 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/PublicAPI/Unity.ML-Agents.Editor.Tests.PublicAPI.asmdef b/com.unity.ml-agents/Tests/Editor/PublicAPI/Unity.ML-Agents.Editor.Tests.PublicAPI.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..c96b91cd52ad55ddee980f5243986b5513bc61ca --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/PublicAPI/Unity.ML-Agents.Editor.Tests.PublicAPI.asmdef @@ -0,0 +1,26 @@ +{ + "name": "Unity.ML-Agents.Editor.Tests.PublicAPI", + "references": [ + "Unity.ML-Agents.Editor", + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ] +} diff --git a/com.unity.ml-agents/Tests/Editor/PublicAPI/Unity.ML-Agents.Editor.Tests.PublicAPI.asmdef.meta b/com.unity.ml-agents/Tests/Editor/PublicAPI/Unity.ML-Agents.Editor.Tests.PublicAPI.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..e1329a95fc7a3ea7f57e73f102354ae5a40df72c --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/PublicAPI/Unity.ML-Agents.Editor.Tests.PublicAPI.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 38254a2538c8f42fb9f2057d17fd0e70 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/RandomNormalTest.cs b/com.unity.ml-agents/Tests/Editor/RandomNormalTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..520e3e656f7425ad5226bdfc3991e4933d2881df --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/RandomNormalTest.cs @@ -0,0 +1,91 @@ +using System; +using NUnit.Framework; +using Unity.MLAgents.Inference.Utils; + +namespace Unity.MLAgents.Tests +{ + public class RandomNormalTest + { + const float k_FirstValue = -1.19580f; + const float k_SecondValue = -0.97345f; + const double k_Epsilon = 0.0001; + + [Test] + public void RandomNormalTestTwoDouble() + { + var rn = new RandomNormal(2018); + + Assert.AreEqual(k_FirstValue, rn.NextDouble(), k_Epsilon); + Assert.AreEqual(k_SecondValue, rn.NextDouble(), k_Epsilon); + } + + [Test] + public void RandomNormalTestWithMean() + { + var rn = new RandomNormal(2018, 5.0f); + + Assert.AreEqual(k_FirstValue + 5.0, rn.NextDouble(), k_Epsilon); + Assert.AreEqual(k_SecondValue + 5.0, rn.NextDouble(), k_Epsilon); + } + + [Test] + public void RandomNormalTestWithStddev() + { + var rn = new RandomNormal(2018, 0.0f, 4.2f); + + Assert.AreEqual(k_FirstValue * 4.2, rn.NextDouble(), k_Epsilon); + Assert.AreEqual(k_SecondValue * 4.2, rn.NextDouble(), k_Epsilon); + } + + [Test] + public void RandomNormalTestWithMeanStddev() + { + const float mean = -3.2f; + const float stddev = 2.2f; + var rn = new RandomNormal(2018, mean, stddev); + + Assert.AreEqual(k_FirstValue * stddev + mean, rn.NextDouble(), k_Epsilon); + Assert.AreEqual(k_SecondValue * stddev + mean, rn.NextDouble(), k_Epsilon); + } + + [Test] + public void RandomNormalTestDistribution() + { + const float mean = -3.2f; + const float stddev = 2.2f; + var rn = new RandomNormal(2018, mean, stddev); + + const int numSamples = 100000; + // Adapted from https://www.johndcook.com/blog/standard_deviation/ + // Computes stddev and mean without losing precision + double oldM = 0.0, newM = 0.0, oldS = 0.0, newS = 0.0; + + for (var i = 0; i < numSamples; i++) + { + var x = rn.NextDouble(); + if (i == 0) + { + oldM = newM = x; + oldS = 0.0; + } + else + { + newM = oldM + (x - oldM) / i; + newS = oldS + (x - oldM) * (x - newM); + + // set up for next iteration + oldM = newM; + oldS = newS; + } + } + + var sampleMean = newM; + var sampleVariance = newS / (numSamples - 1); + var sampleStddev = Math.Sqrt(sampleVariance); + + // Note a larger epsilon here. We could get closer to the true values with more samples. + Assert.AreEqual(mean, sampleMean, 0.01); + Assert.AreEqual(stddev, sampleStddev, 0.01); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/RandomNormalTest.cs.meta b/com.unity.ml-agents/Tests/Editor/RandomNormalTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f1d5c0833bd4dc13cff89f288c224721d2e897d3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/RandomNormalTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 518c8e6e10fd94059a064ffbe65557af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/RecursionCheckerTests.cs b/com.unity.ml-agents/Tests/Editor/RecursionCheckerTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..a06e914dbddf7bb71e057003ba94c2612638dd61 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/RecursionCheckerTests.cs @@ -0,0 +1,72 @@ +using System; +using NUnit.Framework; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class RecursionCheckerTests + { + class InfiniteRecurser + { + RecursionChecker m_checker = new RecursionChecker("InfiniteRecurser"); + public int NumCalls; + + public void Implode() + { + NumCalls++; + using (m_checker.Start()) + { + Implode(); + } + } + } + + [Test] + public void TestRecursionCheck() + { + var rc = new InfiniteRecurser(); + Assert.Throws(() => + { + rc.Implode(); + }); + + // Should increment twice before bailing out. + Assert.AreEqual(2, rc.NumCalls); + } + + class OneTimeThrower + { + RecursionChecker m_checker = new RecursionChecker("OneTimeThrower"); + public int NumCalls; + + public void DoStuff() + { + // This method throws from inside the checker the first time. + // Later calls do nothing. + NumCalls++; + using (m_checker.Start()) + { + if (NumCalls == 1) + { + throw new ArgumentException("oops"); + } + } + } + } + + [Test] + public void TestThrowResetsFlag() + { + var ott = new OneTimeThrower(); + Assert.Throws(() => + { + ott.DoStuff(); + }); + + // Make sure the flag is cleared if we throw in the "using". Should be able to step subsequently. + ott.DoStuff(); + ott.DoStuff(); + Assert.AreEqual(3, ott.NumCalls); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/RecursionCheckerTests.cs.meta b/com.unity.ml-agents/Tests/Editor/RecursionCheckerTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7240ff8a0b2a881e4bc93aba1a9e72ff1c4b05fe --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/RecursionCheckerTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5a7183e11dd5434684a4225c80169173 +timeCreated: 1602781778 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/SamplerTests.cs b/com.unity.ml-agents/Tests/Editor/SamplerTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..3f8dfa6df23506a858a9123fd6c856d7ee2c11c9 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SamplerTests.cs @@ -0,0 +1,107 @@ +using NUnit.Framework; +using System.IO; +using Unity.MLAgents.SideChannels; + +namespace Unity.MLAgents.Tests +{ + public class SamplerTests + { + const int k_Seed = 1337; + const double k_Epsilon = 0.0001; + EnvironmentParametersChannel m_Channel; + + public SamplerTests() + { + m_Channel = SideChannelManager.GetSideChannel(); + // if running test on its own + if (m_Channel == null) + { + m_Channel = new EnvironmentParametersChannel(); + SideChannelManager.RegisterSideChannel(m_Channel); + } + } + + [Test] + public void UniformSamplerTest() + { + float min_value = 1.0f; + float max_value = 2.0f; + string parameter = "parameter1"; + using (var outgoingMsg = new OutgoingMessage()) + { + outgoingMsg.WriteString(parameter); + // 1 indicates this meessage is a Sampler + outgoingMsg.WriteInt32(1); + outgoingMsg.WriteInt32(k_Seed); + outgoingMsg.WriteInt32((int)SamplerType.Uniform); + outgoingMsg.WriteFloat32(min_value); + outgoingMsg.WriteFloat32(max_value); + byte[] message = GetByteMessage(m_Channel, outgoingMsg); + SideChannelManager.ProcessSideChannelData(message); + } + Assert.AreEqual(1.208888f, m_Channel.GetWithDefault(parameter, 1.0f), k_Epsilon); + Assert.AreEqual(1.118017f, m_Channel.GetWithDefault(parameter, 1.0f), k_Epsilon); + } + + [Test] + public void GaussianSamplerTest() + { + float mean = 3.0f; + float stddev = 0.2f; + string parameter = "parameter2"; + using (var outgoingMsg = new OutgoingMessage()) + { + outgoingMsg.WriteString(parameter); + // 1 indicates this meessage is a Sampler + outgoingMsg.WriteInt32(1); + outgoingMsg.WriteInt32(k_Seed); + outgoingMsg.WriteInt32((int)SamplerType.Gaussian); + outgoingMsg.WriteFloat32(mean); + outgoingMsg.WriteFloat32(stddev); + byte[] message = GetByteMessage(m_Channel, outgoingMsg); + SideChannelManager.ProcessSideChannelData(message); + } + Assert.AreEqual(2.936162f, m_Channel.GetWithDefault(parameter, 1.0f), k_Epsilon); + Assert.AreEqual(2.951348f, m_Channel.GetWithDefault(parameter, 1.0f), k_Epsilon); + } + + [Test] + public void MultiRangeUniformSamplerTest() + { + float[] intervals = new float[4]; + intervals[0] = 1.2f; + intervals[1] = 2f; + intervals[2] = 3.2f; + intervals[3] = 4.1f; + string parameter = "parameter3"; + using (var outgoingMsg = new OutgoingMessage()) + { + outgoingMsg.WriteString(parameter); + // 1 indicates this meessage is a Sampler + outgoingMsg.WriteInt32(1); + outgoingMsg.WriteInt32(k_Seed); + outgoingMsg.WriteInt32((int)SamplerType.MultiRangeUniform); + outgoingMsg.WriteFloatList(intervals); + byte[] message = GetByteMessage(m_Channel, outgoingMsg); + SideChannelManager.ProcessSideChannelData(message); + } + Assert.AreEqual(3.387999f, m_Channel.GetWithDefault(parameter, 1.0f), k_Epsilon); + Assert.AreEqual(1.294413f, m_Channel.GetWithDefault(parameter, 1.0f), k_Epsilon); + } + + internal static byte[] GetByteMessage(SideChannel sideChannel, OutgoingMessage msg) + { + byte[] message = msg.ToByteArray(); + using (var memStream = new MemoryStream()) + { + using (var binaryWriter = new BinaryWriter(memStream)) + { + binaryWriter.Write(sideChannel.ChannelId.ToByteArray()); + binaryWriter.Write(message.Length); + binaryWriter.Write(message); + } + return memStream.ToArray(); + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/SamplerTests.cs.meta b/com.unity.ml-agents/Tests/Editor/SamplerTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef0d54e72a0ba586d34c38dc2fee6b52297bbc5f --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SamplerTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e6609c51018d4132beda8ddedd46d91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Serialization.meta b/com.unity.ml-agents/Tests/Editor/Serialization.meta new file mode 100644 index 0000000000000000000000000000000000000000..1386f3eca687ba4ed1a18f9a53dc8c08a53d0315 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Serialization.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e76819646e3e4424f9c2802edbd2e41b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/Serialization/TestLoadOldPrefab.cs b/com.unity.ml-agents/Tests/Editor/Serialization/TestLoadOldPrefab.cs new file mode 100644 index 0000000000000000000000000000000000000000..945ee199c1032da2bd7cb190aa7624cd554a7b5a --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Serialization/TestLoadOldPrefab.cs @@ -0,0 +1,25 @@ +using NUnit.Framework; +using UnityEngine; +using UnityEditor; +using Unity.MLAgents.Policies; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class TestSerialization + { + const string k_oldPrefabPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab"; + const int k_numVecObs = 212; + const int k_numContinuousActions = 39; + + [Test] + public void TestDeserialization() + { + var prefab = AssetDatabase.LoadAssetAtPath(k_oldPrefabPath); + var agent = GameObject.Instantiate(prefab); + var bp = agent.GetComponent(); + Assert.AreEqual(bp.BrainParameters.ActionSpec.NumContinuousActions, k_numContinuousActions); + Assert.AreEqual(bp.BrainParameters.VectorObservationSize, k_numVecObs); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/Serialization/TestLoadOldPrefab.cs.meta b/com.unity.ml-agents/Tests/Editor/Serialization/TestLoadOldPrefab.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..11479dd124d0bfffa5e627b083595a6f4cb00986 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Serialization/TestLoadOldPrefab.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3070d063598144268171a468db17ddd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/SideChannels.meta b/com.unity.ml-agents/Tests/Editor/SideChannels.meta new file mode 100644 index 0000000000000000000000000000000000000000..67d4d62cd3b3432785ceaf79cfe915c4655418f2 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SideChannels.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1228f198ceee45a38c7d9ff50425b65d +timeCreated: 1610760867 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/SideChannels/EngineConfigurationChannelTests.cs b/com.unity.ml-agents/Tests/Editor/SideChannels/EngineConfigurationChannelTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..50be2de09a019756896ee9c85124b3776a759336 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SideChannels/EngineConfigurationChannelTests.cs @@ -0,0 +1,42 @@ +using NUnit.Framework; +using Unity.MLAgents.SideChannels; +using UnityEngine; + +namespace Unity.MLAgents.Tests +{ + public class EngineConfigurationChannelTests + { + float m_OldTimeScale = 1.0f; + + [SetUp] + public void Setup() + { + m_OldTimeScale = Time.timeScale; + } + + [TearDown] + public void TearDown() + { + Time.timeScale = m_OldTimeScale; + } + + [Test] + public void TestTimeScaleClamping() + { + OutgoingMessage pythonMsg = new OutgoingMessage(); + pythonMsg.WriteInt32((int)EngineConfigurationChannel.ConfigurationType.TimeScale); + pythonMsg.WriteFloat32(1000f); + + var sideChannel = new EngineConfigurationChannel(); + sideChannel.ProcessMessage(pythonMsg.ToByteArray()); + +#if UNITY_EDITOR + // Should be clamped + Assert.AreEqual(100.0f, Time.timeScale); +#else + // Not sure we can run this test from a player, but just in case, shouldn't clamp. + Assert.AreEqual(1000.0f, Time.timeScale); +#endif + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/SideChannels/EngineConfigurationChannelTests.cs.meta b/com.unity.ml-agents/Tests/Editor/SideChannels/EngineConfigurationChannelTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..68ff93bb9e44eaa3d59d2bd0ee50f2bce9b0b323 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SideChannels/EngineConfigurationChannelTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 71aa620295f74ca5875e8e4782f08768 +timeCreated: 1610760906 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/SideChannels/SideChannelTests.cs b/com.unity.ml-agents/Tests/Editor/SideChannels/SideChannelTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ca25f2eda25005df90c5f4e63a3be7480c9cad3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SideChannels/SideChannelTests.cs @@ -0,0 +1,193 @@ +using System; +using NUnit.Framework; +using System.Collections.Generic; +using System.Text; +using Unity.MLAgents.SideChannels; + +namespace Unity.MLAgents.Tests +{ + public class SideChannelTests + { + // This test side channel only deals in integers + public class TestSideChannel : SideChannel + { + public List messagesReceived = new List(); + + public TestSideChannel() + { + ChannelId = new Guid("6afa2c06-4f82-11ea-b238-784f4387d1f7"); + } + + protected override void OnMessageReceived(IncomingMessage msg) + { + messagesReceived.Add(msg.ReadInt32()); + } + + public void SendInt(int value) + { + using (var msg = new OutgoingMessage()) + { + msg.WriteInt32(value); + QueueMessageToSend(msg); + } + } + } + + [Test] + public void TestIntegerSideChannel() + { + var intSender = new TestSideChannel(); + var intReceiver = new TestSideChannel(); + var dictSender = new Dictionary { { intSender.ChannelId, intSender } }; + var dictReceiver = new Dictionary { { intReceiver.ChannelId, intReceiver } }; + + intSender.SendInt(4); + intSender.SendInt(5); + intSender.SendInt(6); + + byte[] fakeData = SideChannelManager.GetSideChannelMessage(dictSender); + SideChannelManager.ProcessSideChannelData(dictReceiver, fakeData); + + Assert.AreEqual(intReceiver.messagesReceived[0], 4); + Assert.AreEqual(intReceiver.messagesReceived[1], 5); + Assert.AreEqual(intReceiver.messagesReceived[2], 6); + } + + [Test] + public void TestRawBytesSideChannel() + { + var str1 = "Test string"; + var str2 = "Test string, second"; + + var strSender = new RawBytesChannel(new Guid("9a5b8954-4f82-11ea-b238-784f4387d1f7")); + var strReceiver = new RawBytesChannel(new Guid("9a5b8954-4f82-11ea-b238-784f4387d1f7")); + var dictSender = new Dictionary { { strSender.ChannelId, strSender } }; + var dictReceiver = new Dictionary { { strReceiver.ChannelId, strReceiver } }; + + strSender.SendRawBytes(Encoding.ASCII.GetBytes(str1)); + strSender.SendRawBytes(Encoding.ASCII.GetBytes(str2)); + + byte[] fakeData = SideChannelManager.GetSideChannelMessage(dictSender); + SideChannelManager.ProcessSideChannelData(dictReceiver, fakeData); + + var messages = strReceiver.GetAndClearReceivedMessages(); + + Assert.AreEqual(messages.Count, 2); + Assert.AreEqual(Encoding.ASCII.GetString(messages[0]), str1); + Assert.AreEqual(Encoding.ASCII.GetString(messages[1]), str2); + } + + [Test] + public void TestFloatPropertiesSideChannel() + { + var k1 = "gravity"; + var k2 = "length"; + int wasCalled = 0; + + var propA = new FloatPropertiesChannel(); + var propB = new FloatPropertiesChannel(); + var dictReceiver = new Dictionary { { propA.ChannelId, propA } }; + var dictSender = new Dictionary { { propB.ChannelId, propB } }; + + propA.RegisterCallback(k1, f => { wasCalled++; }); + var tmp = propB.GetWithDefault(k2, 3.0f); + Assert.AreEqual(tmp, 3.0f); + propB.Set(k2, 1.0f); + tmp = propB.GetWithDefault(k2, 3.0f); + Assert.AreEqual(tmp, 1.0f); + + byte[] fakeData = SideChannelManager.GetSideChannelMessage(dictSender); + SideChannelManager.ProcessSideChannelData(dictReceiver, fakeData); + + tmp = propA.GetWithDefault(k2, 3.0f); + Assert.AreEqual(tmp, 1.0f); + + Assert.AreEqual(wasCalled, 0); + propB.Set(k1, 1.0f); + Assert.AreEqual(wasCalled, 0); + fakeData = SideChannelManager.GetSideChannelMessage(dictSender); + SideChannelManager.ProcessSideChannelData(dictReceiver, fakeData); + Assert.AreEqual(wasCalled, 1); + + var keysA = propA.Keys(); + Assert.AreEqual(2, keysA.Count); + Assert.IsTrue(keysA.Contains(k1)); + Assert.IsTrue(keysA.Contains(k2)); + + var keysB = propA.Keys(); + Assert.AreEqual(2, keysB.Count); + Assert.IsTrue(keysB.Contains(k1)); + Assert.IsTrue(keysB.Contains(k2)); + } + + [Test] + public void TestOutgoingMessageRawBytes() + { + // Make sure that SetRawBytes resets the buffer correctly. + // Write 8 bytes (an int and float) then call SetRawBytes with 4 bytes + var msg = new OutgoingMessage(); + msg.WriteInt32(42); + msg.WriteFloat32(1.0f); + + var data = new byte[] { 1, 2, 3, 4 }; + msg.SetRawBytes(data); + + var result = msg.ToByteArray(); + Assert.AreEqual(data, result); + } + + [Test] + public void TestMessageReadWrites() + { + var boolVal = true; + var intVal = 1337; + var floatVal = 4.2f; + var floatListVal = new float[] { 1001, 1002 }; + var stringVal = "mlagents!"; + + IncomingMessage incomingMsg; + using (var outgoingMsg = new OutgoingMessage()) + { + outgoingMsg.WriteBoolean(boolVal); + outgoingMsg.WriteInt32(intVal); + outgoingMsg.WriteFloat32(floatVal); + outgoingMsg.WriteString(stringVal); + outgoingMsg.WriteFloatList(floatListVal); + + incomingMsg = new IncomingMessage(outgoingMsg.ToByteArray()); + } + + Assert.AreEqual(boolVal, incomingMsg.ReadBoolean()); + Assert.AreEqual(intVal, incomingMsg.ReadInt32()); + Assert.AreEqual(floatVal, incomingMsg.ReadFloat32()); + Assert.AreEqual(stringVal, incomingMsg.ReadString()); + Assert.AreEqual(floatListVal, incomingMsg.ReadFloatList()); + } + + [Test] + public void TestMessageReadDefaults() + { + // Make sure reading past the end of a message will apply defaults. + IncomingMessage incomingMsg; + using (var outgoingMsg = new OutgoingMessage()) + { + incomingMsg = new IncomingMessage(outgoingMsg.ToByteArray()); + } + + Assert.AreEqual(false, incomingMsg.ReadBoolean()); + Assert.AreEqual(true, incomingMsg.ReadBoolean(defaultValue: true)); + + Assert.AreEqual(0, incomingMsg.ReadInt32()); + Assert.AreEqual(42, incomingMsg.ReadInt32(defaultValue: 42)); + + Assert.AreEqual(0.0f, incomingMsg.ReadFloat32()); + Assert.AreEqual(1337.0f, incomingMsg.ReadFloat32(defaultValue: 1337.0f)); + + Assert.AreEqual(default(string), incomingMsg.ReadString()); + Assert.AreEqual("foo", incomingMsg.ReadString(defaultValue: "foo")); + + Assert.AreEqual(default(float[]), incomingMsg.ReadFloatList()); + Assert.AreEqual(new float[] { 1001, 1002 }, incomingMsg.ReadFloatList(new float[] { 1001, 1002 })); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/SideChannels/SideChannelTests.cs.meta b/com.unity.ml-agents/Tests/Editor/SideChannels/SideChannelTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cef0d1104ecb1947c8f2ad95c35f6c942f552477 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/SideChannels/SideChannelTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 589f475debcdb479295a24799777b5e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/TestModels.meta b/com.unity.ml-agents/Tests/Editor/TestModels.meta new file mode 100644 index 0000000000000000000000000000000000000000..1928478d7069c1115f2e9c3a0f2e49559507b5bc --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95997790219c547e584c3cb50122a95f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn new file mode 100644 index 0000000000000000000000000000000000000000..c1cd17e682dd97c6b4927262a34a8be610aaf477 Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn differ diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn.meta b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..413ad1d6f4bf1c3ff41dd0a009ee26281cbd897e --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated_v1_0.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf4543cc3c6944794bbba065bdf90079 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..14a99606055689adb8e7b089d0b3971f82c393c5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cdaadc89e9c5f7f513fa1013155a102e079cbc5c7e5b63c4cc5218f3921dd69 +size 332019 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..73bd62d783d34d5c418b1957397ba3603b0c9c63 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_v1_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: f90bffb60a3784a2385299a321f354a6 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..81f31c47d5c37135f7e6d559810ba30924316c23 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bc14cad0fb2c5fad2a36457b8893cd732a32d853a1913997cf025b2a6cd4cdf +size 73999 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..cc92cc94b8d6741b68b3777c75d97df1716a3445 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/deterContinuous2vis8vec2action_v2_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: e905d8f9eadcf45aa8c485594fecba6d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..ae092f3de3470e60caa0e609b0e8af0103e757d6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1f44c0b4107f9a2b44ac91c4345b1a5c1e77389684bd482806eba16353c996c +size 3715 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..a141a552359b3ef8def9300b128d5aef9ecf7441 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/deterDiscrete1obs3action_v2_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: d132cc9c934a54fdc99758427373e038 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..658d93e245656d276278fabedd9bca80b62fc0f5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cabf446729db47479e64899cca04b8b123c647e995955424c4802c6d9cd6e9b +size 399488 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..92c9212a72a7e5006b1997eae3c7a10f0004a131 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_obsolete_recurr_v1_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9ecb2a56b0c6b42f7ad2b40ab97c5515 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn new file mode 100644 index 0000000000000000000000000000000000000000..a427b24d56c27e12c00fcc148336af06d0807697 Binary files /dev/null and b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn differ diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn.meta b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn.meta new file mode 100644 index 0000000000000000000000000000000000000000..6f732557b43c9475399edc214a636b28371b283d --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated_v1_0.nn.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d6040ad621454dd5b713beb5483e347 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..f86005fad37b48f72b9699b56a7926dfc70db80c --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9429b5a47188eade9518d1233644cd5a86b1c22eb4299fd4be7c10f404ba852 +size 201108 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..2bceceabacadb9103c481c75e370a3aed6bd69e9 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_v1_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 68991653e04394f95b15a222253c0729 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..ed50df3c33015594cb6fc3fcfcc8db9936ffb961 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12b76ec6af5716525739411d6d2ea27f691f86e35ea421484b4eaf82e21b524b +size 506738 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..5cfd60563972fc6eb1eb624e9bd655aa9390d880 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/discrete_rank2_vector_v2_0.onnx.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: b6c7faadd10084c3995ad9fff7aa8c54 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..0851d73235154dea8680b801f92f37ada021600f --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44127cdfd3ecc844ab85bc768d25a83d2bed7ad9836eea48075a48004a24ff87 +size 99118 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..792ae290f72506af2678155bda7a252ed9c45206 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction_v1_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9f774b4c578c3435da77d2831db84105 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..8c00191d4ebf3c34fc0c75751b04d83377ff8e32 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:617a728b4588cbb2af040dfdeed4250c66b1cf758813604c9ace2d3f39d44ce5 +size 276089 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx.meta b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx.meta new file mode 100644 index 0000000000000000000000000000000000000000..5abc7e6432efe20e2667e403efbf0340b297af41 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis8vec_2c_2_3d_v2_0.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 2f6b2ae61d96a4555b60892a0ad924bb +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab b/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab new file mode 100644 index 0000000000000000000000000000000000000000..f8786e912b6a70c0eb9825e79d2ab522b9fcbfc8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5381908961062339374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5379309137663827240} + - component: {fileID: 5414230854946179998} + - component: {fileID: 8153975132613398210} + m_Layer: 0 + m_Name: old_serialized_agent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5379309137663827240 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5381908961062339374} + m_LocalRotation: {x: -0, y: -0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!114 &5414230854946179998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5381908961062339374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + vectorObservationSize: 212 + numStackedVectorObservations: 1 + vectorActionSize: 27000000 + vectorActionDescriptions: [] + vectorActionSpaceType: 1 + m_Model: {fileID: 11400000, guid: 4e86a19e012da43bfa5ab97ae8089b98, type: 3} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: Walker + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &8153975132613398210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5381908961062339374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88b6042bc9a5d4aa58d931eae49442e5, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 0 diff --git a/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab.meta b/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..2d444fbbd264d2f0ac830f364a92005a96ce8f2f --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TestModels/old_serialized_agent.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 07e2de94fa37b49c3bdf7a21857c0f73 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/TimerTest.cs b/com.unity.ml-agents/Tests/Editor/TimerTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..cc4ba18e8d30e9fa82b12f9fa5cb7b2e8977a8a3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TimerTest.cs @@ -0,0 +1,84 @@ +using NUnit.Framework; + +namespace Unity.MLAgents.Tests +{ + public class TimerTests + { + [Test] + public void TestNested() + { + TimerStack myTimer = TimerStack.Instance; + myTimer.Reset(); + using (myTimer.Scoped("foo")) + { + for (int i = 0; i < 5; i++) + { + using (myTimer.Scoped("bar")) + { + myTimer.SetGauge("my_gauge", i); + myTimer.AddMetadata("i", $"{i}"); + } + } + } + + var rootChildren = myTimer.RootNode.Children; + Assert.That(rootChildren, Contains.Key("foo")); + Assert.AreEqual(rootChildren["foo"].NumCalls, 1); + var gauge = myTimer.RootNode.Gauges["my_gauge"]; + Assert.NotNull(gauge); + Assert.AreEqual(5, gauge.count); + Assert.AreEqual(0, gauge.minValue); + Assert.AreEqual(4, gauge.maxValue); + Assert.AreEqual(4, gauge.value); + Assert.AreEqual("4", myTimer.RootNode.Metadata["i"]); + + var fooChildren = rootChildren["foo"].Children; + Assert.That(fooChildren, Contains.Key("bar")); + Assert.AreEqual(fooChildren["bar"].NumCalls, 5); + + myTimer.Reset(); + Assert.AreEqual(myTimer.RootNode.Children, null); + } + + [Test] + public void TestGauges() + { + TimerStack myTimer = TimerStack.Instance; + myTimer.Reset(); + + // Simple test - adding 1's should keep that for the weighted and running averages. + myTimer.SetGauge("one", 1.0f); + var oneNode = myTimer.RootNode.Gauges["one"]; + Assert.AreEqual(oneNode.weightedAverage, 1.0f); + Assert.AreEqual(oneNode.runningAverage, 1.0f); + + for (int i = 0; i < 10; i++) + { + myTimer.SetGauge("one", 1.0f); + } + + Assert.AreEqual(oneNode.weightedAverage, 1.0f); + Assert.AreEqual(oneNode.runningAverage, 1.0f); + + // Try some more interesting values + myTimer.SetGauge("increasing", 1.0f); + myTimer.SetGauge("increasing", 2.0f); + myTimer.SetGauge("increasing", 3.0f); + + myTimer.SetGauge("decreasing", 3.0f); + myTimer.SetGauge("decreasing", 2.0f); + myTimer.SetGauge("decreasing", 1.0f); + var increasingNode = myTimer.RootNode.Gauges["increasing"]; + var decreasingNode = myTimer.RootNode.Gauges["decreasing"]; + + // Expect the running average to be (roughly) the same, + // but weighted averages will be biased differently. + Assert.AreEqual(increasingNode.runningAverage, 2.0f); + Assert.AreEqual(decreasingNode.runningAverage, 2.0f); + + // The older values are actually weighted more heavily, so we expect the + // increasing series to have a lower moving average. + Assert.Less(increasingNode.weightedAverage, decreasingNode.weightedAverage); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/TimerTest.cs.meta b/com.unity.ml-agents/Tests/Editor/TimerTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..86429e2106fc11ff758ded4f982a3f7154eebcf0 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TimerTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 506de2f6a1c74967a6f16ebf494c01d5 +timeCreated: 1569370981 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/TrainingAnalyticsSideChannelTests.cs b/com.unity.ml-agents/Tests/Editor/TrainingAnalyticsSideChannelTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..d71abf6555e4f224d75f75c10c8e77f08e942ea5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TrainingAnalyticsSideChannelTests.cs @@ -0,0 +1,65 @@ +using System; +using System.Linq; +using System.Text; +using NUnit.Framework; +using Google.Protobuf; +using Unity.MLAgents.Analytics; +using Unity.MLAgents.SideChannels; +using Unity.MLAgents.CommunicatorObjects; + + +namespace Unity.MLAgents.Tests +{ + /// + /// These tests send messages through the event handling code. + /// There's no output to test, so just make sure there are no exceptions + /// (and get the code coverage above the minimum). + /// + public class TrainingAnalyticsSideChannelTests + { + [Test] + public void TestTrainingEnvironmentReceived() + { + var anyMsg = Google.Protobuf.WellKnownTypes.Any.Pack(new TrainingEnvironmentInitialized()); + var anyMsgBytes = anyMsg.ToByteArray(); + var sideChannel = new TrainingAnalyticsSideChannel(); + using (new AnalyticsUtils.DisableAnalyticsSending()) + { + sideChannel.ProcessMessage(anyMsgBytes); + } + } + + [Test] + public void TestTrainingBehaviorReceived() + { + var anyMsg = Google.Protobuf.WellKnownTypes.Any.Pack(new TrainingBehaviorInitialized()); + var anyMsgBytes = anyMsg.ToByteArray(); + var sideChannel = new TrainingAnalyticsSideChannel(); + using (new AnalyticsUtils.DisableAnalyticsSending()) + { + sideChannel.ProcessMessage(anyMsgBytes); + } + } + + [Test] + public void TestInvalidProtobufMessage() + { + // Test an invalid (non-protobuf) message. This should silently ignore the data. + var badBytes = Encoding.ASCII.GetBytes("Lorem ipsum"); + var sideChannel = new TrainingAnalyticsSideChannel(); + using (new AnalyticsUtils.DisableAnalyticsSending()) + { + sideChannel.ProcessMessage(badBytes); + } + + // Test an almost-valid message. This should silently ignore the data. + var anyMsg = Google.Protobuf.WellKnownTypes.Any.Pack(new TrainingBehaviorInitialized()); + var anyMsgBytes = anyMsg.ToByteArray(); + var truncatedMessage = new ArraySegment(anyMsgBytes, 0, anyMsgBytes.Length - 1).ToArray(); + using (new AnalyticsUtils.DisableAnalyticsSending()) + { + sideChannel.ProcessMessage(truncatedMessage); + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/TrainingAnalyticsSideChannelTests.cs.meta b/com.unity.ml-agents/Tests/Editor/TrainingAnalyticsSideChannelTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebb5915235a510bfc21e704b89bba7cceec91795 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/TrainingAnalyticsSideChannelTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c2a71036ddec4ba4bf83c5e8ba1b8daa +timeCreated: 1610574895 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Editor/Unity.ML-Agents.Editor.Tests.asmdef b/com.unity.ml-agents/Tests/Editor/Unity.ML-Agents.Editor.Tests.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..128105b400190035f77d145dac93464196fd9adc --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Unity.ML-Agents.Editor.Tests.asmdef @@ -0,0 +1,47 @@ +{ + "name": "Unity.ML-Agents.Editor.Tests", + "references": [ + "Unity.ML-Agents.Editor", + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.Mathematics", + "Unity.ML-Agents.CommunicatorObjects", + "Unity.ML-Agents.Runtime.Utils.Tests", + "Unity.ML-Agents.Runtime.Sensor.Tests" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll", + "Google.Protobuf.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [ + { + "name": "com.unity.modules.unityanalytics", + "expression": "1.0.0", + "define": "MLA_UNITY_ANALYTICS_MODULE" + }, + { + "name": "com.unity.modules.physics", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS_MODULE" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS2D_MODULE" + } + ] +} diff --git a/com.unity.ml-agents/Tests/Editor/Unity.ML-Agents.Editor.Tests.asmdef.meta b/com.unity.ml-agents/Tests/Editor/Unity.ML-Agents.Editor.Tests.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..db461686388ffa5d0bc2d914ca41faaf8c734396 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/Unity.ML-Agents.Editor.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57f6004a925b546cd94e94ed518e275d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Editor/UtilitiesTests.cs b/com.unity.ml-agents/Tests/Editor/UtilitiesTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..de90a6797a1fa00724d40e3c0cb5811c9833e28c --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/UtilitiesTests.cs @@ -0,0 +1,23 @@ +using NUnit.Framework; + +namespace Unity.MLAgents.Tests +{ + public class UtilitiesTests + { + [Test] + public void TestCumSum() + { + var output = Utilities.CumSum(new[] { 1, 2, 3, 10 }); + CollectionAssert.AreEqual(output, new[] { 0, 1, 3, 6, 16 }); + + output = Utilities.CumSum(new int[0]); + CollectionAssert.AreEqual(output, new[] { 0 }); + + output = Utilities.CumSum(new[] { 100 }); + CollectionAssert.AreEqual(output, new[] { 0, 100 }); + + output = Utilities.CumSum(new[] { -1, 10 }); + CollectionAssert.AreEqual(output, new[] { 0, -1, 9 }); + } + } +} diff --git a/com.unity.ml-agents/Tests/Editor/UtilitiesTests.cs.meta b/com.unity.ml-agents/Tests/Editor/UtilitiesTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..66d7be1a61348af0a71a0c0098f0fb1108465dc3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Editor/UtilitiesTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 45ab7fc6851444d8ba622b4f63b8290b +timeCreated: 1538775063 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime.meta b/com.unity.ml-agents/Tests/Runtime.meta new file mode 100644 index 0000000000000000000000000000000000000000..1260b3a158c2bbd0867aaaee050a04af3729139a --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fec0f6b603d3046f086e09ea2a44ed1f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/RuntimeAPITest.cs b/com.unity.ml-agents/Tests/Runtime/RuntimeAPITest.cs new file mode 100644 index 0000000000000000000000000000000000000000..743212a69beaecf8fdc5eb60c1d421e8d5af73f0 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/RuntimeAPITest.cs @@ -0,0 +1,135 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.MLAgents; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; +using NUnit.Framework; +using Unity.MLAgents.Actuators; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Tests +{ + public class PublicApiAgent : Agent + { + public int numHeuristicCalls; + + [Observable] + public float ObservableFloat; + + public override void Heuristic(in ActionBuffers actionsOut) + { + numHeuristicCalls++; + base.Heuristic(actionsOut); + } + } + + // Simple SensorComponent that sets up a StackingSensor + public class StackingComponent : SensorComponent + { + public SensorComponent wrappedComponent; + public int numStacks; + + public override ISensor[] CreateSensors() + { + var wrappedSensors = wrappedComponent.CreateSensors(); + var sensorsOut = new ISensor[wrappedSensors.Length]; + for (var i = 0; i < wrappedSensors.Length; i++) + { + sensorsOut[i] = new StackingSensor(wrappedSensors[i], numStacks); + } + + return sensorsOut; + } + } + + public class RuntimeApiTest + { + [SetUp] + public static void Setup() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + Academy.Instance.AutomaticSteppingEnabled = false; + } + + [UnityTest] + public IEnumerator RuntimeApiTestWithEnumeratorPasses() + { + Academy.Instance.InferenceSeed = 1337; + var gameObject = new GameObject(); + + var behaviorParams = gameObject.AddComponent(); + behaviorParams.BrainParameters.VectorObservationSize = 3; + behaviorParams.BrainParameters.NumStackedVectorObservations = 2; + behaviorParams.BrainParameters.VectorActionDescriptions = new[] { "Continuous1", "TestActionA", "TestActionB" }; + behaviorParams.BrainParameters.ActionSpec = new ActionSpec(1, new[] { 2, 2 }); + behaviorParams.BehaviorName = "TestBehavior"; + behaviorParams.TeamId = 42; + behaviorParams.UseChildSensors = true; + behaviorParams.DeterministicInference = false; + behaviorParams.ObservableAttributeHandling = ObservableAttributeOptions.ExamineAll; + + + // Can't actually create an Agent with InferenceOnly and no model, so change back + behaviorParams.BehaviorType = BehaviorType.Default; +#if MLA_UNITY_PHYSICS_MODULE + var sensorComponent = gameObject.AddComponent(); + sensorComponent.SensorName = "ray3d"; + sensorComponent.DetectableTags = new List { "Player", "Respawn" }; + sensorComponent.RaysPerDirection = 3; + + // Make a StackingSensor that wraps the RayPerceptionSensorComponent3D + // This isn't necessarily practical, just to ensure that it can be done + var wrappingSensorComponent = gameObject.AddComponent(); + wrappingSensorComponent.wrappedComponent = sensorComponent; + wrappingSensorComponent.numStacks = 3; + + // ISensor isn't set up yet. + Assert.IsNull(sensorComponent.RaySensor); +#endif + + + // Make sure we can set the behavior type correctly after the agent is initialized + // (this creates a new policy). + behaviorParams.BehaviorType = BehaviorType.HeuristicOnly; + + // Agent needs to be added after everything else is setup. + var agent = gameObject.AddComponent(); + + // DecisionRequester has to be added after Agent. + var decisionRequester = gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 2; + decisionRequester.TakeActionsBetweenDecisions = true; + +#if MLA_UNITY_PHYSICS_MODULE + // Initialization should set up the sensors + Assert.IsNotNull(sensorComponent.RaySensor); +#endif + // Let's change the inference device + var otherDevice = behaviorParams.InferenceDevice == InferenceDevice.CPU ? InferenceDevice.GPU : InferenceDevice.CPU; + agent.SetModel(behaviorParams.BehaviorName, behaviorParams.Model, otherDevice); + + agent.AddReward(1.0f); + + // skip a frame. + yield return null; + + Academy.Instance.EnvironmentStep(); + + var actions = agent.GetStoredActionBuffers().DiscreteActions; + // default Heuristic implementation should return zero actions. + Assert.AreEqual(new ActionSegment(new[] { 0, 0 }), actions); + Assert.AreEqual(1, agent.numHeuristicCalls); + + Academy.Instance.EnvironmentStep(); + Assert.AreEqual(1, agent.numHeuristicCalls); + + Academy.Instance.EnvironmentStep(); + Assert.AreEqual(2, agent.numHeuristicCalls); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/RuntimeAPITest.cs.meta b/com.unity.ml-agents/Tests/Runtime/RuntimeAPITest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5f7821402b7663fbdd58085c3238a36624859401 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/RuntimeAPITest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17878576e4ed14b09875e37394e5ad90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor.meta b/com.unity.ml-agents/Tests/Runtime/Sensor.meta new file mode 100644 index 0000000000000000000000000000000000000000..67c65573c644929ef2530b4b18b2006663637509 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 782dd744bcb0744b8a880aa70c8c7421 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..902a48836d6010db6ad35f081395bd7b55903320 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs @@ -0,0 +1,305 @@ +#if MLA_UNITY_PHYSICS_MODULE +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + internal class TestBoxOverlapChecker : BoxOverlapChecker + { + public TestBoxOverlapChecker( + Vector3 cellScale, + Vector3Int gridSize, + bool rotateWithAgent, + LayerMask colliderMask, + GameObject centerObject, + GameObject agentGameObject, + string[] detectableTags, + int initialColliderBufferSize, + int maxColliderBufferSize + ) : base( + cellScale, + gridSize, + rotateWithAgent, + colliderMask, + centerObject, + agentGameObject, + detectableTags, + initialColliderBufferSize, + maxColliderBufferSize) + {} + + public Vector3[] CellLocalPositions + { + get + { + return (Vector3[])typeof(BoxOverlapChecker).GetField("m_CellLocalPositions", + BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + } + + public Collider[] ColliderBuffer + { + get + { + return (Collider[])typeof(BoxOverlapChecker).GetField("m_ColliderBuffer", + BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + } + + public static TestBoxOverlapChecker CreateChecker( + float cellScaleX = 1f, + float cellScaleZ = 1f, + int gridSizeX = 10, + int gridSizeZ = 10, + bool rotateWithAgent = true, + GameObject centerObject = null, + GameObject agentGameObject = null, + string[] detectableTags = null, + int initialColliderBufferSize = 4, + int maxColliderBufferSize = 500) + { + return new TestBoxOverlapChecker( + new Vector3(cellScaleX, 0.01f, cellScaleZ), + new Vector3Int(gridSizeX, 1, gridSizeZ), + rotateWithAgent, + LayerMask.GetMask("Default"), + centerObject, + agentGameObject, + detectableTags, + initialColliderBufferSize, + maxColliderBufferSize); + } + } + + public class BoxOverlapCheckerTests + { + [Test] + public void TestCellLocalPosition() + { + var testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + var boxOverlapSquare = TestBoxOverlapChecker.CreateChecker(gridSizeX: 10, gridSizeZ: 10, rotateWithAgent: false, agentGameObject: testGo); + + var localPos = boxOverlapSquare.CellLocalPositions; + Assert.AreEqual(new Vector3(-4.5f, 0, -4.5f), localPos[0]); + Assert.AreEqual(new Vector3(-4.5f, 0, 4.5f), localPos[9]); + Assert.AreEqual(new Vector3(4.5f, 0, -4.5f), localPos[90]); + Assert.AreEqual(new Vector3(4.5f, 0, 4.5f), localPos[99]); + Object.DestroyImmediate(testGo); + + var testGo2 = new GameObject("test"); + testGo2.transform.position = new Vector3(3.5f, 8f, 17f); // random, should have no effect on local positions + var boxOverlapRect = TestBoxOverlapChecker.CreateChecker(gridSizeX: 5, gridSizeZ: 15, rotateWithAgent: true, agentGameObject: testGo); + + localPos = boxOverlapRect.CellLocalPositions; + Assert.AreEqual(new Vector3(-2f, 0, -7f), localPos[0]); + Assert.AreEqual(new Vector3(-2f, 0, 7f), localPos[14]); + Assert.AreEqual(new Vector3(2f, 0, -7f), localPos[60]); + Assert.AreEqual(new Vector3(2f, 0, 7f), localPos[74]); + Object.DestroyImmediate(testGo2); + } + + [Test] + public void TestCellGlobalPositionNoRotate() + { + var testGo = new GameObject("test"); + var position = new Vector3(3.5f, 8f, 17f); + testGo.transform.position = position; + var boxOverlap = TestBoxOverlapChecker.CreateChecker(gridSizeX: 10, gridSizeZ: 10, rotateWithAgent: false, agentGameObject: testGo, centerObject: testGo); + + Assert.AreEqual(new Vector3(-4.5f, 0, -4.5f) + position, boxOverlap.GetCellGlobalPosition(0)); + Assert.AreEqual(new Vector3(-4.5f, 0, 4.5f) + position, boxOverlap.GetCellGlobalPosition(9)); + Assert.AreEqual(new Vector3(4.5f, 0, -4.5f) + position, boxOverlap.GetCellGlobalPosition(90)); + Assert.AreEqual(new Vector3(4.5f, 0, 4.5f) + position, boxOverlap.GetCellGlobalPosition(99)); + + testGo.transform.Rotate(0, 90, 0); // should have no effect on positions + Assert.AreEqual(new Vector3(-4.5f, 0, -4.5f) + position, boxOverlap.GetCellGlobalPosition(0)); + Assert.AreEqual(new Vector3(-4.5f, 0, 4.5f) + position, boxOverlap.GetCellGlobalPosition(9)); + Assert.AreEqual(new Vector3(4.5f, 0, -4.5f) + position, boxOverlap.GetCellGlobalPosition(90)); + Assert.AreEqual(new Vector3(4.5f, 0, 4.5f) + position, boxOverlap.GetCellGlobalPosition(99)); + + Object.DestroyImmediate(testGo); + } + + [Test] + public void TestCellGlobalPositionRotate() + { + var testGo = new GameObject("test"); + var position = new Vector3(15f, 6f, 13f); + testGo.transform.position = position; + var boxOverlap = TestBoxOverlapChecker.CreateChecker(gridSizeX: 5, gridSizeZ: 15, rotateWithAgent: true, agentGameObject: testGo, centerObject: testGo); + + Assert.AreEqual(new Vector3(-2f, 0, -7f) + position, boxOverlap.GetCellGlobalPosition(0)); + Assert.AreEqual(new Vector3(-2f, 0, 7f) + position, boxOverlap.GetCellGlobalPosition(14)); + Assert.AreEqual(new Vector3(2f, 0, -7f) + position, boxOverlap.GetCellGlobalPosition(60)); + Assert.AreEqual(new Vector3(2f, 0, 7f) + position, boxOverlap.GetCellGlobalPosition(74)); + + testGo.transform.Rotate(0, 90, 0); + // round to int to ignore numeric errors + Assert.AreEqual(Vector3Int.RoundToInt(new Vector3(-7f, 0, 2f) + position), Vector3Int.RoundToInt(boxOverlap.GetCellGlobalPosition(0))); + Assert.AreEqual(Vector3Int.RoundToInt(new Vector3(7f, 0, 2f) + position), Vector3Int.RoundToInt(boxOverlap.GetCellGlobalPosition(14))); + Assert.AreEqual(Vector3Int.RoundToInt(new Vector3(-7f, 0, -2f) + position), Vector3Int.RoundToInt(boxOverlap.GetCellGlobalPosition(60))); + Assert.AreEqual(Vector3Int.RoundToInt(new Vector3(7f, 0, -2f) + position), Vector3Int.RoundToInt(boxOverlap.GetCellGlobalPosition(74))); + + Object.DestroyImmediate(testGo); + } + + [Test] + public void TestBufferResize() + { + List testObjects = new List(); + var testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + testObjects.Add(testGo); + var boxOverlap = TestBoxOverlapChecker.CreateChecker(agentGameObject: testGo, centerObject: testGo, initialColliderBufferSize: 2, maxColliderBufferSize: 5); + boxOverlap.Perceive(); + Assert.AreEqual(2, boxOverlap.ColliderBuffer.Length); + + for (var i = 0; i < 3; i++) + { + var boxGo = new GameObject("test"); + boxGo.transform.position = Vector3.zero; + boxGo.AddComponent(); + testObjects.Add(boxGo); + } + boxOverlap.Perceive(); + Assert.AreEqual(4, boxOverlap.ColliderBuffer.Length); + + for (var i = 0; i < 2; i++) + { + var boxGo = new GameObject("test"); + boxGo.transform.position = Vector3.zero; + boxGo.AddComponent(); + testObjects.Add(boxGo); + } + boxOverlap.Perceive(); + Assert.AreEqual(5, boxOverlap.ColliderBuffer.Length); + + Object.DestroyImmediate(testGo); + foreach (var go in testObjects) + { + Object.DestroyImmediate(go); + } + } + + [Test] + public void TestParseCollidersClosest() + { + var tag1 = "Player"; + List testObjects = new List(); + var testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + var boxOverlap = TestBoxOverlapChecker.CreateChecker( + cellScaleX: 10f, + cellScaleZ: 10f, + gridSizeX: 2, + gridSizeZ: 2, + agentGameObject: testGo, + centerObject: testGo, + detectableTags: new[] { tag1 }); + var helper = new VerifyParseCollidersHelper(); + boxOverlap.GridOverlapDetectedClosest += helper.DetectedAction; + + for (var i = 0; i < 3; i++) + { + var boxGo = new GameObject("test"); + boxGo.transform.position = new Vector3(i + 1, 0, 1); + boxGo.AddComponent(); + boxGo.tag = tag1; + testObjects.Add(boxGo); + } + + boxOverlap.Perceive(); + helper.Verify(1, new List { testObjects[0] }); + + Object.DestroyImmediate(testGo); + foreach (var go in testObjects) + { + Object.DestroyImmediate(go); + } + } + + [Test] + public void TestParseCollidersAll() + { + var tag1 = "Player"; + List testObjects = new List(); + var testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + var boxOverlap = TestBoxOverlapChecker.CreateChecker( + cellScaleX: 10f, + cellScaleZ: 10f, + gridSizeX: 2, + gridSizeZ: 2, + agentGameObject: testGo, + centerObject: testGo, + detectableTags: new[] { tag1 }); + var helper = new VerifyParseCollidersHelper(); + boxOverlap.GridOverlapDetectedAll += helper.DetectedAction; + + for (var i = 0; i < 3; i++) + { + var boxGo = new GameObject("test"); + boxGo.transform.position = new Vector3(i + 1, 0, 1); + boxGo.AddComponent(); + boxGo.tag = tag1; + testObjects.Add(boxGo); + } + + boxOverlap.Perceive(); + helper.Verify(3, testObjects); + + Object.DestroyImmediate(testGo); + foreach (var go in testObjects) + { + Object.DestroyImmediate(go); + } + } + + public class VerifyParseCollidersHelper + { + int m_NumInvoked; + List m_ParsedObjects = new List(); + + public void DetectedAction(GameObject go, int cellIndex) + { + m_NumInvoked += 1; + m_ParsedObjects.Add(go); + } + + public void Verify(int expectNumInvoke, List expectedObjects) + { + Assert.AreEqual(expectNumInvoke, m_NumInvoked); + Assert.AreEqual(expectedObjects.Count, m_ParsedObjects.Count); + foreach (var obj in expectedObjects) + { + Assert.Contains(obj, m_ParsedObjects); + } + } + } + + [Test] + public void TestOnlyOneChecker() + { + var testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + var gridSensorComponent = testGo.AddComponent(); + gridSensorComponent.SetComponentParameters(useGridSensorBase: true, useTestingGridSensor: true); + var sensors = gridSensorComponent.CreateSensors(); + int numChecker = 0; + foreach (var sensor in sensors) + { + var gridsensor = (GridSensorBase)sensor; + if (gridsensor.m_GridPerception != null) + { + numChecker += 1; + } + } + Assert.AreEqual(1, numChecker); + } + } +} +#endif diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d0b075e343e21fb6176136616173bd77d7e9e9b1 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/BoxOverlapCheckerTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087f04a0f817c45f4a709ed36fe5ba1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/BufferSensorTest.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/BufferSensorTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1ec30dd16851e8aa29c41b1cd33af636df68dab --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/BufferSensorTest.cs @@ -0,0 +1,80 @@ +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class BufferSensorTest + { + [Test] + public void TestBufferSensor() + { + var bufferSensor = new BufferSensor(20, 4, "testName"); + var shape = bufferSensor.GetObservationSpec().Shape; + var dimProp = bufferSensor.GetObservationSpec().DimensionProperties; + Assert.AreEqual(shape[0], 20); + Assert.AreEqual(shape[1], 4); + Assert.AreEqual(shape.Length, 2); + Assert.AreEqual(dimProp[0], DimensionProperty.VariableSize); + Assert.AreEqual(dimProp[1], DimensionProperty.None); + Assert.AreEqual(dimProp.Length, 2); + + bufferSensor.AppendObservation(new float[] { 1, 2, 3, 4 }); + bufferSensor.AppendObservation(new float[] { 5, 6, 7, 8 }); + var obsWriter = new ObservationWriter(); + var obs = bufferSensor.GetObservationProto(obsWriter); + + Assert.AreEqual(shape, InplaceArray.FromList(obs.Shape)); + Assert.AreEqual(obs.DimensionProperties.Count, 2); + Assert.AreEqual((int)dimProp[0], obs.DimensionProperties[0]); + Assert.AreEqual((int)dimProp[1], obs.DimensionProperties[1]); + + for (int i = 0; i < 8; i++) + { + Assert.AreEqual(obs.FloatData.Data[i], i + 1); + } + for (int i = 8; i < 80; i++) + { + Assert.AreEqual(obs.FloatData.Data[i], 0); + } + } + + [Test] + public void TestBufferSensorComponent() + { + var agentGameObj = new GameObject("agent"); + var bufferComponent = agentGameObj.AddComponent(); + bufferComponent.MaxNumObservables = 20; + bufferComponent.ObservableSize = 4; + bufferComponent.SensorName = "TestName"; + + var sensor = bufferComponent.CreateSensors()[0]; + var shape = sensor.GetObservationSpec().Shape; + + Assert.AreEqual(shape[0], 20); + Assert.AreEqual(shape[1], 4); + Assert.AreEqual(shape.Length, 2); + + bufferComponent.AppendObservation(new float[] { 1, 2, 3, 4 }); + bufferComponent.AppendObservation(new float[] { 5, 6, 7, 8 }); + + var obsWriter = new ObservationWriter(); + var obs = sensor.GetObservationProto(obsWriter); + + Assert.AreEqual(shape, InplaceArray.FromList(obs.Shape)); + Assert.AreEqual(obs.DimensionProperties.Count, 2); + + Assert.AreEqual(sensor.GetName(), "TestName"); + + for (int i = 0; i < 8; i++) + { + Assert.AreEqual(obs.FloatData.Data[i], i + 1); + } + for (int i = 8; i < 80; i++) + { + Assert.AreEqual(obs.FloatData.Data[i], 0); + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/BufferSensorTest.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/BufferSensorTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..be1021246e7f6eb469141c7462c71a5a78d537e1 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/BufferSensorTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5267572aa66d34b49bbc65940674b2a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorComponentTest.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorComponentTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..bad7fefc4f869716a1fc4de904eb61347f91761c --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorComponentTest.cs @@ -0,0 +1,52 @@ +using System; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class CameraSensorComponentTest + { + [Test] + public void TestCameraSensorComponent() + { + foreach (var grayscale in new[] { true, false }) + { + foreach (SensorCompressionType compression in Enum.GetValues(typeof(SensorCompressionType))) + { + var width = 24; + var height = 16; + var camera = Camera.main; + + var agentGameObj = new GameObject("agent"); + + var cameraComponent = agentGameObj.AddComponent(); + cameraComponent.Camera = camera; + cameraComponent.Height = height; + cameraComponent.Width = width; + cameraComponent.Grayscale = grayscale; + cameraComponent.CompressionType = compression; + cameraComponent.RuntimeCameraEnable = true; + + var sensor = cameraComponent.CreateSensors()[0]; + var expectedShape = new InplaceArray(height, width, grayscale ? 1 : 3); + Assert.AreEqual(expectedShape, sensor.GetObservationSpec().Shape); + Assert.AreEqual(typeof(CameraSensor), sensor.GetType()); + + var flags = BindingFlags.Instance | BindingFlags.NonPublic; + var runtimeCameraEnabled = (bool)typeof(CameraSensorComponent).GetField("m_RuntimeCameraEnable", flags).GetValue(cameraComponent); + Assert.True(runtimeCameraEnabled); + + // Make sure cleaning up the component cleans up the sensor too + cameraComponent.Dispose(); + var cameraComponentSensor = (CameraSensor)typeof(CameraSensorComponent).GetField("m_Sensor", flags).GetValue(cameraComponent); + Assert.IsNull(cameraComponentSensor); + var cameraTexture = (Texture2D)typeof(CameraSensor).GetField("m_Texture", flags).GetValue(sensor); + Assert.IsNull(cameraTexture); + } + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorComponentTest.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorComponentTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f66b94c6b7b304ebbea646f9b65d128d45b2589c --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorComponentTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c0b188faef38407e82223854fc8eaf5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorTest.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..f075d1941d4a4a46f9a2fdfc8d57062e822ffeff --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorTest.cs @@ -0,0 +1,56 @@ +using System; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class CameraSensorTest + { + [Test] + public void TestCameraSensor() + { + foreach (var grayscale in new[] { true, false }) + { + foreach (SensorCompressionType compression in Enum.GetValues(typeof(SensorCompressionType))) + { + var width = 24; + var height = 16; + var camera = Camera.main; + var c = new GameObject(); + if (ReferenceEquals(null, camera)) + { + camera = c.AddComponent(); + } + var sensor = new CameraSensor(camera, width, height, grayscale, "TestCameraSensor", compression); + + var obsWriter = new ObservationWriter(); + var obs = sensor.GetObservationProto(obsWriter); + + Assert.AreEqual((int)compression, (int)obs.CompressionType); + var expectedShape = new[] { height, width, grayscale ? 1 : 3 }; + Assert.AreEqual(expectedShape, obs.Shape); + UnityEngine.Object.DestroyImmediate(c); + } + } + } + + [Test] + public void TestObservationType() + { + var width = 24; + var height = 16; + var camera = Camera.main; + var sensor = new CameraSensor(camera, width, height, true, "TestCameraSensor", SensorCompressionType.None); + var spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.Default); + sensor = new CameraSensor(camera, width, height, true, "TestCameraSensor", SensorCompressionType.None, ObservationType.Default); + spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.Default); + sensor = new CameraSensor(camera, width, height, true, "TestCameraSensor", SensorCompressionType.None, ObservationType.GoalSignal); + spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.GoalSignal); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorTest.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorTest.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6f505b3aa3ce971880d2769876c12df037b3274f --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/CameraSensorTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccdfc5b4015c9465cb1e811375be971c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/CompressionSpecTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/CompressionSpecTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..95740a5c7c3fda532325d4d0d2eec92bd293ac7e --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/CompressionSpecTests.cs @@ -0,0 +1,30 @@ +using NUnit.Framework; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class CompressionSpecTests + { + [Test] + public void TestIsTrivialMapping() + { + Assert.IsTrue(CompressionSpec.Default().IsTrivialMapping()); + + var spec = new CompressionSpec(SensorCompressionType.PNG, null); + Assert.AreEqual(spec.IsTrivialMapping(), true); + + spec = new CompressionSpec(SensorCompressionType.PNG, new[] { 0, 0, 0 }); + Assert.AreEqual(spec.IsTrivialMapping(), true); + + spec = new CompressionSpec(SensorCompressionType.PNG, new[] { 0, 1, 2, 3, 4 }); + Assert.AreEqual(spec.IsTrivialMapping(), true); + + spec = new CompressionSpec(SensorCompressionType.PNG, new[] { 1, 2, 3, 4, -1, -1 }); + Assert.AreEqual(spec.IsTrivialMapping(), false); + + spec = new CompressionSpec(SensorCompressionType.PNG, new[] { 0, 0, 0, 1, 1, 1 }); + Assert.AreEqual(spec.IsTrivialMapping(), false); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/CompressionSpecTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/CompressionSpecTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d9df7ce5b267e984fdb8630ffe35b866b766bcd7 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/CompressionSpecTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd0990de0eb646b0b0531b91c840c9da +timeCreated: 1616030728 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/FloatVisualSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/FloatVisualSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..0f4a7ae1de5d9ec2a29e0b6c75ab2aead65d1fec --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/FloatVisualSensorTests.cs @@ -0,0 +1,106 @@ +using NUnit.Framework; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + public class Float2DSensor : ISensor + { + public int Width { get; } + public int Height { get; } + string m_Name; + private ObservationSpec m_ObservationSpec; + public float[,] floatData; + + public Float2DSensor(int width, int height, string name) + { + Width = width; + Height = height; + m_Name = name; + + m_ObservationSpec = ObservationSpec.Visual(height, width, 1); + floatData = new float[Height, Width]; + } + + public Float2DSensor(float[,] floatData, string name) + { + this.floatData = floatData; + Height = floatData.GetLength(0); + Width = floatData.GetLength(1); + m_Name = name; + m_ObservationSpec = ObservationSpec.Visual(Height, Width, 1); + } + + public string GetName() + { + return m_Name; + } + + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + public byte[] GetCompressedObservation() + { + return null; + } + + public int Write(ObservationWriter writer) + { + using (TimerStack.Instance.Scoped("Float2DSensor.Write")) + { + for (var h = 0; h < Height; h++) + { + for (var w = 0; w < Width; w++) + { + writer[h, w, 0] = floatData[h, w]; + } + } + var numWritten = Height * Width; + return numWritten; + } + } + + public void Update() { } + public void Reset() { } + + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + } + + public class FloatVisualSensorTests + { + [Test] + public void TestFloat2DSensorWrite() + { + var sensor = new Float2DSensor(3, 4, "floatsensor"); + for (var h = 0; h < 4; h++) + { + for (var w = 0; w < 3; w++) + { + sensor.floatData[h, w] = 3 * h + w; + } + } + + var output = new float[12]; + var writer = new ObservationWriter(); + writer.SetTarget(output, sensor.GetObservationSpec(), 0); + sensor.Write(writer); + for (var i = 0; i < 9; i++) + { + Assert.AreEqual(i, output[i]); + } + } + + [Test] + public void TestFloat2DSensorExternalData() + { + var data = new float[4, 3]; + var sensor = new Float2DSensor(data, "floatsensor"); + Assert.AreEqual(sensor.Height, 4); + Assert.AreEqual(sensor.Width, 3); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/FloatVisualSensorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/FloatVisualSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..340841bc1fcecf4a6681471565eeb56d736ee9a2 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/FloatVisualSensorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 49b7da14949a486b803e28ed32d91a09 +timeCreated: 1578093005 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTestUtils.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTestUtils.cs new file mode 100644 index 0000000000000000000000000000000000000000..8fd5a3b28b150cb34e81501b5c373fae1ff8b764 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTestUtils.cs @@ -0,0 +1,87 @@ +using NUnit.Framework; +using System; +using System.Linq; + +namespace Unity.MLAgents.Tests +{ + public static class GridObsTestUtils + { + /// + /// Utility function to duplicate an array into an array of arrays + /// + /// array to duplicate + /// number of times to duplicate + /// array of duplicated arrays + public static float[][] DuplicateArray(float[] array, int numCopies) + { + float[][] duplicated = new float[numCopies][]; + for (int i = 0; i < numCopies; i++) + { + duplicated[i] = array; + } + return duplicated; + } + + /// + /// Asserts that the sub-arrays of the total array are equal to specific subarrays at specific subarray indicies and equal to a default everywhere else. + /// + /// Array containing all data of the grid observation. Is a concatenation of N subarrays all of the same length + /// The indicies to verify that differ from the default array + /// The sub arrays values that differ from the default array + /// The default value of a sub array + /// + /// If the total array is data from a 4x4x2 grid observation, total will be an array of size 32 and each sub array will have a size of 2. + /// Let 3 cells at indicies (0, 1), (2, 2), and (3, 0) with values ([.1, .5]), ([.9, .7]), ([0, .2]), respectively. + /// If the default values of cells are ([0, 0]) then the grid observation will be as follows: + /// [ [0, 0], [.1, .5], [ 0, 0 ], [0, 0], + /// [0, 0], [ 0, 0 ], [ 0, 0 ], [0, 0], + /// [0, 0], [ 0, 0 ], [.9, .7], [0, 0], + /// [0, .2], [ 0, 0 ], [ 0, 0 ], [0, 0] ] + /// + /// Which will make the total array will be the flattened array + /// total = [0, 0, .1, .5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, .9, .7, 0, 0, 0, .2, 0, 0, 0, 0, 0] + /// + /// The indicies of the activated cells in the flattened array will be 1, 10, and 12 + /// + /// So to verify that the total array is as expected, AssertSubarraysAtIndex should be called as + /// AssertSubarraysAtIndex( + /// total, + /// indicies = new int[] {1, 10, 12}, + /// expectedArrays = new float[][] { new float[] {.1, .5}, new float[] {.9, .7}, new float[] {0, .2}}, + /// expecedDefaultArray = new float[] {0, 0} + /// ) + /// + public static void AssertSubarraysAtIndex(float[] total, int[] indicies, float[][] expectedArrays, float[] expectedDefaultArray) + { + int totalIndex = 0; + int subIndex = 0; + int subarrayIndex = 0; + int lenOfData = expectedDefaultArray.Length; + int numArrays = total.Length / lenOfData; + for (int i = 0; i < numArrays; i++) + { + totalIndex = i * lenOfData; + + if (indicies.Contains(i)) + { + subarrayIndex = Array.IndexOf(indicies, i); + for (subIndex = 0; subIndex < lenOfData; subIndex++) + { + Assert.AreEqual(expectedArrays[subarrayIndex][subIndex], total[totalIndex], + "Expected " + expectedArrays[subarrayIndex][subIndex] + " at subarray index " + totalIndex + ", index = " + subIndex + " but was " + total[totalIndex]); + totalIndex++; + } + } + else + { + for (subIndex = 0; subIndex < lenOfData; subIndex++) + { + Assert.AreEqual(expectedDefaultArray[subIndex], total[totalIndex], + "Expected default value " + expectedDefaultArray[subIndex] + " at subarray index " + totalIndex + ", index = " + subIndex + " but was " + total[totalIndex]); + totalIndex++; + } + } + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTestUtils.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTestUtils.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..216e38aa9d778d6b8bcc36b9989c36afd37517b0 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTestUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53aa6ab552bca5d49a6d298f1e633717 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..f568b74952c230fa29b7b3c7197efc90ef2355ed --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs @@ -0,0 +1,207 @@ +#if MLA_UNITY_PHYSICS_MODULE +using System.Collections.Generic; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + public class GridSensorTests + { + GameObject testGo; + GameObject boxGo; + SimpleTestGridSensorComponent gridSensorComponent; + + // Use built-in tags + const string k_Tag1 = "Player"; + const string k_Tag2 = "Respawn"; + + [UnitySetUp] + public IEnumerator SetupScene() + { + testGo = new GameObject("test"); + testGo.transform.position = Vector3.zero; + gridSensorComponent = testGo.AddComponent(); + + boxGo = new GameObject("block"); + boxGo.tag = k_Tag1; + boxGo.transform.position = new Vector3(3f, 0f, 3f); + boxGo.AddComponent(); + + TestGridSensorConfig.Reset(); + yield return null; + } + + [TearDown] + public void ClearScene() + { + Object.DestroyImmediate(boxGo); + Object.DestroyImmediate(testGo); + } + + [Test] + public void TestBufferSize() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, gridSizeX: 3, gridSizeZ: 4, useTestingGridSensor: true); + TestGridSensorConfig.SetParameters(5, true, false); + var gridSensor = (SimpleTestGridSensor)gridSensorComponent.CreateSensors()[0]; + Assert.AreEqual(gridSensor.PerceptionBuffer.Length, 3 * 4 * 5); + } + + [Test] + public void TestInvalidSizeConfiguration() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, gridSizeY: 10, useTestingGridSensor: true); + gridSensorComponent.CreateSensors(); // expect no exception + + gridSensorComponent.m_GridSize.y = 10; + Assert.Throws(() => + { + gridSensorComponent.CreateSensors(); + }); + } + + [Test] + public void TestInvalidCompressionConfiguration() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, compression: SensorCompressionType.PNG, useTestingGridSensor: true); + + var gridSensor = (GridSensorBase)gridSensorComponent.CreateSensors()[0]; + LogAssert.Expect(LogType.Warning, $"Compression type {SensorCompressionType.PNG} is only supported with normalized data. " + + "The sensor will not compress the data."); + Assert.AreEqual(gridSensor.CompressionType, SensorCompressionType.None); + } + + [Test] + public void TestCreateSensor() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, useGridSensorBase: true); + + gridSensorComponent.CreateSensors(); + var componentSensor = (List) typeof(GridSensorComponent).GetField("m_Sensors", + BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridSensorComponent); + Assert.AreEqual(componentSensor.Count, 1); + } + + [Test] + public void PerceiveNotSelf() + { + testGo.tag = k_Tag2; + + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, useGridSensorBase: true); + var gridSensor = (GridSensorBase)gridSensorComponent.CreateSensors()[0]; + + gridSensor.Update(); + + int[] subarrayIndicies = new int[] { 77, 78, 87, 88 }; + float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new float[] { 1 }, 4); + float[] expectedDefault = new float[] { 0 }; + GridObsTestUtils.AssertSubarraysAtIndex(gridSensor.PerceptionBuffer, subarrayIndicies, expectedSubarrays, expectedDefault); + } + + [Test] + public void TestReset() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, useGridSensorBase: true); + TestGridSensorConfig.SetParameters(3, false, false); + var gridSensor = (GridSensorBase)gridSensorComponent.CreateSensors()[0]; + + gridSensor.Update(); + + int[] subarrayIndicies = new int[] { 77, 78, 87, 88 }; + float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new float[] { 1 }, 4); + float[] expectedDefault = new float[] { 0 }; + GridObsTestUtils.AssertSubarraysAtIndex(gridSensor.PerceptionBuffer, subarrayIndicies, expectedSubarrays, expectedDefault); + Object.DestroyImmediate(boxGo); + + gridSensor.Update(); + + subarrayIndicies = new int[0]; + expectedSubarrays = new float[0][]; + GridObsTestUtils.AssertSubarraysAtIndex(gridSensor.PerceptionBuffer, subarrayIndicies, expectedSubarrays, expectedDefault); + } + + [Test] + public void TestOneHotSensor() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, useOneHotTag: true); + var gridSensor = (OneHotGridSensor)gridSensorComponent.CreateSensors()[0]; + Assert.AreEqual(gridSensor.PerceptionBuffer.Length, 10 * 10 * 2); + + gridSensor.Update(); + + int[] subarrayIndicies = new int[] { 77, 78, 87, 88 }; + float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new float[] { 1, 0 }, 4); + float[] expectedDefault = new float[] { 0, 0 }; + GridObsTestUtils.AssertSubarraysAtIndex(gridSensor.PerceptionBuffer, subarrayIndicies, expectedSubarrays, expectedDefault); + } + + [Test] + public void TestCustomSensorInvalidData() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, compression: SensorCompressionType.PNG, useTestingGridSensor: true); + TestGridSensorConfig.SetParameters(5, true, false); + var gridSensor = (SimpleTestGridSensor)gridSensorComponent.CreateSensors()[0]; + + gridSensor.DummyData = new float[] { 1, 2, 3, 4, 5 }; + Assert.Throws(() => + { + gridSensor.Update(); + }); + } + + [Test] + public void TestMultipleSensors() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, useOneHotTag: true, useGridSensorBase: true, useTestingGridSensor: true); + var gridSensors = gridSensorComponent.CreateSensors(); + Assert.IsNotNull(((GridSensorBase)gridSensors[0]).m_GridPerception); + Assert.IsNull(((GridSensorBase)gridSensors[1]).m_GridPerception); + Assert.IsNull(((GridSensorBase)gridSensors[2]).m_GridPerception); + } + + [Test] + public void TestNoSensors() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags); + Assert.Throws(() => + { + gridSensorComponent.CreateSensors(); + }); + } + + [Test] + public void TestStackedSensors() + { + testGo.tag = k_Tag2; + string[] tags = { k_Tag1, k_Tag2 }; + gridSensorComponent.SetComponentParameters(tags, useGridSensorBase: true); + gridSensorComponent.ObservationStacks = 3; + var sensors = gridSensorComponent.CreateSensors(); + Assert.IsInstanceOf(typeof(StackingSensor), sensors[0]); + } + } +} +#endif diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e477ba84051e2a160f5e3a4e686dfcccd09213ee --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/GridSensorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a8626afd640a4edd942dac3d8d6bc85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/ObservableAttributeTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservableAttributeTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..f71162ef530bfc3db195cb405e7c3e5dda9347c8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservableAttributeTests.cs @@ -0,0 +1,360 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class ObservableAttributeTests + { + public enum TestEnum + { + ValueA = -100, + ValueB = 1, + ValueC = 42, + } + + [Flags] + public enum TestFlags + { + FlagA = 1, + FlagB = 2, + FlagC = 4 + } + + class TestClass + { + // Non-observables + int m_NonObservableInt; + float m_NonObservableFloat; + + // + // Int + // + [Observable] + public int m_IntMember; + + int m_IntProperty; + + [Observable] + public int IntProperty + { + get => m_IntProperty; + set => m_IntProperty = value; + } + + // + // Float + // + [Observable("floatMember")] + public float m_FloatMember; + + float m_FloatProperty; + [Observable("floatProperty")] + public float FloatProperty + { + get => m_FloatProperty; + set => m_FloatProperty = value; + } + + // + // Bool + // + [Observable("boolMember")] + public bool m_BoolMember; + + bool m_BoolProperty; + [Observable("boolProperty")] + public bool BoolProperty + { + get => m_BoolProperty; + set => m_BoolProperty = value; + } + + // + // Vector2 + // + + [Observable("vector2Member")] + public Vector2 m_Vector2Member; + + Vector2 m_Vector2Property; + + [Observable("vector2Property")] + public Vector2 Vector2Property + { + get => m_Vector2Property; + set => m_Vector2Property = value; + } + + // + // Vector3 + // + [Observable("vector3Member")] + public Vector3 m_Vector3Member; + + Vector3 m_Vector3Property; + + [Observable("vector3Property")] + public Vector3 Vector3Property + { + get => m_Vector3Property; + set => m_Vector3Property = value; + } + + // + // Vector4 + // + + [Observable("vector4Member")] + public Vector4 m_Vector4Member; + + Vector4 m_Vector4Property; + + [Observable("vector4Property")] + public Vector4 Vector4Property + { + get => m_Vector4Property; + set => m_Vector4Property = value; + } + + // + // Quaternion + // + [Observable("quaternionMember")] + public Quaternion m_QuaternionMember; + + Quaternion m_QuaternionProperty; + + [Observable("quaternionProperty")] + public Quaternion QuaternionProperty + { + get => m_QuaternionProperty; + set => m_QuaternionProperty = value; + } + + // + // Enum + // + + [Observable("enumMember")] + public TestEnum m_EnumMember = TestEnum.ValueA; + + TestEnum m_EnumProperty = TestEnum.ValueC; + + [Observable("enumProperty")] + public TestEnum EnumProperty + { + get => m_EnumProperty; + set => m_EnumProperty = value; + } + + [Observable("badEnumMember")] + public TestEnum m_BadEnumMember = (TestEnum)1337; + + // + // Flags + // + [Observable("flagMember")] + public TestFlags m_FlagMember = TestFlags.FlagA; + + TestFlags m_FlagProperty = TestFlags.FlagB | TestFlags.FlagC; + + [Observable("flagProperty")] + public TestFlags FlagProperty + { + get => m_FlagProperty; + set => m_FlagProperty = value; + } + } + + [Test] + public void TestGetObservableSensors() + { + var testClass = new TestClass(); + testClass.m_IntMember = 1; + testClass.IntProperty = 2; + + testClass.m_FloatMember = 1.1f; + testClass.FloatProperty = 1.2f; + + testClass.m_BoolMember = true; + testClass.BoolProperty = true; + + testClass.m_Vector2Member = new Vector2(2.0f, 2.1f); + testClass.Vector2Property = new Vector2(2.2f, 2.3f); + + testClass.m_Vector3Member = new Vector3(3.0f, 3.1f, 3.2f); + testClass.Vector3Property = new Vector3(3.3f, 3.4f, 3.5f); + + testClass.m_Vector4Member = new Vector4(4.0f, 4.1f, 4.2f, 4.3f); + testClass.Vector4Property = new Vector4(4.4f, 4.5f, 4.5f, 4.7f); + + testClass.m_Vector4Member = new Vector4(4.0f, 4.1f, 4.2f, 4.3f); + testClass.Vector4Property = new Vector4(4.4f, 4.5f, 4.5f, 4.7f); + + testClass.m_QuaternionMember = new Quaternion(5.0f, 5.1f, 5.2f, 5.3f); + testClass.QuaternionProperty = new Quaternion(5.4f, 5.5f, 5.5f, 5.7f); + + var sensors = ObservableAttribute.CreateObservableSensors(testClass, false); + + var sensorsByName = new Dictionary(); + foreach (var sensor in sensors) + { + sensorsByName[sensor.GetName()] = sensor; + } + + SensorTestHelper.CompareObservation(sensorsByName["ObservableAttribute:TestClass.m_IntMember"], new[] { 1.0f }); + SensorTestHelper.CompareObservation(sensorsByName["ObservableAttribute:TestClass.IntProperty"], new[] { 2.0f }); + + SensorTestHelper.CompareObservation(sensorsByName["floatMember"], new[] { 1.1f }); + SensorTestHelper.CompareObservation(sensorsByName["floatProperty"], new[] { 1.2f }); + + SensorTestHelper.CompareObservation(sensorsByName["boolMember"], new[] { 1.0f }); + SensorTestHelper.CompareObservation(sensorsByName["boolProperty"], new[] { 1.0f }); + + SensorTestHelper.CompareObservation(sensorsByName["vector2Member"], new[] { 2.0f, 2.1f }); + SensorTestHelper.CompareObservation(sensorsByName["vector2Property"], new[] { 2.2f, 2.3f }); + + SensorTestHelper.CompareObservation(sensorsByName["vector3Member"], new[] { 3.0f, 3.1f, 3.2f }); + SensorTestHelper.CompareObservation(sensorsByName["vector3Property"], new[] { 3.3f, 3.4f, 3.5f }); + + SensorTestHelper.CompareObservation(sensorsByName["vector4Member"], new[] { 4.0f, 4.1f, 4.2f, 4.3f }); + SensorTestHelper.CompareObservation(sensorsByName["vector4Property"], new[] { 4.4f, 4.5f, 4.5f, 4.7f }); + + SensorTestHelper.CompareObservation(sensorsByName["quaternionMember"], new[] { 5.0f, 5.1f, 5.2f, 5.3f }); + SensorTestHelper.CompareObservation(sensorsByName["quaternionProperty"], new[] { 5.4f, 5.5f, 5.5f, 5.7f }); + + // Actual ordering is B, C, A + SensorTestHelper.CompareObservation(sensorsByName["enumMember"], new[] { 0.0f, 0.0f, 1.0f }); + SensorTestHelper.CompareObservation(sensorsByName["enumProperty"], new[] { 0.0f, 1.0f, 0.0f }); + SensorTestHelper.CompareObservation(sensorsByName["badEnumMember"], new[] { 0.0f, 0.0f, 0.0f }); + + SensorTestHelper.CompareObservation(sensorsByName["flagMember"], new[] { 1.0f, 0.0f, 0.0f }); + SensorTestHelper.CompareObservation(sensorsByName["flagProperty"], new[] { 0.0f, 1.0f, 1.0f }); + } + + [Test] + public void TestGetTotalObservationSize() + { + var testClass = new TestClass(); + var errors = new List(); + var expectedObsSize = 2 * ( // two fields each of these + 1 // int + + 1 // float + + 1 // bool + + 2 // vector2 + + 3 // vector3 + + 4 // vector4 + + 4 // quaternion + + 3 // TestEnum - 3 values + + 3 // TestFlags - 3 values + ) + + 3; // TestEnum with bad value + Assert.AreEqual(expectedObsSize, ObservableAttribute.GetTotalObservationSize(testClass, false, errors)); + Assert.AreEqual(0, errors.Count); + } + + class BadClass + { + [Observable] + double m_Double; + + [Observable] + double DoubleProperty + { + get => m_Double; + set => m_Double = value; + } + + float m_WriteOnlyProperty; + + [Observable] + // No get property, so we shouldn't be able to make a sensor out of this. + public float WriteOnlyProperty + { + set => m_WriteOnlyProperty = value; + } + } + + [Test] + public void TestInvalidObservables() + { + var bad = new BadClass(); + bad.WriteOnlyProperty = 1.0f; + var errors = new List(); + Assert.AreEqual(0, ObservableAttribute.GetTotalObservationSize(bad, false, errors)); + Assert.AreEqual(3, errors.Count); + + // Should be able to safely generate sensors (and get nothing back) + var sensors = ObservableAttribute.CreateObservableSensors(bad, false); + Assert.AreEqual(0, sensors.Count); + } + + class StackingClass + { + [Observable(numStackedObservations: 2)] + public float FloatVal; + } + + [Test] + public void TestObservableAttributeStacking() + { + var c = new StackingClass(); + c.FloatVal = 1.0f; + var sensors = ObservableAttribute.CreateObservableSensors(c, false); + var sensor = sensors[0]; + Assert.AreEqual(typeof(StackingSensor), sensor.GetType()); + SensorTestHelper.CompareObservation(sensor, new[] { 0.0f, 1.0f }); + + sensor.Update(); + c.FloatVal = 3.0f; + SensorTestHelper.CompareObservation(sensor, new[] { 1.0f, 3.0f }); + + var errors = new List(); + Assert.AreEqual(2, ObservableAttribute.GetTotalObservationSize(c, false, errors)); + Assert.AreEqual(0, errors.Count); + } + + class BaseClass + { + [Observable("base")] + public float m_BaseField; + + [Observable("private")] + float m_PrivateField; + } + + class DerivedClass : BaseClass + { + [Observable("derived")] + float m_DerivedField; + } + + [Test] + public void TestObservableAttributeExcludeInherited() + { + var d = new DerivedClass(); + d.m_BaseField = 1.0f; + + // excludeInherited=false will get fields in the derived class, plus public and protected inherited fields + var sensorAll = ObservableAttribute.CreateObservableSensors(d, false); + Assert.AreEqual(2, sensorAll.Count); + // Note - actual order doesn't matter here, we can change this to use a HashSet if neeed. + Assert.AreEqual("derived", sensorAll[0].GetName()); + Assert.AreEqual("base", sensorAll[1].GetName()); + + // excludeInherited=true will only get fields in the derived class + var sensorsDerivedOnly = ObservableAttribute.CreateObservableSensors(d, true); + Assert.AreEqual(1, sensorsDerivedOnly.Count); + Assert.AreEqual("derived", sensorsDerivedOnly[0].GetName()); + + var b = new BaseClass(); + var baseSensors = ObservableAttribute.CreateObservableSensors(b, false); + Assert.AreEqual(2, baseSensors.Count); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/ObservableAttributeTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservableAttributeTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..611fdcfa124be8b96d4f17c8690f4cfd9d3c6ac6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservableAttributeTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33d7912e6b3504412bd261b40e46df32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/ObservationWriterTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservationWriterTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..bc805f954e389d123eca6ea76b40734440493eeb --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservationWriterTests.cs @@ -0,0 +1,99 @@ +using NUnit.Framework; +using Unity.Barracuda; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Inference; + + +namespace Unity.MLAgents.Tests +{ + public class ObservationWriterTests + { + [Test] + public void TestWritesToIList() + { + ObservationWriter writer = new ObservationWriter(); + var buffer = new[] { 0f, 0f, 0f }; + var shape = new InplaceArray(3); + + writer.SetTarget(buffer, shape, 0); + // Elementwise writes + writer[0] = 1f; + writer[2] = 2f; + Assert.AreEqual(new[] { 1f, 0f, 2f }, buffer); + + // Elementwise writes with offset + writer.SetTarget(buffer, shape, 1); + writer[0] = 3f; + Assert.AreEqual(new[] { 1f, 3f, 2f }, buffer); + + // AddList + writer.SetTarget(buffer, shape, 0); + writer.AddList(new[] { 4f, 5f }); + Assert.AreEqual(new[] { 4f, 5f, 2f }, buffer); + + // AddList with offset + writer.SetTarget(buffer, shape, 1); + writer.AddList(new[] { 6f, 7f }); + Assert.AreEqual(new[] { 4f, 6f, 7f }, buffer); + } + + [Test] + public void TestWritesToTensor() + { + ObservationWriter writer = new ObservationWriter(); + var t = new TensorProxy + { + valueType = TensorProxy.TensorType.FloatingPoint, + data = new Tensor(2, 3) + }; + + writer.SetTarget(t, 0, 0); + Assert.AreEqual(0f, t.data[0, 0]); + writer[0] = 1f; + Assert.AreEqual(1f, t.data[0, 0]); + + writer.SetTarget(t, 1, 1); + writer[0] = 2f; + writer[1] = 3f; + // [0, 0] shouldn't change + Assert.AreEqual(1f, t.data[0, 0]); + Assert.AreEqual(2f, t.data[1, 1]); + Assert.AreEqual(3f, t.data[1, 2]); + + // AddList + t = new TensorProxy + { + valueType = TensorProxy.TensorType.FloatingPoint, + data = new Tensor(2, 3) + }; + + writer.SetTarget(t, 1, 1); + writer.AddList(new[] { -1f, -2f }); + Assert.AreEqual(0f, t.data[0, 0]); + Assert.AreEqual(0f, t.data[0, 1]); + Assert.AreEqual(0f, t.data[0, 2]); + Assert.AreEqual(0f, t.data[1, 0]); + Assert.AreEqual(-1f, t.data[1, 1]); + Assert.AreEqual(-2f, t.data[1, 2]); + } + + [Test] + public void TestWritesToTensor3D() + { + ObservationWriter writer = new ObservationWriter(); + var t = new TensorProxy + { + valueType = TensorProxy.TensorType.FloatingPoint, + data = new Tensor(2, 2, 2, 3) + }; + + writer.SetTarget(t, 0, 0); + writer[1, 0, 1] = 1f; + Assert.AreEqual(1f, t.data[0, 1, 0, 1]); + + writer.SetTarget(t, 0, 1); + writer[1, 0, 0] = 2f; + Assert.AreEqual(2f, t.data[0, 1, 0, 1]); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/ObservationWriterTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservationWriterTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b03f609fdc3ceb903e360436d98e3f4c502a68e7 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/ObservationWriterTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3de9cbda816e4d7b907e765577dd54f7 +timeCreated: 1572568337 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/RayPerceptionSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/RayPerceptionSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..763dec4964445fd843523d2de2fc00f15288ab3e --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/RayPerceptionSensorTests.cs @@ -0,0 +1,537 @@ +using System.Collections.Generic; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; +using UnityEngine.TestTools; + +namespace Unity.MLAgents.Tests +{ + public class RayPerceptionSensorTests + { + [Test] + public void TestGetRayAngles() + { + var anglesAlternating = RayPerceptionSensorComponentBase.GetRayAnglesAlternating(3, 90f); + var expectedAnglesAlternating = new[] { 90f, 60f, 120f, 30f, 150f, 0f, 180f }; + Assert.AreEqual(expectedAnglesAlternating.Length, anglesAlternating.Length); + for (var i = 0; i < anglesAlternating.Length; i++) + { + Assert.AreEqual(expectedAnglesAlternating[i], anglesAlternating[i], .01); + } + + var angles = RayPerceptionSensorComponentBase.GetRayAngles(3, 90f); + var expectedAngles = new[] { 0f, 30f, 60f, 90f, 120f, 150f, 180f }; + Assert.AreEqual(expectedAngles.Length, angles.Length); + for (var i = 0; i < angles.Length; i++) + { + Assert.AreEqual(expectedAngles[i], angles[i], .01); + } + } + } + + public class RayPerception3DTests + { + [Test] + public void TestDefaultLayersAreNegativeFive() + { +#if MLA_UNITY_PHYSICS_MODULE + Assert.IsTrue(Physics.DefaultRaycastLayers == -5); +#endif +#if MLA_UNITY_PHYSICS2D_MODULE + Assert.IsTrue(Physics2D.DefaultRaycastLayers == -5); +#endif + } + +#if MLA_UNITY_PHYSICS_MODULE + // Use built-in tags + const string k_CubeTag = "Player"; + const string k_SphereTag = "Respawn"; + + [TearDown] + public void RemoveGameObjects() + { + var objects = GameObject.FindObjectsOfType(); + foreach (var o in objects) + { + UnityEngine.Object.DestroyImmediate(o); + } + } + + void SetupScene() + { + /* Creates game objects in the world for testing. + * C is a cube + * S are spheres + * @ is the agent (at the origin) + * Each space or line is 5 world units, +x is right, +z is up + * + * C + * S S + * @ + * + * S + */ + var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.transform.position = new Vector3(0, 0, 10); + cube.tag = k_CubeTag; + cube.name = "cube"; + + var sphere1 = GameObject.CreatePrimitive(PrimitiveType.Sphere); + sphere1.transform.position = new Vector3(-5, 0, 5); + sphere1.tag = k_SphereTag; + sphere1.name = "sphere1"; + + var sphere2 = GameObject.CreatePrimitive(PrimitiveType.Sphere); + sphere2.transform.position = new Vector3(5, 0, 5); + // No tag for sphere2 + sphere2.name = "sphere2"; + + var sphere3 = GameObject.CreatePrimitive(PrimitiveType.Sphere); + sphere3.transform.position = new Vector3(0, 0, -10); + sphere3.tag = k_SphereTag; + sphere3.name = "sphere3"; + + + Physics.SyncTransforms(); + } + + [Test] + public void TestRaycasts() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 1; + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add(k_CubeTag); + perception.DetectableTags.Add(k_SphereTag); + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var sensor = perception.CreateSensors()[0]; + sensor.Update(); + + var expectedObs = (2 * perception.RaysPerDirection + 1) * (perception.DetectableTags.Count + 2); + Assert.AreEqual(sensor.GetObservationSpec().Shape[0], expectedObs); + var outputBuffer = new float[expectedObs]; + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(outputBuffer, sensor.GetObservationSpec(), 0); + + var numWritten = sensor.Write(writer); + Assert.AreEqual(numWritten, expectedObs); + + // Expected hits: + // ray 0 should hit the cube at roughly halfway + // ray 1 should hit a sphere but no tag + // ray 2 should hit a sphere with the k_SphereTag tag + // The hit fraction should be the same for rays 1 and + // + Assert.AreEqual(1.0f, outputBuffer[0]); // hit cube + Assert.AreEqual(0.0f, outputBuffer[1]); // missed sphere + Assert.AreEqual(0.0f, outputBuffer[2]); // missed unknown tag + + // Hit is at z=9.0 in world space, ray length is 20 + Assert.That( + outputBuffer[3], Is.EqualTo((9.5f - castRadius) / perception.RayLength).Within(.0005f) + ); + + // Spheres are at 5,0,5 and 5,0,-5, so 5*sqrt(2) units from origin + // Minus 1.0 for the sphere radius to get the length of the hit. + var expectedHitLengthWorldSpace = 5.0f * Mathf.Sqrt(2.0f) - 0.5f - castRadius; + Assert.AreEqual(0.0f, outputBuffer[4]); // missed cube + Assert.AreEqual(0.0f, outputBuffer[5]); // missed sphere + Assert.AreEqual(0.0f, outputBuffer[6]); // hit unknown tag -> all 0 + Assert.That( + outputBuffer[7], Is.EqualTo(expectedHitLengthWorldSpace / perception.RayLength).Within(.0005f) + ); + + Assert.AreEqual(0.0f, outputBuffer[8]); // missed cube + Assert.AreEqual(1.0f, outputBuffer[9]); // hit sphere + Assert.AreEqual(0.0f, outputBuffer[10]); // missed unknown tag + Assert.That( + outputBuffer[11], Is.EqualTo(expectedHitLengthWorldSpace / perception.RayLength).Within(.0005f) + ); + } + } + + [Test] + public void TestRaycastMiss() + { + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 0; + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add(k_CubeTag); + perception.DetectableTags.Add(k_SphereTag); + + var sensor = perception.CreateSensors()[0]; + sensor.Update(); + var expectedObs = (2 * perception.RaysPerDirection + 1) * (perception.DetectableTags.Count + 2); + Assert.AreEqual(sensor.GetObservationSpec().Shape[0], expectedObs); + var outputBuffer = new float[expectedObs]; + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(outputBuffer, sensor.GetObservationSpec(), 0); + + var numWritten = sensor.Write(writer); + Assert.AreEqual(numWritten, expectedObs); + + // Everything missed + Assert.AreEqual(new float[] { 0, 0, 1, 1 }, outputBuffer); + } + + [Test] + public void TestRayFilter() + { + var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.transform.position = new Vector3(0, 0, 10); + cube.tag = k_CubeTag; + cube.name = "cubeFar"; + + var cubeFiltered = GameObject.CreatePrimitive(PrimitiveType.Cube); + cubeFiltered.transform.position = new Vector3(0, 0, 5); + cubeFiltered.tag = k_CubeTag; + cubeFiltered.name = "cubeNear"; + cubeFiltered.layer = 7; + + Physics.SyncTransforms(); + + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + perception.RaysPerDirection = 0; + perception.RayLength = 20; + perception.DetectableTags = new List(); + + var filterCubeLayers = new[] { false, true }; + foreach (var filterCubeLayer in filterCubeLayers) + { + // Set the layer mask to either the default, or one that ignores the close cube's layer + var layerMask = Physics.DefaultRaycastLayers; + if (filterCubeLayer) + { + layerMask &= ~(1 << cubeFiltered.layer); + } + perception.RayLayerMask = layerMask; + + var sensor = perception.CreateSensors()[0]; + sensor.Update(); + var expectedObs = (2 * perception.RaysPerDirection + 1) * (perception.DetectableTags.Count + 2); + Assert.AreEqual(sensor.GetObservationSpec().Shape[0], expectedObs); + var outputBuffer = new float[expectedObs]; + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(outputBuffer, sensor.GetObservationSpec(), 0); + + var numWritten = sensor.Write(writer); + Assert.AreEqual(numWritten, expectedObs); + + if (filterCubeLayer) + { + // Hit the far cube because close was filtered. + Assert.That(outputBuffer[outputBuffer.Length - 1], + Is.EqualTo((9.5f - perception.SphereCastRadius) / perception.RayLength).Within(.0005f) + ); + } + else + { + // Hit the close cube because not filtered. + Assert.That(outputBuffer[outputBuffer.Length - 1], + Is.EqualTo((4.5f - perception.SphereCastRadius) / perception.RayLength).Within(.0005f) + ); + } + } + } + + [Test] + public void TestRaycastsScaled() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + obj.transform.localScale = new Vector3(2, 2, 2); + + perception.RaysPerDirection = 0; + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add(k_CubeTag); + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var sensor = perception.CreateSensors()[0]; + sensor.Update(); + + var expectedObs = (2 * perception.RaysPerDirection + 1) * (perception.DetectableTags.Count + 2); + Assert.AreEqual(sensor.GetObservationSpec().Shape[0], expectedObs); + var outputBuffer = new float[expectedObs]; + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(outputBuffer, sensor.GetObservationSpec(), 0); + + var numWritten = sensor.Write(writer); + Assert.AreEqual(numWritten, expectedObs); + + // Expected hits: + // ray 0 should hit the cube at roughly 1/4 way + // + Assert.AreEqual(1.0f, outputBuffer[0]); // hit cube + Assert.AreEqual(0.0f, outputBuffer[1]); // missed unknown tag + + // Hit is at z=9.0 in world space, ray length was 20 + // But scale increases the cast size and the ray length + var scaledRayLength = 2 * perception.RayLength; + var scaledCastRadius = 2 * castRadius; + Assert.That( + outputBuffer[2], Is.EqualTo((9.5f - scaledCastRadius) / scaledRayLength).Within(.0005f) + ); + } + } + + [Test] + public void TestRayZeroLength() + { + // Place the cube touching the origin + var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.transform.position = new Vector3(0, 0, .5f); + cube.tag = k_CubeTag; + + Physics.SyncTransforms(); + + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + perception.RaysPerDirection = 0; + perception.RayLength = 0.0f; + perception.SphereCastRadius = .5f; + perception.DetectableTags = new List(); + perception.DetectableTags.Add(k_CubeTag); + + { + // Set the layer mask to either the default, or one that ignores the close cube's layer + + var sensor = perception.CreateSensors()[0]; + sensor.Update(); + var expectedObs = (2 * perception.RaysPerDirection + 1) * (perception.DetectableTags.Count + 2); + Assert.AreEqual(sensor.GetObservationSpec().Shape[0], expectedObs); + var outputBuffer = new float[expectedObs]; + + ObservationWriter writer = new ObservationWriter(); + writer.SetTarget(outputBuffer, sensor.GetObservationSpec(), 0); + + var numWritten = sensor.Write(writer); + Assert.AreEqual(numWritten, expectedObs); + + // hit fraction is arbitrary but should be finite in [0,1] + Assert.GreaterOrEqual(outputBuffer[2], 0.0f); + Assert.LessOrEqual(outputBuffer[2], 1.0f); + } + } + + [Test] + public void TestStaticPerceive() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 0; // single ray + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add(k_CubeTag); + perception.DetectableTags.Add(k_SphereTag); + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var castInput = perception.GetRayPerceptionInput(); + var castOutput = RayPerceptionSensor.Perceive(castInput, false); + + Assert.AreEqual(1, castOutput.RayOutputs.Length); + + // Expected to hit the cube + Assert.AreEqual("cube", castOutput.RayOutputs[0].HitGameObject.name); + Assert.AreEqual(0, castOutput.RayOutputs[0].HitTagIndex); + } + } + + [Test] + public void TestStaticPerceiveInvalidTags() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 0; // single ray + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add("Bad tag"); + perception.DetectableTags.Add(null); + perception.DetectableTags.Add(""); + perception.DetectableTags.Add(k_CubeTag); + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var castInput = perception.GetRayPerceptionInput(); + + // There's no clean way that I can find to check for a defined tag without + // logging an error. + LogAssert.Expect(LogType.Error, "Tag: Bad tag is not defined."); + var castOutput = RayPerceptionSensor.Perceive(castInput, false); + + Assert.AreEqual(1, castOutput.RayOutputs.Length); + + // Expected to hit the cube + Assert.AreEqual("cube", castOutput.RayOutputs[0].HitGameObject.name); + Assert.AreEqual(3, castOutput.RayOutputs[0].HitTagIndex); + } + } + + [Test] + public void TestStaticPerceiveNoTags() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 0; // single ray + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = null; + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var castInput = perception.GetRayPerceptionInput(); + var castOutput = RayPerceptionSensor.Perceive(castInput, false); + + Assert.AreEqual(1, castOutput.RayOutputs.Length); + + // Expected to hit the cube + Assert.AreEqual("cube", castOutput.RayOutputs[0].HitGameObject.name); + Assert.AreEqual(-1, castOutput.RayOutputs[0].HitTagIndex); + } + } + + [Test] + public void TestStaticBatchedPerceive() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 1; // three rays + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add(k_CubeTag); + perception.DetectableTags.Add(k_SphereTag); + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var castInput = perception.GetRayPerceptionInput(); + var castOutput = RayPerceptionSensor.Perceive(castInput, true); + + Assert.AreEqual(3, castOutput.RayOutputs.Length); + + // Expected to hit the cube + Assert.AreEqual("cube", castOutput.RayOutputs[0].HitGameObject.name); + Assert.AreEqual(0, castOutput.RayOutputs[0].HitTagIndex); + } + } + + [Test] + public void TestStaticPerceiveBatchedInvalidTags() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 0; // three rays + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = new List(); + perception.DetectableTags.Add("Bad tag"); + perception.DetectableTags.Add(null); + perception.DetectableTags.Add(""); + perception.DetectableTags.Add(k_CubeTag); + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var castInput = perception.GetRayPerceptionInput(); + + // There's no clean way that I can find to check for a defined tag without + // logging an error. + LogAssert.Expect(LogType.Error, "Tag: Bad tag is not defined."); + var castOutput = RayPerceptionSensor.Perceive(castInput, true); + + Assert.AreEqual(1, castOutput.RayOutputs.Length); + + // Expected to hit the cube + Assert.AreEqual("cube", castOutput.RayOutputs[0].HitGameObject.name); + Assert.AreEqual(3, castOutput.RayOutputs[0].HitTagIndex); + } + } + + [Test] + public void TestStaticPerceiveBatchedNoTags() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + perception.RaysPerDirection = 1; // single ray + perception.MaxRayDegrees = 45; + perception.RayLength = 20; + perception.DetectableTags = null; + + var radii = new[] { 0f, .5f }; + foreach (var castRadius in radii) + { + perception.SphereCastRadius = castRadius; + var castInput = perception.GetRayPerceptionInput(); + var castOutput = RayPerceptionSensor.Perceive(castInput, true); + + Assert.AreEqual(3, castOutput.RayOutputs.Length); + + // Expected to hit the cube + Assert.AreEqual("cube", castOutput.RayOutputs[0].HitGameObject.name); + Assert.AreEqual(-1, castOutput.RayOutputs[0].HitTagIndex); + } + } + + [Test] + public void TestCreateDefault() + { + SetupScene(); + var obj = new GameObject("agent"); + var perception = obj.AddComponent(); + + Assert.DoesNotThrow(() => + { + perception.CreateSensors(); + }); + } + +#endif + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/RayPerceptionSensorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/RayPerceptionSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..af64f98bfa778cee034105f8e6687da5f4824240 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/RayPerceptionSensorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d2983e2bca9a40398f287727dc0472a5 +timeCreated: 1573242741 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorComponentTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorComponentTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..c4dcc93ef572efb2e4ffd1e258e4fccd8606617b --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorComponentTests.cs @@ -0,0 +1,38 @@ +using System; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class RenderTextureSensorComponentTest + { + [Test] + public void TestRenderTextureSensorComponent() + { + foreach (var grayscale in new[] { true, false }) + { + foreach (SensorCompressionType compression in Enum.GetValues(typeof(SensorCompressionType))) + { + var width = 24; + var height = 16; + var texture = new RenderTexture(width, height, 0); + + var agentGameObj = new GameObject("agent"); + + var renderTexComponent = agentGameObj.AddComponent(); + renderTexComponent.RenderTexture = texture; + renderTexComponent.Grayscale = grayscale; + renderTexComponent.CompressionType = compression; + + var expectedShape = new InplaceArray(height, width, grayscale ? 1 : 3); + + var sensor = renderTexComponent.CreateSensors()[0]; + Assert.AreEqual(expectedShape, sensor.GetObservationSpec().Shape); + Assert.AreEqual(typeof(RenderTextureSensor), sensor.GetType()); + } + } + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorComponentTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorComponentTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0e4c37fa29ac53a0e6195e1c2684ac379f7e223f --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorComponentTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6be53c3cd01244f179a58c96560c54cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..767dd50de562ab85eae2e58c3631f53a4a9f4d9d --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorTests.cs @@ -0,0 +1,50 @@ +using System; +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class RenderTextureSensorTests + { + [Test] + public void TestRenderTextureSensor() + { + foreach (var grayscale in new[] { true, false }) + { + foreach (SensorCompressionType compression in Enum.GetValues(typeof(SensorCompressionType))) + { + var width = 24; + var height = 16; + var texture = new RenderTexture(width, height, 0); + var sensor = new RenderTextureSensor(texture, grayscale, "TestCameraSensor", compression); + + var obsWriter = new ObservationWriter(); + var obs = sensor.GetObservationProto(obsWriter); + + Assert.AreEqual((int)compression, (int)obs.CompressionType); + var expectedShape = new[] { height, width, grayscale ? 1 : 3 }; + Assert.AreEqual(expectedShape, obs.Shape); + } + } + } + + [Test] + public void TestObservationType() + { + var width = 24; + var height = 16; + var camera = Camera.main; + var sensor = new CameraSensor(camera, width, height, true, "TestCameraSensor", SensorCompressionType.None); + var spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.Default); + sensor = new CameraSensor(camera, width, height, true, "TestCameraSensor", SensorCompressionType.None, ObservationType.Default); + spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.Default); + sensor = new CameraSensor(camera, width, height, true, "TestCameraSensor", SensorCompressionType.None, ObservationType.GoalSignal); + spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.GoalSignal); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e73904f94fdd3a237c9adb9b1b34b22539bfea62 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/RenderTextureSensorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be9f7d8ce17d8407e92d46fbee2ab809 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SensorShapeValidatorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorShapeValidatorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..84b69b6172b97e0cb4a41f093c38c27cfbbcc802 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorShapeValidatorTests.cs @@ -0,0 +1,146 @@ +using System.Collections.Generic; +using System.Text.RegularExpressions; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + public class DummySensor : ISensor + { + string m_Name = "DummySensor"; + ObservationSpec m_ObservationSpec; + + public DummySensor(int dim1) + { + m_ObservationSpec = ObservationSpec.Vector(dim1); + } + + public DummySensor(int dim1, int dim2) + { + m_ObservationSpec = ObservationSpec.VariableLength(dim1, dim2); + } + + public DummySensor(int dim1, int dim2, int dim3) + { + m_ObservationSpec = ObservationSpec.Visual(dim1, dim2, dim3); + } + + public string GetName() + { + return m_Name; + } + + public ObservationSpec GetObservationSpec() + { + return m_ObservationSpec; + } + + public byte[] GetCompressedObservation() + { + return null; + } + + public int Write(ObservationWriter writer) + { + return this.ObservationSize(); + } + + public void Update() { } + public void Reset() { } + + public CompressionSpec GetCompressionSpec() + { + return CompressionSpec.Default(); + } + } + + public class SensorShapeValidatorTests + { + [Test] + public void TestShapesAgree() + { + var validator = new SensorShapeValidator(); + var sensorList1 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 6) }; + validator.ValidateSensors(sensorList1); + + var sensorList2 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 6) }; + validator.ValidateSensors(sensorList2); + } + + [Test] + public void TestNumSensorMismatch() + { + var validator = new SensorShapeValidator(); + var sensorList1 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 6) }; + validator.ValidateSensors(sensorList1); + + var sensorList2 = new List() { new DummySensor(1), new DummySensor(2, 3), }; + LogAssert.Expect(LogType.Assert, "Number of Sensors must match. 3 != 2"); + validator.ValidateSensors(sensorList2); + + // Add the sensors in the other order + validator = new SensorShapeValidator(); + validator.ValidateSensors(sensorList2); + LogAssert.Expect(LogType.Assert, "Number of Sensors must match. 2 != 3"); + validator.ValidateSensors(sensorList1); + } + + [Test] + public void TestDimensionMismatch() + { + var validator = new SensorShapeValidator(); + var sensorList1 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 6) }; + validator.ValidateSensors(sensorList1); + + var sensorList2 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5) }; + LogAssert.Expect(LogType.Assert, new Regex("Sensor shapes must match.*")); + validator.ValidateSensors(sensorList2); + + // Add the sensors in the other order + validator = new SensorShapeValidator(); + validator.ValidateSensors(sensorList2); + LogAssert.Expect(LogType.Assert, new Regex("Sensor shapes must match.*")); + validator.ValidateSensors(sensorList1); + } + + [Test] + public void TestSizeMismatch() + { + var validator = new SensorShapeValidator(); + var sensorList1 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 6) }; + validator.ValidateSensors(sensorList1); + + var sensorList2 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 7) }; + LogAssert.Expect(LogType.Assert, new Regex("Sensor shapes must match.*")); + validator.ValidateSensors(sensorList2); + + // Add the sensors in the other order + validator = new SensorShapeValidator(); + validator.ValidateSensors(sensorList2); + LogAssert.Expect(LogType.Assert, new Regex("Sensor shapes must match.*")); + validator.ValidateSensors(sensorList1); + } + + [Test] + public void TestEverythingMismatch() + { + var validator = new SensorShapeValidator(); + var sensorList1 = new List() { new DummySensor(1), new DummySensor(2, 3), new DummySensor(4, 5, 6) }; + validator.ValidateSensors(sensorList1); + + var sensorList2 = new List() { new DummySensor(1), new DummySensor(9) }; + LogAssert.Expect(LogType.Assert, "Number of Sensors must match. 3 != 2"); + LogAssert.Expect(LogType.Assert, new Regex("Sensor shapes must match.*")); + validator.ValidateSensors(sensorList2); + + // Add the sensors in the other order + validator = new SensorShapeValidator(); + validator.ValidateSensors(sensorList2); + LogAssert.Expect(LogType.Assert, "Number of Sensors must match. 2 != 3"); + LogAssert.Expect(LogType.Assert, new Regex("Sensor shapes must match.*")); + validator.ValidateSensors(sensorList1); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SensorShapeValidatorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorShapeValidatorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c538a8a74306feba7d0b8fdcdaccf34045753dfd --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorShapeValidatorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbfcd7a9de490454cbc37b8d7d900e7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SensorTestHelper.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorTestHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..208e0ade25b7c1d1221c7bf7ae18e4fa628745ca --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorTestHelper.cs @@ -0,0 +1,22 @@ +using NUnit.Framework; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + public static class SensorTestHelper + { + public static void CompareObservation(ISensor sensor, float[] expected) + { + string errorMessage; + bool isOK = SensorHelper.CompareObservation(sensor, expected, out errorMessage); + Assert.IsTrue(isOK, errorMessage); + } + + public static void CompareObservation(ISensor sensor, float[,,] expected) + { + string errorMessage; + bool isOK = SensorHelper.CompareObservation(sensor, expected, out errorMessage); + Assert.IsTrue(isOK, errorMessage); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SensorTestHelper.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorTestHelper.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..487ace557e93eb0967d1d7416d3bbb1399b79374 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorTestHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e769354f8bd404ca180d7cd7302a5d61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SensorUtilTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorUtilTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..ae1e190035d38b0248a7fff1a1814ded5615cf20 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorUtilTests.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using NUnit.Framework; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Utils.Tests; + +namespace Unity.MLAgents.Tests +{ + [TestFixture] + public class SensorUtilTests + { + internal class TempCulture : IDisposable + { + private CultureInfo m_OriginalCulture; + + internal TempCulture(CultureInfo newCulture) + { + m_OriginalCulture = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = newCulture; + } + + public void Dispose() + { + CultureInfo.CurrentCulture = m_OriginalCulture; + } + } + + /// + /// Test that sensors sort by name consistently across culture settings. + /// Example strings and cultures taken from + /// https://docs.microsoft.com/en-us/globalization/locale/sorting-and-string-comparison + /// + /// + [TestCase("da-DK")] + [TestCase("en-US")] + public void TestSortCulture(string culture) + { + List sensors = new List(); + var sensor0 = new TestSensor("Apple"); + var sensor1 = new TestSensor("Æble"); + sensors.Add(sensor0); + sensors.Add(sensor1); + + var originalCulture = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = new CultureInfo(culture); + SensorUtils.SortSensors(sensors); + CultureInfo.CurrentCulture = originalCulture; + + Assert.AreEqual(sensor1, sensors[0]); + Assert.AreEqual(sensor0, sensors[1]); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SensorUtilTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorUtilTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9e661ce9c687a3b402cf719a587f34feb97895b --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SensorUtilTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 929b34a718bc42c8aa75a3e1c8c11103 +timeCreated: 1617049947 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SimpleTestGridSensor.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/SimpleTestGridSensor.cs new file mode 100644 index 0000000000000000000000000000000000000000..eb576d8f78ad4d19a30c3668835e2ba2418376f8 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SimpleTestGridSensor.cs @@ -0,0 +1,141 @@ +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + public static class TestGridSensorConfig + { + public static int ObservationSize; + public static bool IsNormalized; + public static bool ParseAllColliders; + + public static void SetParameters(int observationSize, bool isNormalized, bool parseAllColliders) + { + ObservationSize = observationSize; + IsNormalized = isNormalized; + ParseAllColliders = parseAllColliders; + } + + public static void Reset() + { + ObservationSize = 0; + IsNormalized = false; + ParseAllColliders = false; + } + } + + public class SimpleTestGridSensor : GridSensorBase + { + public float[] DummyData; + + public SimpleTestGridSensor( + string name, + Vector3 cellScale, + Vector3Int gridSize, + string[] detectableTags, + SensorCompressionType compression + ) : base( + name, + cellScale, + gridSize, + detectableTags, + compression) + { } + + protected override int GetCellObservationSize() + { + return TestGridSensorConfig.ObservationSize; + } + + protected override bool IsDataNormalized() + { + return TestGridSensorConfig.IsNormalized; + } + + protected internal override ProcessCollidersMethod GetProcessCollidersMethod() + { + return TestGridSensorConfig.ParseAllColliders ? ProcessCollidersMethod.ProcessAllColliders : ProcessCollidersMethod.ProcessClosestColliders; + } + + protected override void GetObjectData(GameObject detectedObject, int typeIndex, float[] dataBuffer) + { + for (var i = 0; i < DummyData.Length; i++) + { + dataBuffer[i] = DummyData[i]; + } + } + } + + public class SimpleTestGridSensorComponent : GridSensorComponent + { + bool m_UseOneHotTag; + bool m_UseTestingGridSensor; + bool m_UseGridSensorBase; + + protected override GridSensorBase[] GetGridSensors() + { + List sensorList = new List(); + if (m_UseOneHotTag) + { + var testSensor = new OneHotGridSensor( + SensorName, + CellScale, + GridSize, + DetectableTags, + CompressionType + ); + sensorList.Add(testSensor); + } + if (m_UseGridSensorBase) + { + var testSensor = new GridSensorBase( + SensorName, + CellScale, + GridSize, + DetectableTags, + CompressionType + ); + sensorList.Add(testSensor); + } + if (m_UseTestingGridSensor) + { + var testSensor = new SimpleTestGridSensor( + SensorName, + CellScale, + GridSize, + DetectableTags, + CompressionType + ); + sensorList.Add(testSensor); + } + return sensorList.ToArray(); + } + + public void SetComponentParameters( + string[] detectableTags = null, + float cellScaleX = 1f, + float cellScaleZ = 1f, + int gridSizeX = 10, + int gridSizeY = 1, + int gridSizeZ = 10, + int colliderMaskInt = -1, + SensorCompressionType compression = SensorCompressionType.None, + bool rotateWithAgent = false, + bool useOneHotTag = false, + bool useTestingGridSensor = false, + bool useGridSensorBase = false + ) + { + DetectableTags = detectableTags; + CellScale = new Vector3(cellScaleX, 0.01f, cellScaleZ); + GridSize = new Vector3Int(gridSizeX, gridSizeY, gridSizeZ); + ColliderMask = colliderMaskInt < 0 ? LayerMask.GetMask("Default") : colliderMaskInt; + RotateWithAgent = rotateWithAgent; + CompressionType = compression; + m_UseOneHotTag = useOneHotTag; + m_UseGridSensorBase = useGridSensorBase; + m_UseTestingGridSensor = useTestingGridSensor; + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/SimpleTestGridSensor.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/SimpleTestGridSensor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..233b23c8d51e4f404217aab37f3e37050a373687 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/SimpleTestGridSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72f121528c63749688e53aa926f2cb0a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/StackingSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/StackingSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..5cd81ac2b00e2246a51ec4e421e319445e51b6a5 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/StackingSensorTests.cs @@ -0,0 +1,294 @@ +using NUnit.Framework; +using System; +using System.Linq; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using UnityEngine; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Utils.Tests; + +namespace Unity.MLAgents.Tests +{ + public class StackingSensorTests + { + [SetUp] + public void SetUp() + { + if (Academy.IsInitialized) + { + Academy.Instance.Dispose(); + } + + Academy.Instance.AutomaticSteppingEnabled = false; + } + + [TearDown] + public void TearDown() + { + CommunicatorFactory.ClearCreator(); + } + + [Test] + public void TestCtor() + { + ISensor wrapped = new VectorSensor(4); + ISensor sensor = new StackingSensor(wrapped, 4); + Assert.AreEqual("StackingSensor_size4_VectorSensor_size4", sensor.GetName()); + Assert.AreEqual(sensor.GetObservationSpec().Shape, new InplaceArray(16)); + } + + [Test] + public void AssertStackingReset() + { + var agentGo1 = new GameObject("TestAgent"); + var bp1 = agentGo1.AddComponent(); + bp1.BrainParameters.NumStackedVectorObservations = 3; + bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); + var aca = Academy.Instance; + var agent1 = agentGo1.AddComponent(); + var policy = new TestPolicy(); + agent1.SetPolicy(policy); + + StackingSensor sensor = null; + foreach (ISensor s in agent1.sensors) + { + if (s is StackingSensor) + { + sensor = s as StackingSensor; + } + } + + Assert.NotNull(sensor); + + for (int i = 0; i < 20; i++) + { + agent1.RequestDecision(); + aca.EnvironmentStep(); + } + SensorTestHelper.CompareObservation(sensor, new[] { 18f, 19f, 20f }); + policy.OnRequestDecision = () => SensorTestHelper.CompareObservation(sensor, new[] { 19f, 20f, 21f }); + agent1.EndEpisode(); + policy.OnRequestDecision = () => { }; + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f }); + for (int i = 0; i < 20; i++) + { + agent1.RequestDecision(); + aca.EnvironmentStep(); + SensorTestHelper.CompareObservation(sensor, new[] { Math.Max(0, i - 1f), i, i + 1 }); + } + } + + [Test] + public void TestVectorStacking() + { + VectorSensor wrapped = new VectorSensor(2); + StackingSensor sensor = new StackingSensor(wrapped, 3); + + wrapped.AddObservation(new[] { 1f, 2f }); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f, 0f, 1f, 2f }); + var data = sensor.GetStackedObservations(); + Assert.IsTrue(data.ToArray().SequenceEqual(new[] { 0f, 0f, 0f, 0f, 1f, 2f })); + + sensor.Update(); + wrapped.AddObservation(new[] { 3f, 4f }); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 1f, 2f, 3f, 4f }); + data = sensor.GetStackedObservations(); + Assert.IsTrue(data.ToArray().SequenceEqual(new[] { 0f, 0f, 1f, 2f, 3f, 4f })); + + sensor.Update(); + wrapped.AddObservation(new[] { 5f, 6f }); + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f, 3f, 4f, 5f, 6f }); + data = sensor.GetStackedObservations(); + Assert.IsTrue(data.ToArray().SequenceEqual(new[] { 1f, 2f, 3f, 4f, 5f, 6f })); + + sensor.Update(); + wrapped.AddObservation(new[] { 7f, 8f }); + SensorTestHelper.CompareObservation(sensor, new[] { 3f, 4f, 5f, 6f, 7f, 8f }); + data = sensor.GetStackedObservations(); + Assert.IsTrue(data.ToArray().SequenceEqual(new[] { 3f, 4f, 5f, 6f, 7f, 8f })); + + sensor.Update(); + wrapped.AddObservation(new[] { 9f, 10f }); + SensorTestHelper.CompareObservation(sensor, new[] { 5f, 6f, 7f, 8f, 9f, 10f }); + data = sensor.GetStackedObservations(); + Assert.IsTrue(data.ToArray().SequenceEqual(new[] { 5f, 6f, 7f, 8f, 9f, 10f })); + + // Check that if we don't call Update(), the same observations are produced + SensorTestHelper.CompareObservation(sensor, new[] { 5f, 6f, 7f, 8f, 9f, 10f }); + data = sensor.GetStackedObservations(); + Assert.IsTrue(data.ToArray().SequenceEqual(new[] { 5f, 6f, 7f, 8f, 9f, 10f })); + } + + [Test] + public void TestVectorStackingReset() + { + VectorSensor wrapped = new VectorSensor(2); + ISensor sensor = new StackingSensor(wrapped, 3); + + wrapped.AddObservation(new[] { 1f, 2f }); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f, 0f, 1f, 2f }); + + sensor.Update(); + wrapped.AddObservation(new[] { 3f, 4f }); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 1f, 2f, 3f, 4f }); + + sensor.Reset(); + wrapped.AddObservation(new[] { 5f, 6f }); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f, 0f, 5f, 6f }); + } + + class Dummy3DSensor : ISensor + { + public SensorCompressionType CompressionType = SensorCompressionType.PNG; + public int[] Mapping; + public ObservationSpec ObservationSpec; + public float[,,] CurrentObservation; + + public ObservationSpec GetObservationSpec() + { + return ObservationSpec; + } + + public int Write(ObservationWriter writer) + { + for (var h = 0; h < ObservationSpec.Shape[0]; h++) + { + for (var w = 0; w < ObservationSpec.Shape[1]; w++) + { + for (var c = 0; c < ObservationSpec.Shape[2]; c++) + { + writer[h, w, c] = CurrentObservation[h, w, c]; + } + } + } + return ObservationSpec.Shape[0] * ObservationSpec.Shape[1] * ObservationSpec.Shape[2]; + } + + public byte[] GetCompressedObservation() + { + var writer = new ObservationWriter(); + var flattenedObservation = new float[ObservationSpec.Shape[0] * ObservationSpec.Shape[1] * ObservationSpec.Shape[2]]; + writer.SetTarget(flattenedObservation, ObservationSpec.Shape, 0); + Write(writer); + byte[] bytes = Array.ConvertAll(flattenedObservation, (z) => (byte)z); + return bytes; + } + + public void Update() { } + + public void Reset() { } + + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(CompressionType, Mapping); + } + + public string GetName() + { + return "Dummy"; + } + } + + [Test] + public void TestStackingMapping() + { + // Test grayscale stacked mapping with CameraSensor + var cameraSensor = new CameraSensor(new Camera(), 64, 64, + true, "grayscaleCamera", SensorCompressionType.PNG); + var stackedCameraSensor = new StackingSensor(cameraSensor, 2); + Assert.AreEqual(stackedCameraSensor.GetCompressionSpec().CompressedChannelMapping, new[] { 0, 0, 0, 1, 1, 1 }); + + // Test RGB stacked mapping with RenderTextureSensor + var renderTextureSensor = new RenderTextureSensor(new RenderTexture(24, 16, 0), + false, "renderTexture", SensorCompressionType.PNG); + var stackedRenderTextureSensor = new StackingSensor(renderTextureSensor, 2); + Assert.AreEqual(stackedRenderTextureSensor.GetCompressionSpec().CompressedChannelMapping, new[] { 0, 1, 2, 3, 4, 5 }); + + // Test mapping with number of layers not being multiple of 3 + var dummySensor = new Dummy3DSensor(); + dummySensor.ObservationSpec = ObservationSpec.Visual(2, 2, 4); + dummySensor.Mapping = new[] { 0, 1, 2, 3 }; + var stackedDummySensor = new StackingSensor(dummySensor, 2); + Assert.AreEqual(stackedDummySensor.GetCompressionSpec().CompressedChannelMapping, new[] { 0, 1, 2, 3, -1, -1, 4, 5, 6, 7, -1, -1 }); + + // Test mapping with dummy layers that should be dropped + var paddedDummySensor = new Dummy3DSensor(); + paddedDummySensor.ObservationSpec = ObservationSpec.Visual(2, 2, 4); + paddedDummySensor.Mapping = new[] { 0, 1, 2, 3, -1, -1 }; + var stackedPaddedDummySensor = new StackingSensor(paddedDummySensor, 2); + Assert.AreEqual(stackedPaddedDummySensor.GetCompressionSpec().CompressedChannelMapping, new[] { 0, 1, 2, 3, -1, -1, 4, 5, 6, 7, -1, -1 }); + } + + [Test] + public void Test3DStacking() + { + var wrapped = new Dummy3DSensor(); + wrapped.ObservationSpec = ObservationSpec.Visual(2, 1, 2); + var sensor = new StackingSensor(wrapped, 2); + + // Check the stacking is on the last dimension + wrapped.CurrentObservation = new[, ,] { { { 1f, 2f } }, { { 3f, 4f } } }; + SensorTestHelper.CompareObservation(sensor, new[, ,] { { { 0f, 0f, 1f, 2f } }, { { 0f, 0f, 3f, 4f } } }); + + sensor.Update(); + wrapped.CurrentObservation = new[, ,] { { { 5f, 6f } }, { { 7f, 8f } } }; + SensorTestHelper.CompareObservation(sensor, new[, ,] { { { 1f, 2f, 5f, 6f } }, { { 3f, 4f, 7f, 8f } } }); + + sensor.Update(); + wrapped.CurrentObservation = new[, ,] { { { 9f, 10f } }, { { 11f, 12f } } }; + SensorTestHelper.CompareObservation(sensor, new[, ,] { { { 5f, 6f, 9f, 10f } }, { { 7f, 8f, 11f, 12f } } }); + + // Check that if we don't call Update(), the same observations are produced + SensorTestHelper.CompareObservation(sensor, new[, ,] { { { 5f, 6f, 9f, 10f } }, { { 7f, 8f, 11f, 12f } } }); + + // Test reset + sensor.Reset(); + wrapped.CurrentObservation = new[, ,] { { { 13f, 14f } }, { { 15f, 16f } } }; + SensorTestHelper.CompareObservation(sensor, new[, ,] { { { 0f, 0f, 13f, 14f } }, { { 0f, 0f, 15f, 16f } } }); + } + + [Test] + public void TestStackedGetCompressedObservation() + { + var wrapped = new Dummy3DSensor(); + wrapped.ObservationSpec = ObservationSpec.Visual(1, 1, 3); + var sensor = new StackingSensor(wrapped, 2); + + wrapped.CurrentObservation = new[, ,] { { { 1f, 2f, 3f } } }; + var expected1 = sensor.CreateEmptyPNG(); + expected1 = expected1.Concat(Array.ConvertAll(new[] { 1f, 2f, 3f }, (z) => (byte)z)).ToArray(); + Assert.AreEqual(sensor.GetCompressedObservation(), expected1); + + sensor.Update(); + wrapped.CurrentObservation = new[, ,] { { { 4f, 5f, 6f } } }; + var expected2 = Array.ConvertAll(new[] { 1f, 2f, 3f, 4f, 5f, 6f }, (z) => (byte)z); + Assert.AreEqual(sensor.GetCompressedObservation(), expected2); + + sensor.Update(); + wrapped.CurrentObservation = new[, ,] { { { 7f, 8f, 9f } } }; + var expected3 = Array.ConvertAll(new[] { 4f, 5f, 6f, 7f, 8f, 9f }, (z) => (byte)z); + Assert.AreEqual(sensor.GetCompressedObservation(), expected3); + + // Test reset + sensor.Reset(); + wrapped.CurrentObservation = new[, ,] { { { 10f, 11f, 12f } } }; + var expected4 = sensor.CreateEmptyPNG(); + expected4 = expected4.Concat(Array.ConvertAll(new[] { 10f, 11f, 12f }, (z) => (byte)z)).ToArray(); + Assert.AreEqual(sensor.GetCompressedObservation(), expected4); + } + + [Test] + public void TestStackingSensorBuiltInSensorType() + { + var dummySensor = new Dummy3DSensor(); + dummySensor.ObservationSpec = ObservationSpec.Visual(2, 2, 4); + dummySensor.Mapping = new[] { 0, 1, 2, 3 }; + var stackedDummySensor = new StackingSensor(dummySensor, 2); + Assert.AreEqual(stackedDummySensor.GetBuiltInSensorType(), BuiltInSensorType.Unknown); + + var vectorSensor = new VectorSensor(4); + var stackedVectorSensor = new StackingSensor(vectorSensor, 4); + Assert.AreEqual(stackedVectorSensor.GetBuiltInSensorType(), BuiltInSensorType.VectorSensor); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/StackingSensorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/StackingSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b275e379277eb954280454fb7631b9d1ef1c6799 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/StackingSensorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7b071fdf91474d18a05ea20175c6b3bd +timeCreated: 1572564843 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/Unity.ML-Agents.Runtime.Sensor.Tests.asmdef b/com.unity.ml-agents/Tests/Runtime/Sensor/Unity.ML-Agents.Runtime.Sensor.Tests.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..d779451c40d38467d370ced501d48d4d5fbc6721 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/Unity.ML-Agents.Runtime.Sensor.Tests.asmdef @@ -0,0 +1,37 @@ +{ + "name": "Unity.ML-Agents.Runtime.Sensor.Tests", + "references": [ + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects", + "Unity.ML-Agents.Runtime.Utils.Tests" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll", + "Google.Protobuf.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [ + { + "name": "com.unity.modules.physics", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS_MODULE" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS2D_MODULE" + } + ] +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/Unity.ML-Agents.Runtime.Sensor.Tests.asmdef.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/Unity.ML-Agents.Runtime.Sensor.Tests.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..2b92b0bbb24658f3ef2d9fd45f7f7eb4f3e3dfc2 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/Unity.ML-Agents.Runtime.Sensor.Tests.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 917f332e7ad944428f0246683188de8f +timeCreated: 1616137285 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/VectorSensorTests.cs b/com.unity.ml-agents/Tests/Runtime/Sensor/VectorSensorTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..f58606e99c268041977730cbbc82885d7901cd10 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/VectorSensorTests.cs @@ -0,0 +1,131 @@ +using NUnit.Framework; +using UnityEngine; +using Unity.MLAgents.Sensors; + +namespace Unity.MLAgents.Tests +{ + public class VectorSensorTests + { + [Test] + public void TestCtor() + { + ISensor sensor = new VectorSensor(4); + Assert.AreEqual("VectorSensor_size4", sensor.GetName()); + + sensor = new VectorSensor(3, "test_sensor"); + Assert.AreEqual("test_sensor", sensor.GetName()); + } + + [Test] + public void TestWrite() + { + var sensor = new VectorSensor(4); + sensor.AddObservation(1f); + sensor.AddObservation(2f); + sensor.AddObservation(3f); + sensor.AddObservation(4f); + + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f, 3f, 4f }); + // Check that if we don't call Update(), the same observations are produced + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f, 3f, 4f }); + + // Check that Update() clears the data + sensor.Update(); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f, 0f }); + } + + [Test] + public void TestAddObservationFloat() + { + var sensor = new VectorSensor(1); + sensor.AddObservation(1.2f); + SensorTestHelper.CompareObservation(sensor, new[] { 1.2f }); + } + + [Test] + public void TestObservationType() + { + var sensor = new VectorSensor(1); + var spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.Default); + sensor = new VectorSensor(1, observationType: ObservationType.Default); + spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.Default); + sensor = new VectorSensor(1, observationType: ObservationType.GoalSignal); + spec = sensor.GetObservationSpec(); + Assert.AreEqual((int)spec.ObservationType, (int)ObservationType.GoalSignal); + } + + [Test] + public void TestAddObservationInt() + { + var sensor = new VectorSensor(1); + sensor.AddObservation(42); + SensorTestHelper.CompareObservation(sensor, new[] { 42f }); + } + + [Test] + public void TestAddObservationVec() + { + var sensor = new VectorSensor(3); + sensor.AddObservation(new Vector3(1, 2, 3)); + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f, 3f }); + + sensor = new VectorSensor(2); + sensor.AddObservation(new Vector2(4, 5)); + SensorTestHelper.CompareObservation(sensor, new[] { 4f, 5f }); + } + + [Test] + public void TestAddObservationQuaternion() + { + var sensor = new VectorSensor(4); + sensor.AddObservation(Quaternion.identity); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f, 1f }); + } + + [Test] + public void TestWriteEnumerable() + { + var sensor = new VectorSensor(4); + sensor.AddObservation(new[] { 1f, 2f, 3f, 4f }); + + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f, 3f, 4f }); + } + + [Test] + public void TestAddObservationBool() + { + var sensor = new VectorSensor(1); + sensor.AddObservation(true); + SensorTestHelper.CompareObservation(sensor, new[] { 1f }); + } + + [Test] + public void TestAddObservationOneHot() + { + var sensor = new VectorSensor(4); + sensor.AddOneHotObservation(2, 4); + SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 1f, 0f }); + } + + [Test] + public void TestWriteTooMany() + { + var sensor = new VectorSensor(2); + sensor.AddObservation(new[] { 1f, 2f, 3f, 4f }); + + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f }); + } + + [Test] + public void TestWriteNotEnough() + { + var sensor = new VectorSensor(4); + sensor.AddObservation(new[] { 1f, 2f }); + + // Make sure extra zeros are added + SensorTestHelper.CompareObservation(sensor, new[] { 1f, 2f, 0f, 0f }); + } + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Sensor/VectorSensorTests.cs.meta b/com.unity.ml-agents/Tests/Runtime/Sensor/VectorSensorTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..05c14f9206f9eeb8494d9216710fc91dc3011839 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Sensor/VectorSensorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18c0d390ce4c5464ab48b96db0392eb0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Unity.ML-Agents.Runtime.Tests.asmdef b/com.unity.ml-agents/Tests/Runtime/Unity.ML-Agents.Runtime.Tests.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..b740695c2addd907a778fb268daa82b27d1a2087 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Unity.ML-Agents.Runtime.Tests.asmdef @@ -0,0 +1,37 @@ +{ + "name": "Unity.ML-Agents.Runtime.Tests", + "references": [ + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects", + "Unity.ML-Agents.Editor" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll", + "Google.Protobuf.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [ + { + "name": "com.unity.modules.physics", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS_MODULE" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "1.0.0", + "define": "MLA_UNITY_PHYSICS2D_MODULE" + } + ] +} diff --git a/com.unity.ml-agents/Tests/Runtime/Unity.ML-Agents.Runtime.Tests.asmdef.meta b/com.unity.ml-agents/Tests/Runtime/Unity.ML-Agents.Runtime.Tests.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..4fa9a793f6f01f7e3b1ae805efb6beb932becd57 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Unity.ML-Agents.Runtime.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d29014db7ebcd4cf4a14f537fbf02110 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/Tests/Runtime/Utils.meta b/com.unity.ml-agents/Tests/Runtime/Utils.meta new file mode 100644 index 0000000000000000000000000000000000000000..412c47bbf60dfd168ae10544fc6da83f0750e8f6 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Utils.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e4c1564ff83a4d51855e5b5b461f6a59 +timeCreated: 1616137685 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Utils/TestClasses.cs b/com.unity.ml-agents/Tests/Runtime/Utils/TestClasses.cs new file mode 100644 index 0000000000000000000000000000000000000000..f17b88279e3da3d4351d10485ecc1d22ed3ed4b3 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Utils/TestClasses.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Policies; +using Unity.MLAgents.Sensors; +using Unity.MLAgents.Sensors.Reflection; + +[assembly: InternalsVisibleTo("Unity.ML-Agents.Editor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Runtime.Sensor.Tests")] +[assembly: InternalsVisibleTo("Unity.ML-Agents.Extensions.EditorTests")] + +namespace Unity.MLAgents.Utils.Tests +{ + internal class TestPolicy : IPolicy + { + public Action OnRequestDecision; + ObservationWriter m_ObsWriter = new ObservationWriter(); + static ActionSpec s_ActionSpec = ActionSpec.MakeContinuous(1); + static ActionBuffers s_EmptyActionBuffers = new ActionBuffers(new float[1], Array.Empty()); + + public void RequestDecision(AgentInfo info, List sensors) + { + foreach (var sensor in sensors) + { + sensor.GetObservationProto(m_ObsWriter); + } + OnRequestDecision?.Invoke(); + } + + public ref readonly ActionBuffers DecideAction() { return ref s_EmptyActionBuffers; } + + public void Dispose() { } + } + + public class TestAgent : Agent + { + internal AgentInfo _Info + { + get + { + return (AgentInfo)typeof(Agent).GetField("m_Info", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + set + { + typeof(Agent).GetField("m_Info", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, value); + } + } + + internal void SetPolicy(IPolicy policy) + { + typeof(Agent).GetField("m_Brain", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, policy); + } + + internal IPolicy GetPolicy() + { + return (IPolicy)typeof(Agent).GetField("m_Brain", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); + } + + public int initializeAgentCalls; + public int collectObservationsCalls; + public int collectObservationsCallsForEpisode; + public int agentActionCalls; + public int agentActionCallsForEpisode; + public int agentOnEpisodeBeginCalls; + public int heuristicCalls; + public TestSensor sensor1; + public TestSensor sensor2; + + [Observable("observableFloat")] + public float observableFloat; + + public override void Initialize() + { + initializeAgentCalls += 1; + + // Add in some custom Sensors so we can confirm they get sorted as expected. + sensor1 = new TestSensor("testsensor1"); + sensor2 = new TestSensor("testsensor2"); + sensor2.compressionType = SensorCompressionType.PNG; + + sensors.Add(sensor2); + sensors.Add(sensor1); + } + + public override void CollectObservations(VectorSensor sensor) + { + collectObservationsCalls += 1; + collectObservationsCallsForEpisode += 1; + sensor.AddObservation(collectObservationsCallsForEpisode); + } + + public override void OnActionReceived(ActionBuffers buffers) + { + agentActionCalls += 1; + agentActionCallsForEpisode += 1; + AddReward(0.1f); + } + + public override void OnEpisodeBegin() + { + agentOnEpisodeBeginCalls += 1; + collectObservationsCallsForEpisode = 0; + agentActionCallsForEpisode = 0; + } + + public override void Heuristic(in ActionBuffers actionsOut) + { + var obs = GetObservations(); + var continuousActions = actionsOut.ContinuousActions; + continuousActions[0] = (int)obs[0]; + heuristicCalls++; + } + } + + public class TestSensor : ISensor + { + public string sensorName; + public int numWriteCalls; + public int numCompressedCalls; + public int numResetCalls; + public SensorCompressionType compressionType = SensorCompressionType.None; + + public TestSensor(string n) + { + sensorName = n; + } + + public ObservationSpec GetObservationSpec() + { + return ObservationSpec.Vector(0); + } + + public int Write(ObservationWriter writer) + { + numWriteCalls++; + // No-op + return 0; + } + + public byte[] GetCompressedObservation() + { + numCompressedCalls++; + return new byte[] { 0 }; + } + + public CompressionSpec GetCompressionSpec() + { + return new CompressionSpec(compressionType); + } + + public string GetName() + { + return sensorName; + } + + public void Update() { } + + public void Reset() + { + numResetCalls++; + } + } + + public class TestClasses + { + } +} diff --git a/com.unity.ml-agents/Tests/Runtime/Utils/TestClasses.cs.meta b/com.unity.ml-agents/Tests/Runtime/Utils/TestClasses.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a7cb7f2276cbd0d703c3d6137b1af97a8dd00995 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Utils/TestClasses.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 329ca71a721948a9a64a7b3b48604058 +timeCreated: 1616137640 \ No newline at end of file diff --git a/com.unity.ml-agents/Tests/Runtime/Utils/Unity.ML-Agents.Runtime.Utils.Tests.asmdef b/com.unity.ml-agents/Tests/Runtime/Utils/Unity.ML-Agents.Runtime.Utils.Tests.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..0827203bcc8c2ad423a11adfdc96888acb4416de --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Utils/Unity.ML-Agents.Runtime.Utils.Tests.asmdef @@ -0,0 +1,24 @@ +{ + "name": "Unity.ML-Agents.Runtime.Utils.Tests", + "references": [ + "Unity.ML-Agents", + "Unity.Barracuda", + "Unity.ML-Agents.CommunicatorObjects" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "System.IO.Abstractions.dll", + "System.IO.Abstractions.TestingHelpers.dll", + "Google.Protobuf.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ] +} diff --git a/com.unity.ml-agents/Tests/Runtime/Utils/Unity.ML-Agents.Runtime.Utils.Tests.asmdef.meta b/com.unity.ml-agents/Tests/Runtime/Utils/Unity.ML-Agents.Runtime.Utils.Tests.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..cf380bec780e8448fb35d86d87d663678f6bf187 --- /dev/null +++ b/com.unity.ml-agents/Tests/Runtime/Utils/Unity.ML-Agents.Runtime.Utils.Tests.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: daaa01096d9848a38185ee08fa7321c0 +timeCreated: 1616137694 \ No newline at end of file diff --git a/com.unity.ml-agents/Third Party Notices.md b/com.unity.ml-agents/Third Party Notices.md new file mode 100644 index 0000000000000000000000000000000000000000..fc124fc4686e6281445b560da7d9d80af2956bb2 --- /dev/null +++ b/com.unity.ml-agents/Third Party Notices.md @@ -0,0 +1,381 @@ +This package contains third-party software components governed by the license(s) indicated below: + --------- + + Component Name: System.Buffers.dll + + License Type: MIT + + The MIT License (MIT) + + Copyright (c) .NET Foundation and Contributors + + All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + --------- + +Component Name: System.Numerics.Vectors.dll + +License Type: MIT + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + --------- + +Component Name: System.Runtime.CompilerServices.Unsafe + +License Type: MIT + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + --------- + +Component Name: System.Memory.dll + +License Type: MIT + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + --------- + +Component Name: System.IO.Abstractions + +License Type: MIT + +The MIT License (MIT) + +Copyright (c) Tatham Oddie and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + --------- + +Component Name: System.Interactive.Async.dll + +License Type: Apache-2.0 + +Copyright (c) .NET Foundation and Contributors +All Rights Reserved + +Licensed under the Apache License, Version 2.0 (the "License"); you +may not use this file except in compliance with the License. You may +obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing permissions +and limitations under the License. + + --------- + +Component Name: Grpc + +License Type: Apache-2.0 + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/com.unity.ml-agents/Third Party Notices.md.meta b/com.unity.ml-agents/Third Party Notices.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..00901a06669262e4882035a342e9ce557e75b084 --- /dev/null +++ b/com.unity.ml-agents/Third Party Notices.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3fb7f1407083340b8921a0520b2d8870 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/catalog-info.yaml b/com.unity.ml-agents/catalog-info.yaml new file mode 100644 index 0000000000000000000000000000000000000000..67d98bb424adb34120c7c201ea7c984177dac8f4 --- /dev/null +++ b/com.unity.ml-agents/catalog-info.yaml @@ -0,0 +1,21 @@ +# For more information about the available options please visit: http://go/backstage (VPN required) +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + annotations: + github.com/project-slug: unity/com.unity.ml-agents + name: com.unity.ml-agents + description: "Unity ML-Agents Package" + labels: + costcenter: "5160" + tags: + - planned-public + - enterprise + links: + - url: https://unity.slack.com/messages/C8FECS6L9/ + title: "#devs-ml-agents" + icon: chat +spec: + type: unity-package + lifecycle: production + owner: unity/behavior-authoring diff --git a/com.unity.ml-agents/catalog-info.yaml.meta b/com.unity.ml-agents/catalog-info.yaml.meta new file mode 100644 index 0000000000000000000000000000000000000000..15b7d888e506fb67fd36e6dbaafb87c8773d10f6 --- /dev/null +++ b/com.unity.ml-agents/catalog-info.yaml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7d543dec1acb6455fb97a799ca89315c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/com.unity.ml-agents.sln.DotSettings b/com.unity.ml-agents/com.unity.ml-agents.sln.DotSettings new file mode 100644 index 0000000000000000000000000000000000000000..76282484bb531419a543e79e75c71368868dce5d --- /dev/null +++ b/com.unity.ml-agents/com.unity.ml-agents.sln.DotSettings @@ -0,0 +1,21 @@ + + BLAS + CPU + GPU + NN + PNG + RL + True + True + True + + + True + True + True + True + True + True + True + True + True diff --git a/com.unity.ml-agents/com.unity.ml-agents.sln.DotSettings.meta b/com.unity.ml-agents/com.unity.ml-agents.sln.DotSettings.meta new file mode 100644 index 0000000000000000000000000000000000000000..ee052ef017083076258de6d073b46ba517476b76 --- /dev/null +++ b/com.unity.ml-agents/com.unity.ml-agents.sln.DotSettings.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c8f6f0111d3fb4d71af892263a7a614d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ml-agents/package.json b/com.unity.ml-agents/package.json new file mode 100644 index 0000000000000000000000000000000000000000..2bfab776d9f99b2c1d000bd122a71fe60b753a78 --- /dev/null +++ b/com.unity.ml-agents/package.json @@ -0,0 +1,13 @@ +{ + "name": "com.unity.ml-agents", + "displayName": "ML Agents", + "version": "2.3.0-exp.4", + "unity": "2022.3", + "description": "Use state-of-the-art machine learning to create intelligent character behaviors in any Unity environment (games, robotics, film, etc.).", + "dependencies": { + "com.unity.barracuda": "3.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0" + } +} diff --git a/com.unity.ml-agents/package.json.meta b/com.unity.ml-agents/package.json.meta new file mode 100644 index 0000000000000000000000000000000000000000..d76c84a5faffd8f5c34ca71b704bdfb2ef49239d --- /dev/null +++ b/com.unity.ml-agents/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e13b73fbfc8e74e4d87af46bf55d7df6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/config.json b/config.json new file mode 100644 index 0000000000000000000000000000000000000000..412634e4c38e3f06dc7a230670f0d6445be25aa9 --- /dev/null +++ b/config.json @@ -0,0 +1 @@ +{"behaviors": {"Pyramids": {"trainer_type": "ppo", "hyperparameters": {"batch_size": 128, "buffer_size": 2048, "learning_rate": 0.0003, "beta": 0.01, "epsilon": 0.2, "lambd": 0.95, "num_epoch": 3, "learning_rate_schedule": "linear"}, "network_settings": {"normalize": false, "hidden_units": 512, "num_layers": 2, "vis_encode_type": "simple"}, "reward_signals": {"extrinsic": {"gamma": 0.99, "strength": 1.0}, "rnd": {"gamma": 0.99, "strength": 0.01, "network_settings": {"hidden_units": 64, "num_layers": 3}, "learning_rate": 0.0001}}, "keep_checkpoints": 5, "max_steps": 100000, "time_horizon": 128, "summary_freq": 30000}}} \ No newline at end of file diff --git a/config/imitation/Crawler.yaml b/config/imitation/Crawler.yaml new file mode 100644 index 0000000000000000000000000000000000000000..88a38b3efb89a0b260d37511cb1d80029028cfcb --- /dev/null +++ b/config/imitation/Crawler.yaml @@ -0,0 +1,39 @@ +behaviors: + Crawler: + trainer_type: ppo + hyperparameters: + batch_size: 2024 + buffer_size: 20240 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 512 + num_layers: 3 + vis_encode_type: simple + reward_signals: + gail: + gamma: 0.99 + strength: 1.0 + network_settings: + normalize: true + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + learning_rate: 0.0003 + use_actions: false + use_vail: false + demo_path: Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo + keep_checkpoints: 5 + max_steps: 10000000 + time_horizon: 1000 + summary_freq: 30000 + behavioral_cloning: + demo_path: Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo + steps: 50000 + strength: 0.5 + samples_per_update: 0 diff --git a/config/imitation/Hallway.yaml b/config/imitation/Hallway.yaml new file mode 100644 index 0000000000000000000000000000000000000000..60c45877fcbe0df220e2ed0df6ae58039892008d --- /dev/null +++ b/config/imitation/Hallway.yaml @@ -0,0 +1,35 @@ +behaviors: + Hallway: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 1024 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + memory: + sequence_length: 64 + memory_size: 256 + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + gail: + gamma: 0.99 + strength: 0.01 + learning_rate: 0.0003 + use_actions: false + use_vail: false + demo_path: Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo + keep_checkpoints: 5 + max_steps: 10000000 + time_horizon: 64 + summary_freq: 10000 diff --git a/config/imitation/PushBlock.yaml b/config/imitation/PushBlock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..42f39d1f8a57f6edcf9bc35e7b9c3f12c9f4602e --- /dev/null +++ b/config/imitation/PushBlock.yaml @@ -0,0 +1,42 @@ +behaviors: + PushBlock: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + gail: + gamma: 0.99 + strength: 0.01 + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + learning_rate: 0.0003 + use_actions: false + use_vail: false + demo_path: Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo + keep_checkpoints: 5 + max_steps: 100000 + time_horizon: 64 + summary_freq: 60000 + behavioral_cloning: + demo_path: Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPushBlock.demo + steps: 50000 + strength: 1.0 + samples_per_update: 0 diff --git a/config/imitation/Pyramids.yaml b/config/imitation/Pyramids.yaml new file mode 100644 index 0000000000000000000000000000000000000000..813a4e54a7c76f91dbdb40f8d990d73d96e45f1a --- /dev/null +++ b/config/imitation/Pyramids.yaml @@ -0,0 +1,34 @@ +behaviors: + Pyramids: + trainer_type: ppo + time_horizon: 128 + max_steps: 1.0e7 + hyperparameters: + batch_size: 128 + beta: 0.01 + buffer_size: 2048 + epsilon: 0.2 + lambd: 0.95 + learning_rate: 0.0003 + num_epoch: 3 + network_settings: + num_layers: 2 + normalize: false + hidden_units: 512 + reward_signals: + extrinsic: + strength: 1.0 + gamma: 0.99 + curiosity: + strength: 0.02 + gamma: 0.99 + network_settings: + hidden_units: 256 + gail: + strength: 0.01 + gamma: 0.99 + demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo + behavioral_cloning: + demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo + strength: 0.5 + steps: 150000 diff --git a/config/poca/DungeonEscape.yaml b/config/poca/DungeonEscape.yaml new file mode 100644 index 0000000000000000000000000000000000000000..49542ebc367d5027aadb4d50dff172b7bee7c50d --- /dev/null +++ b/config/poca/DungeonEscape.yaml @@ -0,0 +1,25 @@ +behaviors: + DungeonEscape: + trainer_type: poca + hyperparameters: + batch_size: 1024 + buffer_size: 10240 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 20000000 + time_horizon: 64 + summary_freq: 60000 diff --git a/config/poca/PushBlockCollab.yaml b/config/poca/PushBlockCollab.yaml new file mode 100644 index 0000000000000000000000000000000000000000..df77d1c6c0f2b7368ac93e06cacc685e9ae6a2d7 --- /dev/null +++ b/config/poca/PushBlockCollab.yaml @@ -0,0 +1,25 @@ +behaviors: + PushBlockCollab: + trainer_type: poca + hyperparameters: + batch_size: 1024 + buffer_size: 10240 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 15000000 + time_horizon: 64 + summary_freq: 60000 diff --git a/config/poca/SoccerTwos.yaml b/config/poca/SoccerTwos.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cf658aa22565e52a06f87d264fd534f638d7ed87 --- /dev/null +++ b/config/poca/SoccerTwos.yaml @@ -0,0 +1,32 @@ +behaviors: + SoccerTwos: + trainer_type: poca + hyperparameters: + batch_size: 2048 + buffer_size: 20480 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: false + hidden_units: 512 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 50000000 + time_horizon: 1000 + summary_freq: 10000 + self_play: + save_steps: 50000 + team_change: 200000 + swap_steps: 2000 + window: 10 + play_against_latest_model_ratio: 0.5 + initial_elo: 1200.0 diff --git a/config/poca/StrikersVsGoalie.yaml b/config/poca/StrikersVsGoalie.yaml new file mode 100644 index 0000000000000000000000000000000000000000..56facaee0ed4e611701ebf9250aca0c9deeb7a65 --- /dev/null +++ b/config/poca/StrikersVsGoalie.yaml @@ -0,0 +1,63 @@ +behaviors: + Goalie: + trainer_type: poca + hyperparameters: + batch_size: 2048 + buffer_size: 20480 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: false + hidden_units: 512 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 30000000 + time_horizon: 1000 + summary_freq: 10000 + self_play: + save_steps: 50000 + team_change: 200000 + swap_steps: 1000 + window: 10 + play_against_latest_model_ratio: 0.5 + initial_elo: 1200.0 + Striker: + trainer_type: poca + hyperparameters: + batch_size: 2048 + buffer_size: 20480 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: false + hidden_units: 512 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 30000000 + time_horizon: 1000 + summary_freq: 10000 + self_play: + save_steps: 50000 + team_change: 200000 + swap_steps: 4000 + window: 10 + play_against_latest_model_ratio: 0.5 + initial_elo: 1200.0 diff --git a/config/ppo/3DBall.yaml b/config/ppo/3DBall.yaml new file mode 100644 index 0000000000000000000000000000000000000000..031806270b4f545575c4ab8126fbcfc7a91991a6 --- /dev/null +++ b/config/ppo/3DBall.yaml @@ -0,0 +1,25 @@ +behaviors: + 3DBall: + trainer_type: ppo + hyperparameters: + batch_size: 64 + buffer_size: 12000 + learning_rate: 0.0003 + beta: 0.001 + epsilon: 0.2 + lambd: 0.99 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 1000 + summary_freq: 12000 diff --git a/config/ppo/3DBallHard.yaml b/config/ppo/3DBallHard.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5e9a5a62620dd9bc9ba02a546477cbc3f68caeb7 --- /dev/null +++ b/config/ppo/3DBallHard.yaml @@ -0,0 +1,25 @@ +behaviors: + 3DBallHard: + trainer_type: ppo + hyperparameters: + batch_size: 120 + buffer_size: 12000 + learning_rate: 0.0003 + beta: 0.001 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 1000 + summary_freq: 12000 diff --git a/config/ppo/3DBall_randomize.yaml b/config/ppo/3DBall_randomize.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ec76b0aec17c9e968e1d82d39455f79a76116c69 --- /dev/null +++ b/config/ppo/3DBall_randomize.yaml @@ -0,0 +1,36 @@ +behaviors: + 3DBall: + trainer_type: ppo + hyperparameters: + batch_size: 64 + buffer_size: 12000 + learning_rate: 0.0003 + beta: 0.001 + epsilon: 0.2 + lambd: 0.99 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 1000 + summary_freq: 12000 +environment_parameters: + mass: + sampler_type: uniform + sampler_parameters: + min_value: 0.5 + max_value: 10 + scale: + sampler_type: uniform + sampler_parameters: + min_value: 0.75 + max_value: 3 diff --git a/config/ppo/Basic.yaml b/config/ppo/Basic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ece4f5e185ac083e6aadf62c97363fdb837913f3 --- /dev/null +++ b/config/ppo/Basic.yaml @@ -0,0 +1,25 @@ +behaviors: + Basic: + trainer_type: ppo + hyperparameters: + batch_size: 32 + buffer_size: 256 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 20 + num_layers: 1 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.9 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 3 + summary_freq: 2000 diff --git a/config/ppo/Crawler.yaml b/config/ppo/Crawler.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e69256c1d0c6c2067ad9dd78cb26703c9788b6c9 --- /dev/null +++ b/config/ppo/Crawler.yaml @@ -0,0 +1,25 @@ +behaviors: + Crawler: + trainer_type: ppo + hyperparameters: + batch_size: 2048 + buffer_size: 20480 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 512 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 10000000 + time_horizon: 1000 + summary_freq: 30000 diff --git a/config/ppo/FoodCollector.yaml b/config/ppo/FoodCollector.yaml new file mode 100644 index 0000000000000000000000000000000000000000..36b018e900fd5609f2b0bd3849ac564e84f26706 --- /dev/null +++ b/config/ppo/FoodCollector.yaml @@ -0,0 +1,25 @@ +behaviors: + GridFoodCollector: + trainer_type: ppo + hyperparameters: + batch_size: 1024 + buffer_size: 10240 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 1 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 2000000 + time_horizon: 64 + summary_freq: 10000 diff --git a/config/ppo/GridWorld.yaml b/config/ppo/GridWorld.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ebe80cf7a2d2b793153a082e42477185447bfbe9 --- /dev/null +++ b/config/ppo/GridWorld.yaml @@ -0,0 +1,25 @@ +behaviors: + GridWorld: + trainer_type: ppo + hyperparameters: + batch_size: 32 + buffer_size: 256 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 128 + num_layers: 1 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.9 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 5 + summary_freq: 20000 diff --git a/config/ppo/Hallway.yaml b/config/ppo/Hallway.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3dae7cfe7c93ff0bf9905c4845953564833945bf --- /dev/null +++ b/config/ppo/Hallway.yaml @@ -0,0 +1,28 @@ +behaviors: + Hallway: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 1024 + learning_rate: 0.0003 + beta: 0.03 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + memory: + sequence_length: 64 + memory_size: 128 + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 10000000 + time_horizon: 64 + summary_freq: 10000 diff --git a/config/ppo/Match3.yaml b/config/ppo/Match3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..379e8bf3e87120035ac23072c91149484db02ed4 --- /dev/null +++ b/config/ppo/Match3.yaml @@ -0,0 +1,48 @@ +default_settings: + trainer_type: ppo + hyperparameters: + batch_size: 16 + buffer_size: 120 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.99 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: true + hidden_units: 256 + num_layers: 4 + vis_encode_type: match3 + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 128 + summary_freq: 10000 + +behaviors: + Match3SimpleHeuristic: + # Settings can be very simple since we don't care about actually training the model + trainer_type: ppo + hyperparameters: + batch_size: 16 + buffer_size: 120 + network_settings: + hidden_units: 4 + num_layers: 1 + max_steps: 5000000 + summary_freq: 10000 + Match3SmartHeuristic: + # Settings can be very simple since we don't care about actually training the model + trainer_type: ppo + hyperparameters: + batch_size: 16 + buffer_size: 120 + network_settings: + hidden_units: 4 + num_layers: 1 + max_steps: 5000000 + summary_freq: 10000 diff --git a/config/ppo/PushBlock.yaml b/config/ppo/PushBlock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3f648d5be75f9838dba301a4b5e452486dbf8b82 --- /dev/null +++ b/config/ppo/PushBlock.yaml @@ -0,0 +1,25 @@ +behaviors: + PushBlock: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 2000000 + time_horizon: 64 + summary_freq: 60000 diff --git a/config/ppo/Pyramids.yaml b/config/ppo/Pyramids.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8aedc9c8e84b335b22b4f3c7ad790b5813a69d96 --- /dev/null +++ b/config/ppo/Pyramids.yaml @@ -0,0 +1,31 @@ +behaviors: + Pyramids: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 512 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + curiosity: + gamma: 0.99 + strength: 0.02 + network_settings: + hidden_units: 256 + learning_rate: 0.0003 + keep_checkpoints: 5 + max_steps: 10000000 + time_horizon: 128 + summary_freq: 30000 diff --git a/config/ppo/PyramidsRND.yaml b/config/ppo/PyramidsRND.yaml new file mode 100644 index 0000000000000000000000000000000000000000..622413ac6534d7786e0d899b9a47b361949d75d8 --- /dev/null +++ b/config/ppo/PyramidsRND.yaml @@ -0,0 +1,32 @@ +behaviors: + Pyramids: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.01 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 512 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + rnd: + gamma: 0.99 + strength: 0.01 + network_settings: + hidden_units: 64 + num_layers: 3 + learning_rate: 0.0001 + keep_checkpoints: 5 + max_steps: 100000 + time_horizon: 128 + summary_freq: 30000 diff --git a/config/ppo/Sorter_curriculum.yaml b/config/ppo/Sorter_curriculum.yaml new file mode 100644 index 0000000000000000000000000000000000000000..131d950d6a4125aa88e14660ee5897d42318c835 --- /dev/null +++ b/config/ppo/Sorter_curriculum.yaml @@ -0,0 +1,102 @@ +behaviors: + Sorter: + trainer_type: ppo + hyperparameters: + batch_size: 512 + buffer_size: 40960 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: constant + network_settings: + normalize: False + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 256 + summary_freq: 10000 +environment_parameters: + num_tiles: + curriculum: + - name: Lesson0 # The '-' is important as this is a list + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.3 + value: 2.0 + - name: Lesson1 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.4 + value: 4.0 + - name: Lesson2 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.45 + value: 6.0 + - name: Lesson3 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.5 + value: 8.0 + - name: Lesson4 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.55 + value: 10.0 + - name: Lesson5 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.6 + value: 12.0 + - name: Lesson6 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.65 + value: 14.0 + - name: Lesson7 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.7 + value: 16.0 + - name: Lesson8 + completion_criteria: + measure: progress + behavior: Sorter + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.75 + value: 18.0 + - name: Lesson9 + value: 20.0 diff --git a/config/ppo/Visual3DBall.yaml b/config/ppo/Visual3DBall.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cc72c57aa4ecd87d567baf7d880e24140e0fa7f8 --- /dev/null +++ b/config/ppo/Visual3DBall.yaml @@ -0,0 +1,25 @@ +behaviors: + Visual3DBall: + trainer_type: ppo + hyperparameters: + batch_size: 256 + buffer_size: 2560 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 400000 + time_horizon: 64 + summary_freq: 20000 diff --git a/config/ppo/VisualFoodCollector.yaml b/config/ppo/VisualFoodCollector.yaml new file mode 100644 index 0000000000000000000000000000000000000000..be7af9a5033a3e198837f29e7a9319a08c5fc148 --- /dev/null +++ b/config/ppo/VisualFoodCollector.yaml @@ -0,0 +1,25 @@ +behaviors: + VisualFoodCollector: + trainer_type: ppo + hyperparameters: + batch_size: 1024 + buffer_size: 10240 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 3000000 + time_horizon: 100 + summary_freq: 40000 diff --git a/config/ppo/Walker.yaml b/config/ppo/Walker.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0ba1ecae54bd3ad1c7b55c4be9569c21195bcb0e --- /dev/null +++ b/config/ppo/Walker.yaml @@ -0,0 +1,25 @@ +behaviors: + Walker: + trainer_type: ppo + hyperparameters: + batch_size: 2048 + buffer_size: 20480 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 256 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 30000000 + time_horizon: 1000 + summary_freq: 30000 diff --git a/config/ppo/WallJump.yaml b/config/ppo/WallJump.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5d853d8b49585d16249d6ec1dc28426ee5bc9dd3 --- /dev/null +++ b/config/ppo/WallJump.yaml @@ -0,0 +1,49 @@ +behaviors: + BigWallJump: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 20000000 + time_horizon: 128 + summary_freq: 20000 + SmallWallJump: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 128 + summary_freq: 20000 diff --git a/config/ppo/WallJump_curriculum.yaml b/config/ppo/WallJump_curriculum.yaml new file mode 100644 index 0000000000000000000000000000000000000000..441d7a76df90f5193384d343b92d4c627c08a794 --- /dev/null +++ b/config/ppo/WallJump_curriculum.yaml @@ -0,0 +1,118 @@ +behaviors: + BigWallJump: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 20000000 + time_horizon: 128 + summary_freq: 20000 + SmallWallJump: + trainer_type: ppo + hyperparameters: + batch_size: 128 + buffer_size: 2048 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 128 + summary_freq: 20000 +environment_parameters: + big_wall_height: + curriculum: + - name: Lesson0 # The '-' is important as this is a list + completion_criteria: + measure: progress + behavior: BigWallJump + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.1 + value: + sampler_type: uniform + sampler_parameters: + min_value: 0.0 + max_value: 4.0 + - name: Lesson1 # This is the start of the second lesson + completion_criteria: + measure: progress + behavior: BigWallJump + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.3 + value: + sampler_type: uniform + sampler_parameters: + min_value: 4.0 + max_value: 7.0 + - name: Lesson2 + completion_criteria: + measure: progress + behavior: BigWallJump + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.5 + value: + sampler_type: uniform + sampler_parameters: + min_value: 6.0 + max_value: 8.0 + - name: Lesson3 + value: 8.0 + small_wall_height: + curriculum: + - name: Lesson0 + completion_criteria: + measure: progress + behavior: SmallWallJump + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.1 + value: 1.5 + - name: Lesson1 + completion_criteria: + measure: progress + behavior: SmallWallJump + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.3 + value: 2.0 + - name: Lesson2 + completion_criteria: + measure: progress + behavior: SmallWallJump + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.5 + value: 2.5 + - name: Lesson3 + value: 4.0 diff --git a/config/ppo/Worm.yaml b/config/ppo/Worm.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0fcebcd09fb836cc331270b302cd91ff831d1700 --- /dev/null +++ b/config/ppo/Worm.yaml @@ -0,0 +1,25 @@ +behaviors: + Worm: + trainer_type: ppo + hyperparameters: + batch_size: 2024 + buffer_size: 20240 + learning_rate: 0.0003 + beta: 0.005 + epsilon: 0.2 + lambd: 0.95 + num_epoch: 3 + learning_rate_schedule: linear + network_settings: + normalize: true + hidden_units: 512 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 7000000 + time_horizon: 1000 + summary_freq: 30000 diff --git a/config/sac/3DBall.yaml b/config/sac/3DBall.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9d0f3cd51d37c1c88aac5f69eda4047a1030b8c6 --- /dev/null +++ b/config/sac/3DBall.yaml @@ -0,0 +1,27 @@ +behaviors: + 3DBall: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 64 + buffer_size: 200000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.5 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: true + hidden_units: 64 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 200000 + time_horizon: 1000 + summary_freq: 12000 diff --git a/config/sac/3DBallHard.yaml b/config/sac/3DBallHard.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c0b75fbfee73ee960d93c9c32f74fc2c2fe19dc9 --- /dev/null +++ b/config/sac/3DBallHard.yaml @@ -0,0 +1,27 @@ +behaviors: + 3DBallHard: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 256 + buffer_size: 500000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 1.0 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: true + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 1000 + summary_freq: 12000 diff --git a/config/sac/Basic.yaml b/config/sac/Basic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2f80abc280b16d5d8bfac5cf112e76ead690f3bb --- /dev/null +++ b/config/sac/Basic.yaml @@ -0,0 +1,27 @@ +behaviors: + Basic: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 64 + buffer_size: 50000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.01 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 20 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 10 + summary_freq: 2000 diff --git a/config/sac/Crawler.yaml b/config/sac/Crawler.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fbf37919883aec50ccf7997554d1ca1401720e49 --- /dev/null +++ b/config/sac/Crawler.yaml @@ -0,0 +1,27 @@ +behaviors: + Crawler: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 256 + buffer_size: 500000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 20.0 + save_replay_buffer: false + init_entcoef: 1.0 + reward_signal_steps_per_update: 20.0 + network_settings: + normalize: true + hidden_units: 512 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 1000 + summary_freq: 30000 diff --git a/config/sac/FoodCollector.yaml b/config/sac/FoodCollector.yaml new file mode 100644 index 0000000000000000000000000000000000000000..de02369f0e0f24a7c2628596c81e8bf8b379ef51 --- /dev/null +++ b/config/sac/FoodCollector.yaml @@ -0,0 +1,28 @@ +behaviors: + GridFoodCollector: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 256 + buffer_size: 2048 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.05 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 256 + num_layers: 1 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 2000000 + time_horizon: 64 + summary_freq: 60000 + threaded: false diff --git a/config/sac/GridWorld.yaml b/config/sac/GridWorld.yaml new file mode 100644 index 0000000000000000000000000000000000000000..80c27c0c4b2d3b4cdf941415430d5f6862fe1853 --- /dev/null +++ b/config/sac/GridWorld.yaml @@ -0,0 +1,27 @@ +behaviors: + GridWorld: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 128 + buffer_size: 50000 + buffer_init_steps: 1000 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.5 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 128 + num_layers: 1 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.9 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 500000 + time_horizon: 5 + summary_freq: 20000 diff --git a/config/sac/Hallway.yaml b/config/sac/Hallway.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3952f4667b00be68bc6824b20418bd3b76f80fd5 --- /dev/null +++ b/config/sac/Hallway.yaml @@ -0,0 +1,30 @@ +behaviors: + Hallway: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 512 + buffer_size: 200000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.1 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + vis_encode_type: simple + memory: + sequence_length: 64 + memory_size: 128 + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 4000000 + time_horizon: 64 + summary_freq: 10000 diff --git a/config/sac/PushBlock.yaml b/config/sac/PushBlock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..617cd0e95508ca4559653813ec3952e11a7b6d3e --- /dev/null +++ b/config/sac/PushBlock.yaml @@ -0,0 +1,27 @@ +behaviors: + PushBlock: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 128 + buffer_size: 50000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.05 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 2000000 + time_horizon: 64 + summary_freq: 100000 diff --git a/config/sac/Pyramids.yaml b/config/sac/Pyramids.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ab6566f753d25e664c42f0258f482d94abe33dd8 --- /dev/null +++ b/config/sac/Pyramids.yaml @@ -0,0 +1,34 @@ +behaviors: + Pyramids: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 128 + buffer_size: 2000000 + buffer_init_steps: 1000 + tau: 0.01 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.01 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 512 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 2.0 + gail: + gamma: 0.99 + strength: 0.01 + learning_rate: 0.0003 + use_actions: true + use_vail: false + demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo + keep_checkpoints: 5 + max_steps: 3000000 + time_horizon: 128 + summary_freq: 30000 diff --git a/config/sac/Walker.yaml b/config/sac/Walker.yaml new file mode 100644 index 0000000000000000000000000000000000000000..55990f43b1b46b924bb2f511e6cded9adca2a2a0 --- /dev/null +++ b/config/sac/Walker.yaml @@ -0,0 +1,27 @@ +behaviors: + Walker: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 1024 + buffer_size: 2000000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 30.0 + save_replay_buffer: false + init_entcoef: 1.0 + reward_signal_steps_per_update: 30.0 + network_settings: + normalize: true + hidden_units: 256 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 15000000 + time_horizon: 1000 + summary_freq: 30000 diff --git a/config/sac/WallJump.yaml b/config/sac/WallJump.yaml new file mode 100644 index 0000000000000000000000000000000000000000..590fe611825ef6d111ba19b482204cba98c4c465 --- /dev/null +++ b/config/sac/WallJump.yaml @@ -0,0 +1,53 @@ +behaviors: + BigWallJump: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 128 + buffer_size: 200000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 20.0 + save_replay_buffer: false + init_entcoef: 0.1 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 15000000 + time_horizon: 128 + summary_freq: 20000 + SmallWallJump: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 128 + buffer_size: 50000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 20.0 + save_replay_buffer: false + init_entcoef: 0.1 + reward_signal_steps_per_update: 10.0 + network_settings: + normalize: false + hidden_units: 256 + num_layers: 2 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 128 + summary_freq: 20000 diff --git a/config/sac/Worm.yaml b/config/sac/Worm.yaml new file mode 100644 index 0000000000000000000000000000000000000000..879c95d8c415b67d655aa3af76663f4385cee697 --- /dev/null +++ b/config/sac/Worm.yaml @@ -0,0 +1,27 @@ +behaviors: + Worm: + trainer_type: sac + hyperparameters: + learning_rate: 0.0003 + learning_rate_schedule: constant + batch_size: 256 + buffer_size: 500000 + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 20.0 + save_replay_buffer: false + init_entcoef: 1.0 + reward_signal_steps_per_update: 20.0 + network_settings: + normalize: true + hidden_units: 512 + num_layers: 3 + vis_encode_type: simple + reward_signals: + extrinsic: + gamma: 0.995 + strength: 1.0 + keep_checkpoints: 5 + max_steps: 5000000 + time_horizon: 1000 + summary_freq: 30000 diff --git a/configuration.yaml b/configuration.yaml index cff3bc25a6adad89a250d52fdf404dc23d2cdd96..622413ac6534d7786e0d899b9a47b361949d75d8 100644 --- a/configuration.yaml +++ b/configuration.yaml @@ -27,6 +27,6 @@ behaviors: num_layers: 3 learning_rate: 0.0001 keep_checkpoints: 5 - max_steps: 1000000 + max_steps: 100000 time_horizon: 128 summary_freq: 30000 diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..846ff868c7202e9a031316c525c6e8c284acbce8 --- /dev/null +++ b/conftest.py @@ -0,0 +1,84 @@ +""" +This module provides the 'base_port' pytest fixture for mlagents tests. + +This is useful because each mlagents environment requires a unique port to communicate over and will fail on collisions. +Normally this would prevent tests from being run in parallel but with the help of this fixture we can guarantee every +test gets the ports it needs. + +See the base_port function for usage details. +""" +import tempfile +from pathlib import Path + +import pytest +from filelock import FileLock + +# TODO: Use this in all ml-agents tests so they can all run in parallel. +import mlagents.plugins.trainer_type + +_BASE_PORT = 6005 + + +# Hook for xdist +# https://github.com/ohmu/pytest-xdist/blob/master/xdist/newhooks.py +def pytest_testnodeready(): + PortAllocator().setup_once_per_node() + + +class PortAllocator: + """ + WARNING: Should only be used within this file. + Handles handing out unique ports to tests that need ports to test. + Shares state between parallel tests on the same node via a text file and lockfile. + Should only be used through the base_port test fixture. + """ + + def __init__(self): + self._port_alloc_file_path: Path = ( + Path(tempfile.gettempdir()) / "next_mla_test_port.txt" + ) + self._port_alloc_lock_path: Path = self._port_alloc_file_path.with_suffix( + ".lock" + ) + self.lock = FileLock(str(self._port_alloc_lock_path)) + + def reserve_n_ports(self, n: int) -> int: + with self.lock: + if self._port_alloc_file_path.is_file(): + base_port = int(self._port_alloc_file_path.read_text()) + else: + base_port = 6005 + self._port_alloc_file_path.write_text(str(base_port + n)) + return base_port + + def setup_once_per_node(self) -> None: + """ + Clean up state files from previous runs, shoud only be called once per node. + Intended to only be called via xdist hooks. + """ + # TODO: Use .unlink(missing_ok=True) once python 3.8 is min version. + if self._port_alloc_lock_path.exists(): + self._port_alloc_lock_path.unlink() + if self._port_alloc_file_path.exists(): + self._port_alloc_file_path.unlink() + + +@pytest.fixture +def base_port(n_ports: int) -> int: + """ + Reserve a range of ports for testing (allows parallel testing even with envs). + Usage: + @pytest.mark.parametrize("n_ports", [2]) + def test_something(base_port: int) -> None: + do_something(base_port) + do_something(base_port + 1) + :param _port_allocator: The global port allocator (custom pytest fixture). + :param n_ports: The number of ports needed. + :return: The base port number. + """ + return PortAllocator().reserve_n_ports(n_ports) + + +@pytest.fixture(scope="session", autouse=True) +def setup_plugin_trainers(): + _, _ = mlagents.plugins.trainer_type.register_trainer_plugins() diff --git a/docs/API-Reference.md b/docs/API-Reference.md new file mode 100644 index 0000000000000000000000000000000000000000..556fbc8b5d6f41e208476d3b5aad306d1a7f88ed --- /dev/null +++ b/docs/API-Reference.md @@ -0,0 +1,20 @@ +# API Reference + +Our developer-facing C# classes have been documented to be compatible with +Doxygen for auto-generating HTML documentation. + +To generate the API reference, download Doxygen and run the following command +within the `docs/` directory: + +```sh +doxygen dox-ml-agents.conf +``` + +`dox-ml-agents.conf` is a Doxygen configuration file for the ML-Agents Toolkit +that includes the classes that have been properly formatted. The generated HTML +files will be placed in the `html/` subdirectory. Open `index.html` within that +subdirectory to navigate to the API reference home. Note that `html/` is already +included in the repository's `.gitignore` file. + +In the near future, we aim to expand our documentation to include the Python +classes. diff --git a/docs/Background-Machine-Learning.md b/docs/Background-Machine-Learning.md new file mode 100644 index 0000000000000000000000000000000000000000..58c8b2f838addb8741249b492e81c3a8b9e0d82c --- /dev/null +++ b/docs/Background-Machine-Learning.md @@ -0,0 +1,195 @@ +# Background: Machine Learning + +Given that a number of users of the ML-Agents Toolkit might not have a formal +machine learning background, this page provides an overview to facilitate the +understanding of the ML-Agents Toolkit. However, we will not attempt to provide +a thorough treatment of machine learning as there are fantastic resources +online. + +Machine learning, a branch of artificial intelligence, focuses on learning +patterns from data. The three main classes of machine learning algorithms +include: unsupervised learning, supervised learning and reinforcement learning. +Each class of algorithm learns from a different type of data. The following +paragraphs provide an overview for each of these classes of machine learning, as +well as introductory examples. + +## Unsupervised Learning + +The goal of +[unsupervised learning](https://en.wikipedia.org/wiki/Unsupervised_learning) is +to group or cluster similar items in a data set. For example, consider the +players of a game. We may want to group the players depending on how engaged +they are with the game. This would enable us to target different groups (e.g. +for highly-engaged players we might invite them to be beta testers for new +features, while for unengaged players we might email them helpful tutorials). +Say that we wish to split our players into two groups. We would first define +basic attributes of the players, such as the number of hours played, total money +spent on in-app purchases and number of levels completed. We can then feed this +data set (three attributes for every player) to an unsupervised learning +algorithm where we specify the number of groups to be two. The algorithm would +then split the data set of players into two groups where the players within each +group would be similar to each other. Given the attributes we used to describe +each player, in this case, the output would be a split of all the players into +two groups, where one group would semantically represent the engaged players and +the second group would semantically represent the unengaged players. + +With unsupervised learning, we did not provide specific examples of which +players are considered engaged and which are considered unengaged. We just +defined the appropriate attributes and relied on the algorithm to uncover the +two groups on its own. This type of data set is typically called an unlabeled +data set as it is lacking these direct labels. Consequently, unsupervised +learning can be helpful in situations where these labels can be expensive or +hard to produce. In the next paragraph, we overview supervised learning +algorithms which accept input labels in addition to attributes. + +## Supervised Learning + +In [supervised learning](https://en.wikipedia.org/wiki/Supervised_learning), we +do not want to just group similar items but directly learn a mapping from each +item to the group (or class) that it belongs to. Returning to our earlier +example of clustering players, let's say we now wish to predict which of our +players are about to churn (that is stop playing the game for the next 30 days). +We can look into our historical records and create a data set that contains +attributes of our players in addition to a label indicating whether they have +churned or not. Note that the player attributes we use for this churn prediction +task may be different from the ones we used for our earlier clustering task. We +can then feed this data set (attributes **and** label for each player) into a +supervised learning algorithm which would learn a mapping from the player +attributes to a label indicating whether that player will churn or not. The +intuition is that the supervised learning algorithm will learn which values of +these attributes typically correspond to players who have churned and not +churned (for example, it may learn that players who spend very little and play +for very short periods will most likely churn). Now given this learned model, we +can provide it the attributes of a new player (one that recently started playing +the game) and it would output a _predicted_ label for that player. This +prediction is the algorithms expectation of whether the player will churn or +not. We can now use these predictions to target the players who are expected to +churn and entice them to continue playing the game. + +As you may have noticed, for both supervised and unsupervised learning, there +are two tasks that need to be performed: attribute selection and model +selection. Attribute selection (also called feature selection) pertains to +selecting how we wish to represent the entity of interest, in this case, the +player. Model selection, on the other hand, pertains to selecting the algorithm +(and its parameters) that perform the task well. Both of these tasks are active +areas of machine learning research and, in practice, require several iterations +to achieve good performance. + +We now switch to reinforcement learning, the third class of machine learning +algorithms, and arguably the one most relevant for the ML-Agents Toolkit. + +## Reinforcement Learning + +[Reinforcement learning](https://en.wikipedia.org/wiki/Reinforcement_learning) +can be viewed as a form of learning for sequential decision making that is +commonly associated with controlling robots (but is, in fact, much more +general). Consider an autonomous firefighting robot that is tasked with +navigating into an area, finding the fire and neutralizing it. At any given +moment, the robot perceives the environment through its sensors (e.g. camera, +heat, touch), processes this information and produces an action (e.g. move to +the left, rotate the water hose, turn on the water). In other words, it is +continuously making decisions about how to interact in this environment given +its view of the world (i.e. sensors input) and objective (i.e. neutralizing the +fire). Teaching a robot to be a successful firefighting machine is precisely +what reinforcement learning is designed to do. + +More specifically, the goal of reinforcement learning is to learn a **policy**, +which is essentially a mapping from **observations** to **actions**. An +observation is what the robot can measure from its **environment** (in this +case, all its sensory inputs) and an action, in its most raw form, is a change +to the configuration of the robot (e.g. position of its base, position of its +water hose and whether the hose is on or off). + +The last remaining piece of the reinforcement learning task is the **reward +signal**. The robot is trained to learn a policy that maximizes its overall rewards. When training a robot to be a mean firefighting machine, we provide it +with rewards (positive and negative) indicating how well it is doing on +completing the task. Note that the robot does not _know_ how to put out fires +before it is trained. It learns the objective because it receives a large +positive reward when it puts out the fire and a small negative reward for every +passing second. The fact that rewards are sparse (i.e. may not be provided at +every step, but only when a robot arrives at a success or failure situation), is +a defining characteristic of reinforcement learning and precisely why learning +good policies can be difficult (and/or time-consuming) for complex environments. + +
The reinforcement learning lifecycle.
+ +[Learning a policy](https://blogs.unity3d.com/2017/08/22/unity-ai-reinforcement-learning-with-q-learning/) +usually requires many trials and iterative policy updates. More specifically, +the robot is placed in several fire situations and over time learns an optimal +policy which allows it to put out fires more effectively. Obviously, we cannot +expect to train a robot repeatedly in the real world, particularly when fires +are involved. This is precisely why the use of +[Unity as a simulator](https://blogs.unity3d.com/2018/01/23/designing-safer-cities-through-simulations/) +serves as the perfect training grounds for learning such behaviors. While our +discussion of reinforcement learning has centered around robots, there are +strong parallels between robots and characters in a game. In fact, in many ways, +one can view a non-playable character (NPC) as a virtual robot, with its own +observations about the environment, its own set of actions and a specific +objective. Thus it is natural to explore how we can train behaviors within Unity +using reinforcement learning. This is precisely what the ML-Agents Toolkit +offers. The video linked below includes a reinforcement learning demo showcasing +training character behaviors using the ML-Agents Toolkit. + +

+ + RL Demo + +

+ +Similar to both unsupervised and supervised learning, reinforcement learning +also involves two tasks: attribute selection and model selection. Attribute +selection is defining the set of observations for the robot that best help it +complete its objective, while model selection is defining the form of the policy +(mapping from observations to actions) and its parameters. In practice, training +behaviors is an iterative process that may require changing the attribute and +model choices. + +## Training and Inference + +One common aspect of all three branches of machine learning is that they all +involve a **training phase** and an **inference phase**. While the details of +the training and inference phases are different for each of the three, at a +high-level, the training phase involves building a model using the provided +data, while the inference phase involves applying this model to new, previously +unseen, data. More specifically: + +- For our unsupervised learning example, the training phase learns the optimal + two clusters based on the data describing existing players, while the + inference phase assigns a new player to one of these two clusters. +- For our supervised learning example, the training phase learns the mapping + from player attributes to player label (whether they churned or not), and the + inference phase predicts whether a new player will churn or not based on that + learned mapping. +- For our reinforcement learning example, the training phase learns the optimal + policy through guided trials, and in the inference phase, the agent observes + and takes actions in the wild using its learned policy. + +To briefly summarize: all three classes of algorithms involve training and +inference phases in addition to attribute and model selections. What ultimately +separates them is the type of data available to learn from. In unsupervised +learning our data set was a collection of attributes, in supervised learning our +data set was a collection of attribute-label pairs, and, lastly, in +reinforcement learning our data set was a collection of +observation-action-reward tuples. + +## Deep Learning + +[Deep learning](https://en.wikipedia.org/wiki/Deep_learning) is a family of +algorithms that can be used to address any of the problems introduced above. +More specifically, they can be used to solve both attribute and model selection +tasks. Deep learning has gained popularity in recent years due to its +outstanding performance on several challenging machine learning tasks. One +example is [AlphaGo](https://en.wikipedia.org/wiki/AlphaGo), a +[computer Go](https://en.wikipedia.org/wiki/Computer_Go) program, that leverages +deep learning, that was able to beat Lee Sedol (a Go world champion). + +A key characteristic of deep learning algorithms is their ability to learn very +complex functions from large amounts of training data. This makes them a natural +choice for reinforcement learning tasks when a large amount of data can be +generated, say through the use of a simulator or engine such as Unity. By +generating hundreds of thousands of simulations of the environment within Unity, +we can learn policies for very complex environments (a complex environment is +one where the number of observations an agent perceives and the number of +actions they can take are large). Many of the algorithms we provide in ML-Agents +use some form of deep learning, built on top of the open-source library, +[PyTorch](Background-PyTorch.md). diff --git a/docs/Background-PyTorch.md b/docs/Background-PyTorch.md new file mode 100644 index 0000000000000000000000000000000000000000..f63a066745ee14e53c2b4d2861d4d81ef1364645 --- /dev/null +++ b/docs/Background-PyTorch.md @@ -0,0 +1,35 @@ +# Background: PyTorch + +As discussed in our +[machine learning background page](Background-Machine-Learning.md), many of the +algorithms we provide in the ML-Agents Toolkit leverage some form of deep +learning. More specifically, our implementations are built on top of the +open-source library [PyTorch](https://pytorch.org/). In this page we +provide a brief overview of PyTorch and TensorBoard +that we leverage within the ML-Agents Toolkit. + +## PyTorch + +[PyTorch](https://pytorch.org/) is an open source library for +performing computations using data flow graphs, the underlying representation of +deep learning models. It facilitates training and inference on CPUs and GPUs in +a desktop, server, or mobile device. Within the ML-Agents Toolkit, when you +train the behavior of an agent, the output is a model (.onnx) file that you can +then associate with an Agent. Unless you implement a new algorithm, the use of +PyTorch is mostly abstracted away and behind the scenes. + +## TensorBoard + +One component of training models with PyTorch is setting the values of +certain model attributes (called _hyperparameters_). Finding the right values of +these hyperparameters can require a few iterations. Consequently, we leverage a +visualization tool called +[TensorBoard](https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard). +It allows the visualization of certain agent attributes (e.g. reward) throughout +training which can be helpful in both building intuitions for the different +hyperparameters and setting the optimal values for your Unity environment. We +provide more details on setting the hyperparameters in the +[Training ML-Agents](Training-ML-Agents.md) page. If you are unfamiliar with +TensorBoard we recommend our guide on +[using TensorBoard with ML-Agents](Using-Tensorboard.md) or this +[tutorial](https://github.com/dandelionmane/tf-dev-summit-tensorboard-tutorial). diff --git a/docs/Background-Unity.md b/docs/Background-Unity.md new file mode 100644 index 0000000000000000000000000000000000000000..7d144e53dac68199d1b81540200145075361d565 --- /dev/null +++ b/docs/Background-Unity.md @@ -0,0 +1,19 @@ +# Background: Unity + +If you are not familiar with the [Unity Engine](https://unity3d.com/unity), we +highly recommend the [Unity Manual](https://docs.unity3d.com/Manual/index.html) +and [Tutorials page](https://unity3d.com/learn/tutorials). The +[Roll-a-ball tutorial](https://learn.unity.com/project/roll-a-ball) +is a fantastic resource to learn all the basic concepts of Unity to get started +with the ML-Agents Toolkit: + +- [Editor](https://docs.unity3d.com/Manual/UsingTheEditor.html) +- [Scene](https://docs.unity3d.com/Manual/CreatingScenes.html) +- [GameObject](https://docs.unity3d.com/Manual/GameObjects.html) +- [Rigidbody](https://docs.unity3d.com/ScriptReference/Rigidbody.html) +- [Camera](https://docs.unity3d.com/Manual/Cameras.html) +- [Scripting](https://docs.unity3d.com/Manual/ScriptingSection.html) +- [Physics](https://docs.unity3d.com/Manual/PhysicsSection.html) +- [Ordering of event functions](https://docs.unity3d.com/Manual/ExecutionOrder.html) + (e.g. FixedUpdate, Update) +- [Prefabs](https://docs.unity3d.com/Manual/Prefabs.html) diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..14a6a4a839a0c29b9d6a3193e8a97dcf58d923c1 --- /dev/null +++ b/docs/CODE_OF_CONDUCT.md @@ -0,0 +1 @@ +{!../CODE_OF_CONDUCT.md!} diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..6629acde5fac5edac2928755ed2e318a62d4dd88 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# How to Contribute to ML-Agents + +## 1.Fork the repository +Fork the ML-Agents repository by clicking on the "Fork" button in the top right corner of the GitHub page. This creates a copy of the repository under your GitHub account. + +## 2. Set up your development environment +Clone the forked repository to your local machine using Git. Install the necessary dependencies and follow the instructions provided in the project's documentation to set up your development environment properly. + +## 3. Choose an issue or feature +Browse the project's issue tracker or discussions to find an open issue or feature that you would like to contribute to. Read the guidelines and comments associated with the issue to understand the requirements and constraints. + +## 4. Make your changes +Create a new branch for your changes based on the main branch of the ML-Agents repository. Implement your code changes or add new features as necessary. Ensure that your code follows the project's coding style and conventions. + +* Example: Let's say you want to add support for a new type of reward function in the ML-Agents framework. You can create a new branch named feature/reward-function to implement this feature. + +## 5. Test your changes +Run the appropriate tests to ensure your changes work as intended. If necessary, add new tests to cover your code and verify that it doesn't introduce regressions. + +* Example: For the reward function feature, you would write tests to check different scenarios and expected outcomes of the new reward function. + +## 6. Submit a pull request +Push your branch to your forked repository and submit a pull request (PR) to the ML-Agents main repository. Provide a clear and concise description of your changes, explaining the problem you solved or the feature you added. + +* Example: In the pull request description, you would explain how the new reward function works, its benefits, and any relevant implementation details. + +## 7. Respond to feedback +Be responsive to any feedback or comments provided by the project maintainers. Address the feedback by making necessary revisions to your code and continue the discussion if required. + +## 8. Continuous integration and code review +The ML-Agents project utilizes automated continuous integration (CI) systems to run tests on pull requests. Address any issues flagged by the CI system and actively participate in the code review process by addressing comments from reviewers. + +## 9. Merge your changes +Once your pull request has been approved and meets all the project's requirements, a project maintainer will merge your changes into the main repository. Congratulations, your contribution has been successfully integrated! + +**Remember to always adhere to the project's code of conduct, be respectful, and follow any specific contribution guidelines provided by the ML-Agents project. Happy contributing!** diff --git a/docs/Custom-SideChannels.md b/docs/Custom-SideChannels.md new file mode 100644 index 0000000000000000000000000000000000000000..dab58c3d79b10727cbb00af033573838e3744f03 --- /dev/null +++ b/docs/Custom-SideChannels.md @@ -0,0 +1,229 @@ +# Custom Side Channels + +You can create your own side channel in C# and Python and use it to communicate +custom data structures between the two. This can be useful for situations in +which the data to be sent is too complex or structured for the built-in +`EnvironmentParameters`, or is not related to any specific agent, and therefore +inappropriate as an agent observation. + +## Overview + +In order to use a side channel, it must be implemented as both Unity and Python +classes. + +### Unity side + +The side channel will have to implement the `SideChannel` abstract class and the +following method. + +- `OnMessageReceived(IncomingMessage msg)` : You must implement this method and + read the data from IncomingMessage. The data must be read in the order that it + was written. + +The side channel must also assign a `ChannelId` property in the constructor. The +`ChannelId` is a Guid (or UUID in Python) used to uniquely identify a side +channel. This Guid must be the same on C# and Python. There can only be one side +channel of a certain id during communication. + +To send data from C# to Python, create an `OutgoingMessage` instance, add data +to it, call the `base.QueueMessageToSend(msg)` method inside the side channel, +and call the `OutgoingMessage.Dispose()` method. + +To register a side channel on the Unity side, call +`SideChannelManager.RegisterSideChannel` with the side channel as only argument. + +### Python side + +The side channel will have to implement the `SideChannel` abstract class. You +must implement : + +- `on_message_received(self, msg: "IncomingMessage") -> None` : You must + implement this method and read the data from IncomingMessage. The data must be + read in the order that it was written. + +The side channel must also assign a `channel_id` property in the constructor. +The `channel_id` is a UUID (referred in C# as Guid) used to uniquely identify a +side channel. This number must be the same on C# and Python. There can only be +one side channel of a certain id during communication. + +To assign the `channel_id` call the abstract class constructor with the +appropriate `channel_id` as follows: + +```python +super().__init__(my_channel_id) +``` + +To send a byte array from Python to C#, create an `OutgoingMessage` instance, +add data to it, and call the `super().queue_message_to_send(msg)` method inside +the side channel. + +To register a side channel on the Python side, pass the side channel as argument +when creating the `UnityEnvironment` object. One of the arguments of the +constructor (`side_channels`) is a list of side channels. + +## Example implementation + +Below is a simple implementation of a side channel that will exchange ASCII +encoded strings between a Unity environment and Python. + +### Example Unity C# code + +The first step is to create the `StringLogSideChannel` class within the Unity +project. Here is an implementation of a `StringLogSideChannel` that will listen +for messages from python and print them to the Unity debug log, as well as send +error messages from Unity to python. + +```csharp +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.SideChannels; +using System.Text; +using System; + +public class StringLogSideChannel : SideChannel +{ + public StringLogSideChannel() + { + ChannelId = new Guid("621f0a70-4f87-11ea-a6bf-784f4387d1f7"); + } + + protected override void OnMessageReceived(IncomingMessage msg) + { + var receivedString = msg.ReadString(); + Debug.Log("From Python : " + receivedString); + } + + public void SendDebugStatementToPython(string logString, string stackTrace, LogType type) + { + if (type == LogType.Error) + { + var stringToSend = type.ToString() + ": " + logString + "\n" + stackTrace; + using (var msgOut = new OutgoingMessage()) + { + msgOut.WriteString(stringToSend); + QueueMessageToSend(msgOut); + } + } + } +} +``` + +Once we have defined our custom side channel class, we need to ensure that it is +instantiated and registered. This can typically be done wherever the logic of +the side channel makes sense to be associated, for example on a MonoBehaviour +object that might need to access data from the side channel. Here we show a +simple MonoBehaviour object which instantiates and registers the new side +channel. If you have not done it already, make sure that the MonoBehaviour which +registers the side channel is attached to a GameObject which will be live in +your Unity scene. + +```csharp +using UnityEngine; +using Unity.MLAgents; + + +public class RegisterStringLogSideChannel : MonoBehaviour +{ + + StringLogSideChannel stringChannel; + public void Awake() + { + // We create the Side Channel + stringChannel = new StringLogSideChannel(); + + // When a Debug.Log message is created, we send it to the stringChannel + Application.logMessageReceived += stringChannel.SendDebugStatementToPython; + + // The channel must be registered with the SideChannelManager class + SideChannelManager.RegisterSideChannel(stringChannel); + } + + public void OnDestroy() + { + // De-register the Debug.Log callback + Application.logMessageReceived -= stringChannel.SendDebugStatementToPython; + if (Academy.IsInitialized){ + SideChannelManager.UnregisterSideChannel(stringChannel); + } + } + + public void Update() + { + // Optional : If the space bar is pressed, raise an error ! + if (Input.GetKeyDown(KeyCode.Space)) + { + Debug.LogError("This is a fake error. Space bar was pressed in Unity."); + } + } +} +``` + +### Example Python code + +Now that we have created the necessary Unity C# classes, we can create their +Python counterparts. + +```python +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.side_channel.side_channel import ( + SideChannel, + IncomingMessage, + OutgoingMessage, +) +import numpy as np +import uuid + + +# Create the StringLogChannel class +class StringLogChannel(SideChannel): + + def __init__(self) -> None: + super().__init__(uuid.UUID("621f0a70-4f87-11ea-a6bf-784f4387d1f7")) + + def on_message_received(self, msg: IncomingMessage) -> None: + """ + Note: We must implement this method of the SideChannel interface to + receive messages from Unity + """ + # We simply read a string from the message and print it. + print(msg.read_string()) + + def send_string(self, data: str) -> None: + # Add the string to an OutgoingMessage + msg = OutgoingMessage() + msg.write_string(data) + # We call this method to queue the data we want to send + super().queue_message_to_send(msg) +``` + +We can then instantiate the new side channel, launch a `UnityEnvironment` with +that side channel active, and send a series of messages to the Unity environment +from Python using it. + +```python +# Create the channel +string_log = StringLogChannel() + +# We start the communication with the Unity Editor and pass the string_log side channel as input +env = UnityEnvironment(side_channels=[string_log]) +env.reset() +string_log.send_string("The environment was reset") + +group_name = list(env.behavior_specs.keys())[0] # Get the first group_name +group_spec = env.behavior_specs[group_name] +for i in range(1000): + decision_steps, terminal_steps = env.get_steps(group_name) + # We send data to Unity : A string with the number of Agent at each + string_log.send_string( + f"Step {i} occurred with {len(decision_steps)} deciding agents and " + f"{len(terminal_steps)} terminal agents" + ) + env.step() # Move the simulation forward + +env.close() +``` + +Now, if you run this script and press `Play` the Unity Editor when prompted, the +console in the Unity Editor will display a message at every Python step. +Additionally, if you press the Space Bar in the Unity Engine, a message will +appear in the terminal. diff --git a/docs/ELO-Rating-System.md b/docs/ELO-Rating-System.md new file mode 100644 index 0000000000000000000000000000000000000000..df22dc53fe81180416dac050c4079333a5875564 --- /dev/null +++ b/docs/ELO-Rating-System.md @@ -0,0 +1,60 @@ +# ELO Rating System +In adversarial games, the cumulative environment reward may **not be a meaningful metric** by which to track +learning progress. + +This is because the cumulative reward is **entirely dependent on the skill of the opponent**. + +An agent at a particular skill level will get more or less reward against a worse or better agent, +respectively. + +Instead, it's better to use ELO rating system, a method to calculate **the relative skill level between two players in a zero-sum game**. + +If the training performs correctly, **this value should steadily increase**. + +## What is a zero-sum game? +A zero-sum game is a game where **each player's gain or loss of utility is exactly balanced by the gain or loss of the utility of the opponent**. + +Simply explained, we face a zero-sum game **when one agent gets +1.0, its opponent gets -1.0 reward**. + +For instance, Tennis is a zero-sum game: if you win the point you get +1.0 and your opponent gets -1.0 reward. + +## How works the ELO Rating System +- Each player **has an initial ELO score**. It's defined in the `initial_elo` trainer config hyperparameter. + +- The **difference in rating between the two players** serves as the predictor of the outcomes of a match. + +![Example Elo](images/elo_example.png) +*For instance, if player A has an Elo score of 2100 and player B has an ELO score of 1800 the chance that player A wins is 85% against 15% for player b.* + +- We calculate the **expected score of each player** using this formula: + +![Elo Expected Score Formula](images/elo_expected_score_formula.png) + +- At the end of the game, based on the outcome **we update the player’s actual Elo score**, we use a linear adjustment proportional to the amount by which the player over-performed or under-performed. +The winning player takes points from the losing one: + - If the *higher-rated player wins* → **a few points** will be taken from the lower-rated player. + - If the *lower-rated player wins* → **a lot of points** will be taken from the high-rated player. + - If it’s *a draw* → the lower-rated player gains **a few points** from higher. + +- We update players rating using this formula: + +![Elo Score Update Formula](images/elo_score_update_formula.png) + +### The Tennis example + +- We start to train our agents. +- Both of them have the same skills. So ELO score for each of them that we defined using parameter `initial_elo = 1200.0`. + +We calculate the expected score E: +Ea = 0.5 +Eb = 0.5 + +So it means that each player has 50% chances of winning the point. + +If A wins, the new rating R would be: + +Ra = 1200 + 16 * (1 - 0.5) → 1208 + +Rb = 1200 + 16 * (0 - 0.5) → 1192 + +Player A has now an ELO score of 1208 and Player B an ELO score of 1192. Therefore, Player A is now a little bit **better than Player B**. diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 0000000000000000000000000000000000000000..ee9135b3089ae51562e0dfcb82a93c6435624bd5 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,79 @@ +# Frequently Asked Questions + +## Installation problems + +## Environment Permission Error + +If you directly import your Unity environment without building it in the editor, +you might need to give it additional permissions to execute it. + +If you receive such a permission error on macOS, run: + +```sh +chmod -R 755 *.app +``` + +or on Linux: + +```sh +chmod -R 755 *.x86_64 +``` + +On Windows, you can find +[instructions](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc754344(v=ws.11)). + +## Environment Connection Timeout + +If you are able to launch the environment from `UnityEnvironment` but then +receive a timeout error like this: + +``` +UnityAgentsException: The Communicator was unable to connect. Please make sure the External process is ready to accept communication with Unity. +``` + +There may be a number of possible causes: + +- _Cause_: There may be no agent in the scene +- _Cause_: On OSX, the firewall may be preventing communication with the + environment. _Solution_: Add the built environment binary to the list of + exceptions on the firewall by following + [instructions](https://support.apple.com/en-us/HT201642). +- _Cause_: An error happened in the Unity Environment preventing communication. + _Solution_: Look into the + [log files](https://docs.unity3d.com/Manual/LogFiles.html) generated by the + Unity Environment to figure what error happened. +- _Cause_: You have assigned `HTTP_PROXY` and `HTTPS_PROXY` values in your + environment variables. _Solution_: Remove these values and try again. +- _Cause_: You are running in a headless environment (e.g. remotely connected + to a server). _Solution_: Pass `--no-graphics` to `mlagents-learn`, or + `no_graphics=True` to `RemoteRegistryEntry.make()` or the `UnityEnvironment` + initializer. If you need graphics for visual observations, you will need to + set up `xvfb` (or equivalent). + +## Communication port {} still in use + +If you receive an exception +`"Couldn't launch new environment because communication port {} is still in use. "`, +you can change the worker number in the Python script when calling + +```python +UnityEnvironment(file_name=filename, worker_id=X) +``` + +## Mean reward : nan + +If you receive a message `Mean reward : nan` when attempting to train a model +using PPO, this is due to the episodes of the Learning Environment not +terminating. In order to address this, set `Max Steps` for the Agents within the +Scene Inspector to a value greater than 0. Alternatively, it is possible to +manually set `done` conditions for episodes from within scripts for custom +episode-terminating events. + +## "File name" cannot be opened because the developer cannot be verified. + +If you have downloaded the repository using the github website on macOS 10.15 (Catalina) +or later, you may see this error when attempting to play scenes in the Unity project. +Workarounds include installing the package using the Unity Package Manager (this is +the officially supported approach - see [here](Installation.md)), or following the +instructions [here](https://support.apple.com/en-us/HT202491) to verify the relevant +files on your machine on a file-by-file basis. diff --git a/docs/Getting-Started.md b/docs/Getting-Started.md new file mode 100644 index 0000000000000000000000000000000000000000..c4ec5332adc8508407437b8541f050b5a7dc7e97 --- /dev/null +++ b/docs/Getting-Started.md @@ -0,0 +1,265 @@ +# Getting Started Guide + +This guide walks through the end-to-end process of opening one of our +[example environments](Learning-Environment-Examples.md) in Unity, training an +Agent in it, and embedding the trained model into the Unity environment. After +reading this tutorial, you should be able to train any of the example +environments. If you are not familiar with the +[Unity Engine](https://unity3d.com/unity), view our +[Background: Unity](Background-Unity.md) page for helpful pointers. +Additionally, if you're not familiar with machine learning, view our +[Background: Machine Learning](Background-Machine-Learning.md) page for a brief +overview and helpful pointers. + +![3D Balance Ball](images/balance.png) + +For this guide, we'll use the **3D Balance Ball** environment which contains a +number of agent cubes and balls (which are all copies of each other). Each agent +cube tries to keep its ball from falling by rotating either horizontally or +vertically. In this environment, an agent cube is an **Agent** that receives a +reward for every step that it balances the ball. An agent is also penalized with +a negative reward for dropping the ball. The goal of the training process is to +have the agents learn to balance the ball on their head. + +Let's get started! + +## Installation + +If you haven't already, follow the [installation instructions](Installation.md). +Afterwards, open the Unity Project that contains all the example environments: + +1. Open the Package Manager Window by navigating to `Window -> Package Manager` + in the menu. +1. Navigate to the ML-Agents Package and click on it. +1. Find the `3D Ball` sample and click `Import`. +1. In the **Project** window, go to the + `Assets/ML-Agents/Examples/3DBall/Scenes` folder and open the `3DBall` scene + file. + +## Understanding a Unity Environment + +An agent is an autonomous actor that observes and interacts with an +_environment_. In the context of Unity, an environment is a scene containing one +or more Agent objects, and, of course, the other entities that an agent +interacts with. + +![Unity Editor](images/mlagents-3DBallHierarchy.png) + +**Note:** In Unity, the base object of everything in a scene is the +_GameObject_. The GameObject is essentially a container for everything else, +including behaviors, graphics, physics, etc. To see the components that make up +a GameObject, select the GameObject in the Scene window, and open the Inspector +window. The Inspector shows every component on a GameObject. + +The first thing you may notice after opening the 3D Balance Ball scene is that +it contains not one, but several agent cubes. Each agent cube in the scene is an +independent agent, but they all share the same Behavior. 3D Balance Ball does +this to speed up training since all twelve agents contribute to training in +parallel. + +### Agent + +The Agent is the actor that observes and takes actions in the environment. In +the 3D Balance Ball environment, the Agent components are placed on the twelve +"Agent" GameObjects. The base Agent object has a few properties that affect its +behavior: + +- **Behavior Parameters** — Every Agent must have a Behavior. The Behavior + determines how an Agent makes decisions. +- **Max Step** — Defines how many simulation steps can occur before the Agent's + episode ends. In 3D Balance Ball, an Agent restarts after 5000 steps. + +#### Behavior Parameters : Vector Observation Space + +Before making a decision, an agent collects its observation about its state in +the world. The vector observation is a vector of floating point numbers which +contain relevant information for the agent to make decisions. + +The Behavior Parameters of the 3D Balance Ball example uses a `Space Size` of 8. +This means that the feature vector containing the Agent's observations contains +eight elements: the `x` and `z` components of the agent cube's rotation and the +`x`, `y`, and `z` components of the ball's relative position and velocity. + +#### Behavior Parameters : Actions + +An Agent is given instructions in the form of actions. +ML-Agents Toolkit classifies actions into two types: continuous and discrete. +The 3D Balance Ball example is programmed to use continuous actions, which +are a vector of floating-point numbers that can vary continuously. More specifically, +it uses a `Space Size` of 2 to control the amount of `x` and `z` rotations to apply to +itself to keep the ball balanced on its head. + +## Running a pre-trained model + +We include pre-trained models for our agents (`.onnx` files) and we use the +[Unity Inference Engine](Unity-Inference-Engine.md) to run these models inside +Unity. In this section, we will use the pre-trained model for the 3D Ball +example. + +1. In the **Project** window, go to the + `Assets/ML-Agents/Examples/3DBall/Prefabs` folder. Expand `3DBall` and click + on the `Agent` prefab. You should see the `Agent` prefab in the **Inspector** + window. + + **Note**: The platforms in the `3DBall` scene were created using the `3DBall` + prefab. Instead of updating all 12 platforms individually, you can update the + `3DBall` prefab instead. + + ![Platform Prefab](images/platform_prefab.png) + +1. In the **Project** window, drag the **3DBall** Model located in + `Assets/ML-Agents/Examples/3DBall/TFModels` into the `Model` property under + `Behavior Parameters (Script)` component in the Agent GameObject + **Inspector** window. + + ![3dball learning brain](images/3dball_learning_brain.png) + +1. You should notice that each `Agent` under each `3DBall` in the **Hierarchy** + windows now contains **3DBall** as `Model` on the `Behavior Parameters`. + **Note** : You can modify multiple game objects in a scene by selecting them + all at once using the search bar in the Scene Hierarchy. +1. Set the **Inference Device** to use for this model as `CPU`. +1. Click the **Play** button in the Unity Editor and you will see the platforms + balance the balls using the pre-trained model. + +## Training a new model with Reinforcement Learning + +While we provide pre-trained models for the agents in this environment, any +environment you make yourself will require training agents from scratch to +generate a new model file. In this section we will demonstrate how to use the +reinforcement learning algorithms that are part of the ML-Agents Python package +to accomplish this. We have provided a convenient command `mlagents-learn` which +accepts arguments used to configure both training and inference phases. + +### Training the environment + +1. Open a command or terminal window. +1. Navigate to the folder where you cloned the `ml-agents` repository. **Note**: + If you followed the default [installation](Installation.md), then you should + be able to run `mlagents-learn` from any directory. +1. Run `mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun`. + - `config/ppo/3DBall.yaml` is the path to a default training + configuration file that we provide. The `config/ppo` folder includes training configuration + files for all our example environments, including 3DBall. + - `run-id` is a unique name for this training session. +1. When the message _"Start training by pressing the Play button in the Unity + Editor"_ is displayed on the screen, you can press the **Play** button in + Unity to start training in the Editor. + +If `mlagents-learn` runs correctly and starts training, you should see something +like this: + +```console +INFO:mlagents_envs: +'Ball3DAcademy' started successfully! +Unity Academy name: Ball3DAcademy + +INFO:mlagents_envs:Connected new brain: +Unity brain name: 3DBallLearning + Number of Visual Observations (per agent): 0 + Vector Observation space size (per agent): 8 + Number of stacked Vector Observation: 1 +INFO:mlagents_envs:Hyperparameters for the PPO Trainer of brain 3DBallLearning: + batch_size: 64 + beta: 0.001 + buffer_size: 12000 + epsilon: 0.2 + gamma: 0.995 + hidden_units: 128 + lambd: 0.99 + learning_rate: 0.0003 + max_steps: 5.0e4 + normalize: True + num_epoch: 3 + num_layers: 2 + time_horizon: 1000 + sequence_length: 64 + summary_freq: 1000 + use_recurrent: False + memory_size: 256 + use_curiosity: False + curiosity_strength: 0.01 + curiosity_enc_size: 128 + output_path: ./results/first3DBallRun/3DBallLearning +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 1000. Mean Reward: 1.242. Std of Reward: 0.746. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 2000. Mean Reward: 1.319. Std of Reward: 0.693. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 3000. Mean Reward: 1.804. Std of Reward: 1.056. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 4000. Mean Reward: 2.151. Std of Reward: 1.432. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 5000. Mean Reward: 3.175. Std of Reward: 2.250. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 6000. Mean Reward: 4.898. Std of Reward: 4.019. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 7000. Mean Reward: 6.716. Std of Reward: 5.125. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 8000. Mean Reward: 12.124. Std of Reward: 11.929. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 9000. Mean Reward: 18.151. Std of Reward: 16.871. Training. +INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 10000. Mean Reward: 27.284. Std of Reward: 28.667. Training. +``` + +Note how the `Mean Reward` value printed to the screen increases as training +progresses. This is a positive sign that training is succeeding. + +**Note**: You can train using an executable rather than the Editor. To do so, +follow the instructions in +[Using an Executable](Learning-Environment-Executable.md). + +### Observing Training Progress + +Once you start training using `mlagents-learn` in the way described in the +previous section, the `ml-agents` directory will contain a `results` +directory. In order to observe the training process in more detail, you can use +TensorBoard. From the command line run: + +```sh +tensorboard --logdir results +``` + +Then navigate to `localhost:6006` in your browser to view the TensorBoard +summary statistics as shown below. For the purposes of this section, the most +important statistic is `Environment/Cumulative Reward` which should increase +throughout training, eventually converging close to `100` which is the maximum +reward the agent can accumulate. + +![Example TensorBoard Run](images/mlagents-TensorBoard.png) + +## Embedding the model into the Unity Environment + +Once the training process completes, and the training process saves the model +(denoted by the `Saved Model` message) you can add it to the Unity project and +use it with compatible Agents (the Agents that generated the model). **Note:** +Do not just close the Unity Window once the `Saved Model` message appears. +Either wait for the training process to close the window or press `Ctrl+C` at +the command-line prompt. If you close the window manually, the `.onnx` file +containing the trained model is not exported into the ml-agents folder. + +If you've quit the training early using `Ctrl+C` and want to resume training, +run the same command again, appending the `--resume` flag: + +```sh +mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun --resume +``` + +Your trained model will be at `results//.onnx` where +`` is the name of the `Behavior Name` of the agents corresponding +to the model. This file corresponds to your model's latest checkpoint. You can +now embed this trained model into your Agents by following the steps below, +which is similar to the steps described [above](#running-a-pre-trained-model). + +1. Move your model file into + `Project/Assets/ML-Agents/Examples/3DBall/TFModels/`. +1. Open the Unity Editor, and select the **3DBall** scene as described above. +1. Select the **3DBall** prefab Agent object. +1. Drag the `.onnx` file from the Project window of the Editor to + the **Model** placeholder in the **Ball3DAgent** inspector window. +1. Press the **Play** button at the top of the Editor. + +## Next Steps + +- For more information on the ML-Agents Toolkit, in addition to helpful + background, check out the [ML-Agents Toolkit Overview](ML-Agents-Overview.md) + page. +- For a "Hello World" introduction to creating your own Learning Environment, + check out the + [Making a New Learning Environment](Learning-Environment-Create-New.md) page. +- For an overview on the more complex example environments that are provided in + this toolkit, check out the + [Example Environments](Learning-Environment-Examples.md) page. +- For more information on the various training options available, check out the + [Training ML-Agents](Training-ML-Agents.md) page. diff --git a/docs/Glossary.md b/docs/Glossary.md new file mode 100644 index 0000000000000000000000000000000000000000..7d912fe296fb9ad20e6bd18d538b44bba51e83c9 --- /dev/null +++ b/docs/Glossary.md @@ -0,0 +1,36 @@ +# ML-Agents Toolkit Glossary + +- **Academy** - Singleton object which controls timing, reset, and + training/inference settings of the environment. +- **Action** - The carrying-out of a decision on the part of an agent within the + environment. +- **Agent** - Unity Component which produces observations and takes actions in + the environment. Agents actions are determined by decisions produced by a + Policy. +- **Decision** - The specification produced by a Policy for an action to be + carried out given an observation. +- **Editor** - The Unity Editor, which may include any pane (e.g. Hierarchy, + Scene, Inspector). +- **Environment** - The Unity scene which contains Agents. +- **Experience** - Corresponds to a tuple of [Agent observations, actions, + rewards] of a single Agent obtained after a Step. +- **External Coordinator** - ML-Agents class responsible for communication with + outside processes (in this case, the Python API). +- **FixedUpdate** - Unity method called each time the game engine is stepped. + ML-Agents logic should be placed here. +- **Frame** - An instance of rendering the main camera for the display. + Corresponds to each `Update` call of the game engine. +- **Observation** - Partial information describing the state of the environment + available to a given agent. (e.g. Vector, Visual) +- **Policy** - The decision making mechanism for producing decisions from + observations, typically a neural network model. +- **Reward** - Signal provided at every step used to indicate desirability of an + agent’s action within the current state of the environment. +- **State** - The underlying properties of the environment (including all agents + within it) at a given time. +- **Step** - Corresponds to an atomic change of the engine that happens between + Agent decisions. +- **Trainer** - Python class which is responsible for training a given group of + Agents. +- **Update** - Unity function called each time a frame is rendered. ML-Agents + logic should not be placed here. diff --git a/docs/Hugging-Face-Integration.md b/docs/Hugging-Face-Integration.md new file mode 100644 index 0000000000000000000000000000000000000000..189624817fbad9adf052fa5ece4b6e3e61aacba6 --- /dev/null +++ b/docs/Hugging-Face-Integration.md @@ -0,0 +1,56 @@ +# The Hugging Face Integration + +The [Hugging Face Hub 🤗](https://huggingface.co/models?pipeline_tag=reinforcement-learning) is a central place **where anyone can share and download models**. + +It allows you to: +- **Host** your trained models. +- **Download** trained models from the community. +- Visualize your agents **playing directly on your browser**. + +You can see the list of ml-agents models [here](https://huggingface.co/models?library=ml-agents). + +We wrote a **complete tutorial to learn to train your first agent using ML-Agents and publish it to the Hub**: + +- A short tutorial where you [teach **Huggy the Dog to fetch the stick** and then play with him directly in your browser](https://huggingface.co/learn/deep-rl-course/unitbonus1/introduction) +- A [more in-depth tutorial](https://huggingface.co/learn/deep-rl-course/unit5/introduction) + +## Download a model from the Hub + +You can simply download a model from the Hub using `mlagents-load-from-hf`. + +You need to define two parameters: + +- `--repo-id`: the name of the Hugging Face repo you want to download. +- `--local-dir`: the path to download the model. + +For instance, I want to load the model with model-id "ThomasSimonini/MLAgents-Pyramids" and put it in the downloads directory: + +```sh +mlagents-load-from-hf --repo-id="ThomasSimonini/MLAgents-Pyramids" --local-dir="./downloads" +``` + +## Upload a model to the Hub + +You can simply upload a model to the Hub using `mlagents-push-to-hf` + +You need to define four parameters: + +- `--run-id`: the name of the training run id. +- `--local-dir`: where the model was saved +- `--repo-id`: the name of the Hugging Face repo you want to create or update. It’s always / If the repo does not exist it will be created automatically +- `--commit-message`: since HF repos are git repositories you need to give a commit message. + +For instance, I want to upload my model trained with run-id "SnowballTarget1" to the repo-id: ThomasSimonini/ppo-SnowballTarget: + +```sh + mlagents-push-to-hf --run-id="SnowballTarget1" --local-dir="./results/SnowballTarget1" --repo-id="ThomasSimonini/ppo-SnowballTarget" --commit-message="First Push" +``` + +## Visualize an agent playing + +You can watch your agent playing directly in your browser (if the environment is from the [ML-Agents official environments](Learning-Environment-Examples.md)) + +- Step 1: Go to https://huggingface.co/unity and select the environment demo. +- Step 2: Find your model_id in the list. +- Step 3: Select your .nn /.onnx file. +- Step 4: Click on Watch the agent play diff --git a/docs/Installation-Anaconda-Windows.md b/docs/Installation-Anaconda-Windows.md new file mode 100644 index 0000000000000000000000000000000000000000..33eb05a4c135dee645323491f3b8db2c260a0f22 --- /dev/null +++ b/docs/Installation-Anaconda-Windows.md @@ -0,0 +1,362 @@ +# Installing ML-Agents Toolkit for Windows (Deprecated) + +:warning: **Note:** We no longer use this guide ourselves and so it may not work +correctly. We've decided to keep it up just in case it is helpful to you. + +The ML-Agents Toolkit supports Windows 10. While it might be possible to run the +ML-Agents Toolkit using other versions of Windows, it has not been tested on +other versions. Furthermore, the ML-Agents Toolkit has not been tested on a +Windows VM such as Bootcamp or Parallels. + +To use the ML-Agents Toolkit, you install Python and the required Python +packages as outlined below. This guide also covers how set up GPU-based training +(for advanced users). GPU-based training is not currently required for the +ML-Agents Toolkit. However, training on a GPU might be required by future +versions and features. + +## Step 1: Install Python via Anaconda + +[Download](https://www.anaconda.com/download/#windows) and install Anaconda for +Windows. By using Anaconda, you can manage separate environments for different +distributions of Python. Python 3.7.2 or higher is required as we no longer +support Python 2. In this guide, we are using Python version 3.7 and Anaconda +version 5.1 +([64-bit](https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86_64.exe) +or [32-bit](https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86.exe) +direct links). + +

+ Anaconda Install +

+ +We recommend the default _advanced installation options_. However, select the +options appropriate for your specific situation. + +

+ Anaconda Install +

+ +After installation, you must open **Anaconda Navigator** to finish the setup. +From the Windows search bar, type _anaconda navigator_. You can close Anaconda +Navigator after it opens. + +If environment variables were not created, you will see error "conda is not +recognized as internal or external command" when you type `conda` into the +command line. To solve this you will need to set the environment variable +correctly. + +Type `environment variables` in the search bar (this can be reached by hitting +the Windows key or the bottom left Windows button). You should see an option +called **Edit the system environment variables**. + +

+ edit env variables +

+ +From here, click the **Environment Variables** button. Double click "Path" under +**System variable** to edit the "Path" variable, click **New** to add the +following new paths. + +```console +%UserProfile%\Anaconda3\Scripts +%UserProfile%\Anaconda3\Scripts\conda.exe +%UserProfile%\Anaconda3 +%UserProfile%\Anaconda3\python.exe +``` + +## Step 2: Setup and Activate a New Conda Environment + +You will create a new [Conda environment](https://conda.io/docs/) to be used +with the ML-Agents Toolkit. This means that all the packages that you install +are localized to just this environment. It will not affect any other +installation of Python or other environments. Whenever you want to run +ML-Agents, you will need activate this Conda environment. + +To create a new Conda environment, open a new Anaconda Prompt (_Anaconda Prompt_ +in the search bar) and type in the following command: + +```sh +conda create -n ml-agents python=3.7 +``` + +You may be asked to install new packages. Type `y` and press enter _(make sure +you are connected to the Internet)_. You must install these required packages. +The new Conda environment is called ml-agents and uses Python version 3.7. + +

+ Anaconda Install +

+ +To use this environment, you must activate it. _(To use this environment In the +future, you can run the same command)_. In the same Anaconda Prompt, type in the +following command: + +```sh +activate ml-agents +``` + +You should see `(ml-agents)` prepended on the last line. + +Next, install `tensorflow`. Install this package using `pip` - which is a +package management system used to install Python packages. Latest versions of +TensorFlow won't work, so you will need to make sure that you install version +1.7.1. In the same Anaconda Prompt, type in the following command _(make sure +you are connected to the Internet)_: + +```sh +pip install tensorflow==1.7.1 +``` + +## Step 3: Install Required Python Packages + +The ML-Agents Toolkit depends on a number of Python packages. Use `pip` to +install these Python dependencies. + +If you haven't already, clone the ML-Agents Toolkit Github repository to your +local computer. You can do this using Git +([download here](https://git-scm.com/download/win)) and running the following +commands in an Anaconda Prompt _(if you open a new prompt, be sure to activate +the ml-agents Conda environment by typing `activate ml-agents`)_: + +```sh +git clone --branch release_19 https://github.com/Unity-Technologies/ml-agents.git +``` + +The `--branch release_19` option will switch to the tag of the latest stable +release. Omitting that will get the `main` branch which is potentially +unstable. + +If you don't want to use Git, you can find download links on the +[releases page](https://github.com/Unity-Technologies/ml-agents/releases). + +The `com.unity.ml-agents` subdirectory contains the core code to add to your +projects. The `Project` subdirectory contains many +[example environments](Learning-Environment-Examples.md) to help you get +started. + +The `ml-agents` subdirectory contains a Python package which provides deep +reinforcement learning trainers to use with Unity environments. + +The `ml-agents-envs` subdirectory contains a Python API to interface with Unity, +which the `ml-agents` package depends on. + +The `gym-unity` subdirectory contains a package to interface with OpenAI Gym. + +Keep in mind where the files were downloaded, as you will need the trainer +config files in this directory when running `mlagents-learn`. Make sure you are +connected to the Internet and then type in the Anaconda Prompt: + +```console +python -m pip install mlagents==0.30.0 +``` + +This will complete the installation of all the required Python packages to run +the ML-Agents Toolkit. + +Sometimes on Windows, when you use pip to install certain Python packages, the +pip will get stuck when trying to read the cache of the package. If you see +this, you can try: + +```console +python -m pip install mlagents==0.30.0 --no-cache-dir +``` + +This `--no-cache-dir` tells the pip to disable the cache. + +### Installing for Development + +If you intend to make modifications to `ml-agents` or `ml-agents-envs`, you +should install the packages from the cloned repo rather than from PyPi. To do +this, you will need to install `ml-agents` and `ml-agents-envs` separately. + +In our example, the files are located in `C:\Downloads`. After you have either +cloned or downloaded the files, from the Anaconda Prompt, change to the +ml-agents subdirectory inside the ml-agents directory: + +```console +cd C:\Downloads\ml-agents +``` + +From the repo's main directory, now run: + +```console +cd ml-agents-envs +pip install -e . +cd .. +cd ml-agents +pip install -e . +``` + +Running pip with the `-e` flag will let you make changes to the Python files +directly and have those reflected when you run `mlagents-learn`. It is important +to install these packages in this order as the `mlagents` package depends on +`mlagents_envs`, and installing it in the other order will download +`mlagents_envs` from PyPi. + +## (Optional) Step 4: GPU Training using The ML-Agents Toolkit + +GPU is not required for the ML-Agents Toolkit and won't speed up the PPO +algorithm a lot during training(but something in the future will benefit from +GPU). This is a guide for advanced users who want to train using GPUs. +Additionally, you will need to check if your GPU is CUDA compatible. Please +check Nvidia's page [here](https://developer.nvidia.com/cuda-gpus). + +Currently for the ML-Agents Toolkit, only CUDA v9.0 and cuDNN v7.0.5 is +supported. + +### Install Nvidia CUDA toolkit + +[Download](https://developer.nvidia.com/cuda-toolkit-archive) and install the +CUDA toolkit 9.0 from Nvidia's archive. The toolkit includes GPU-accelerated +libraries, debugging and optimization tools, a C/C++ (Step Visual Studio 2017) +compiler and a runtime library and is needed to run the ML-Agents Toolkit. In +this guide, we are using version +[9.0.176](https://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe)). + +Before installing, please make sure you **close any running instances of Unity +or Visual Studio**. + +Run the installer and select the Express option. Note the directory where you +installed the CUDA toolkit. In this guide, we installed in the directory +`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0` + +### Install Nvidia cuDNN library + +[Download](https://developer.nvidia.com/cudnn) and install the cuDNN library +from Nvidia. cuDNN is a GPU-accelerated library of primitives for deep neural +networks. Before you can download, you will need to sign up for free to the +Nvidia Developer Program. + +

+ cuDNN membership required +

+ +Once you've signed up, go back to the cuDNN +[downloads page](https://developer.nvidia.com/cudnn). You may or may not be +asked to fill out a short survey. When you get to the list cuDNN releases, +**make sure you are downloading the right version for the CUDA toolkit you +installed in Step 1.** In this guide, we are using version 7.0.5 for CUDA +toolkit version 9.0 +([direct link](https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v7.0.5/prod/9.0_20171129/cudnn-9.0-windows10-x64-v7)). + +After you have downloaded the cuDNN files, you will need to extract the files +into the CUDA toolkit directory. In the cuDNN zip file, there are three folders +called `bin`, `include`, and `lib`. + +

+ cuDNN zip files +

+ +Copy these three folders into the CUDA toolkit directory. The CUDA toolkit +directory is located at +`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0` + +

+ cuda toolkit directory +

+ +### Set Environment Variables + +You will need to add one environment variable and two path variables. + +To set the environment variable, type `environment variables` in the search bar +(this can be reached by hitting the Windows key or the bottom left Windows +button). You should see an option called **Edit the system environment +variables**. + +

+ edit env variables +

+ +From here, click the **Environment Variables** button. Click **New** to add a +new system variable _(make sure you do this under **System variables** and not +User variables_. + +

+ new system variable +

+ +For **Variable Name**, enter `CUDA_HOME`. For the variable value, put the +directory location for the CUDA toolkit. In this guide, the directory location +is `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0`. Press **OK** once. + +

+ system variable names and values +

+ +To set the two path variables, inside the same **Environment Variables** window +and under the second box called **System Variables**, find a variable called +`Path` and click **Edit**. You will add two directories to the list. For this +guide, the two entries would look like: + +```console +C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64 +C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\CUPTI\libx64 +``` + +Make sure to replace the relevant directory location with the one you have +installed. _Please note that case sensitivity matters_. + +

+ Path variables +

+ +### Install TensorFlow GPU + +Next, install `tensorflow-gpu` using `pip`. You'll need version 1.7.1. In an +Anaconda Prompt with the Conda environment ml-agents activated, type in the +following command to uninstall TensorFlow for cpu and install TensorFlow for gpu +_(make sure you are connected to the Internet)_: + +```sh +pip uninstall tensorflow +pip install tensorflow-gpu==1.7.1 +``` + +Lastly, you should test to see if everything installed properly and that +TensorFlow can identify your GPU. In the same Anaconda Prompt, open Python in +the Prompt by calling: + +```sh +python +``` + +And then type the following commands: + +```python +import tensorflow as tf + +sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) +``` + +You should see something similar to: + +```console +Found device 0 with properties ... +``` + +## Acknowledgments + +We would like to thank +[Jason Weimann](https://unity3d.college/2017/10/25/machine-learning-in-unity3d-setting-up-the-environment-tensorflow-for-agentml-on-windows-10/) +and +[Nitish S. Mutha](http://blog.nitishmutha.com/tensorflow/2017/01/22/TensorFlow-with-gpu-for-windows.html) +for writing the original articles which were used to create this guide. diff --git a/docs/Installation.md b/docs/Installation.md new file mode 100644 index 0000000000000000000000000000000000000000..f4bd381581cf080d247f5a6db856d8880a85f8c7 --- /dev/null +++ b/docs/Installation.md @@ -0,0 +1,199 @@ +# Installation + +The ML-Agents Toolkit contains several components: + +- Unity package ([`com.unity.ml-agents`](../com.unity.ml-agents/)) contains the + Unity C# SDK that will be integrated into your Unity project. This package contains + a sample to help you get started with ML-Agents. +- Unity package + ([`com.unity.ml-agents.extensions`](../com.unity.ml-agents.extensions/)) + contains experimental C#/Unity components that are not yet ready to be part + of the base `com.unity.ml-agents` package. `com.unity.ml-agents.extensions` + has a direct dependency on `com.unity.ml-agents`. +- Two Python packages: + - [`mlagents`](../ml-agents/) contains the machine learning algorithms that + enables you to train behaviors in your Unity scene. Most users of ML-Agents + will only need to directly install `mlagents`. + - [`mlagents_envs`](../ml-agents-envs/) contains a set of Python APIs to interact with + a Unity scene. It is a foundational layer that facilitates data messaging + between Unity scene and the Python machine learning algorithms. + Consequently, `mlagents` depends on `mlagents_envs`. +- Unity [Project](https://github.com/Unity-Technologies/ml-agents/tree/main/Project/) that contains several + [example environments](Learning-Environment-Examples.md) that highlight the + various features of the toolkit to help you get started. + +Consequently, to install and use the ML-Agents Toolkit you will need to: + +- Install Unity (2022.3 or later) +- Install Python (3.8.13 or higher) +- Clone this repository (Optional) + - __Note:__ If you do not clone the repository, then you will not be + able to access the example environments and training configurations or the + `com.unity.ml-agents.extensions` package. Additionally, the + [Getting Started Guide](Getting-Started.md) assumes that you have cloned the + repository. +- Install the `com.unity.ml-agents` Unity package +- Install the `com.unity.ml-agents.extensions` Unity package (Optional) +- Install the `mlagents` Python package + +### Install **Unity 2022.3** or Later + +[Download](https://unity3d.com/get-unity/download) and install Unity. We +strongly recommend that you install Unity through the Unity Hub as it will +enable you to manage multiple Unity versions. + +### Install **Python 3.7.2** or Higher + +We recommend [installing](https://www.python.org/downloads/) Python 3.7. +If you are using Windows, please install the x86-64 version and not x86. +If your Python environment doesn't include `pip3`, see these +[instructions](https://packaging.python.org/guides/installing-using-linux-tools/#installing-pip-setuptools-wheel-with-linux-package-managers) +on installing it. + +### Clone the ML-Agents Toolkit Repository (Optional) + +Now that you have installed Unity and Python, you can now install the Unity and +Python packages. You do not need to clone the repository to install those +packages, but you may choose to clone the repository if you'd like download our +example environments and training configurations to experiment with them (some +of our tutorials / guides assume you have access to our example environments). + +**NOTE:** There are samples shipped with the Unity Package. You only need to clone +the repository if you would like to explore more examples. + +```sh +git clone --branch release_20 https://github.com/Unity-Technologies/ml-agents.git +``` + +The `--branch release_20` option will switch to the tag of the latest stable +release. Omitting that will get the `main` branch which is potentially unstable. + +#### Advanced: Local Installation for Development + +You will need to clone the repository if you plan to modify or extend the +ML-Agents Toolkit for your purposes. If you plan to contribute those changes +back, make sure to clone the `main` branch (by omitting `--branch release_20` +from the command above). See our +[Contributions Guidelines](../com.unity.ml-agents/CONTRIBUTING.md) for more +information on contributing to the ML-Agents Toolkit. + +### Install the `com.unity.ml-agents` Unity package + +The Unity ML-Agents C# SDK is a Unity Package. You can install the +`com.unity.ml-agents` package +[directly from the Package Manager registry](https://docs.unity3d.com/Manual/upm-ui-install.html). +Please make sure you enable 'Preview Packages' in the 'Advanced' dropdown in +order to find the latest Preview release of the package. + +**NOTE:** If you do not see the ML-Agents package listed in the Package Manager +please follow the [advanced installation instructions](#advanced-local-installation-for-development) below. + +#### Advanced: Local Installation for Development + +You can [add the local](https://docs.unity3d.com/Manual/upm-ui-local.html) +`com.unity.ml-agents` package (from the repository that you just cloned) to your +project by: + +1. navigating to the menu `Window` -> `Package Manager`. +1. In the package manager window click on the `+` button on the top left of the packages list). +1. Select `Add package from disk...` +1. Navigate into the `com.unity.ml-agents` folder. +1. Select the `package.json` file. + +

+ Unity Package Manager Window + package.json +

+ +If you are going to follow the examples from our documentation, you can open the +`Project` folder in Unity and start tinkering immediately. + +### Install the `com.unity.ml-agents.extensions` Unity package (Optional) + +To install the `com.unity.ml-agents.extensions` package, you need to first +clone the repo and then complete a local installation similar to what was +outlined in the previous +[Advanced: Local Installation for Development](#advanced-local-installation-for-development-1) +section. Complete installation steps can be found in the +[package documentation](../com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md#installation). + +### Install the `mlagents` Python package + +Installing the `mlagents` Python package involves installing other Python +packages that `mlagents` depends on. So you may run into installation issues if +your machine has older versions of any of those dependencies already installed. +Consequently, our supported path for installing `mlagents` is to leverage Python +Virtual Environments. Virtual Environments provide a mechanism for isolating the +dependencies for each project and are supported on Mac / Windows / Linux. We +offer a dedicated [guide on Virtual Environments](Using-Virtual-Environment.md). + +#### (Windows) Installing PyTorch + +On Windows, you'll have to install the PyTorch package separately prior to +installing ML-Agents. Activate your virtual environment and run from the command line: + +```sh +pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html +``` + +Note that on Windows, you may also need Microsoft's +[Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) +if you don't have it already. See the [PyTorch installation guide](https://pytorch.org/get-started/locally/) +for more installation options and versions. + +#### Installing `mlagents` + +To install the `mlagents` Python package, activate your virtual environment and +run from the command line: + +```sh +python -m pip install mlagents==0.30.0 +``` + +Note that this will install `mlagents` from PyPi, _not_ from the cloned +repository. If you installed this correctly, you should be able to run +`mlagents-learn --help`, after which you will see the command +line parameters you can use with `mlagents-learn`. + +By installing the `mlagents` package, the dependencies listed in the +[setup.py file](../ml-agents/setup.py) are also installed. These include +[PyTorch](Background-PyTorch.md) (Requires a CPU w/ AVX support). + +#### Advanced: Local Installation for Development + +If you intend to make modifications to `mlagents` or `mlagents_envs`, you should +install the packages from the cloned repository rather than from PyPi. To do +this, you will need to install `mlagents` and `mlagents_envs` separately. From +the repository's root directory, run: + +```sh +pip3 install torch -f https://download.pytorch.org/whl/torch_stable.html +pip3 install -e ./ml-agents-envs +pip3 install -e ./ml-agents +``` + +Running pip with the `-e` flag will let you make changes to the Python files +directly and have those reflected when you run `mlagents-learn`. It is important +to install these packages in this order as the `mlagents` package depends on +`mlagents_envs`, and installing it in the other order will download +`mlagents_envs` from PyPi. + +## Next Steps + +The [Getting Started](Getting-Started.md) guide contains several short tutorials +on setting up the ML-Agents Toolkit within Unity, running a pre-trained model, +in addition to building and training environments. + +## Help + +If you run into any problems regarding ML-Agents, refer to our [FAQ](FAQ.md) and +our [Limitations](Limitations.md) pages. If you can't find anything please +[submit an issue](https://github.com/Unity-Technologies/ml-agents/issues) and +make sure to cite relevant information on OS, Python version, and exact error +message (whenever possible). diff --git a/docs/Integrations-Match3.md b/docs/Integrations-Match3.md new file mode 100644 index 0000000000000000000000000000000000000000..6b462501779a47ea5936f7410ca62863d1d3420e --- /dev/null +++ b/docs/Integrations-Match3.md @@ -0,0 +1,109 @@ +# Match-3 with ML-Agents + + + +## Getting started +The C# code for Match-3 exists inside of the Unity package (`com.unity.ml-agents`). +The good first step would be to take a look at how we have implemented the C# code in the example Match-3 scene (located +under /Project/Assets/ML-Agents/Examples/match3). Once you have some familiarity, then the next step would be to +implement the C# code for Match-3 from the extensions package. + +Additionally, see below for additional technical specifications on the C# code for Match-3. Please note the Match-3 game +isn't human playable as implemented and can be only played via training. + +## Technical specifications for Match-3 with ML-Agents + +### AbstractBoard class +The `AbstractBoard` is the bridge between ML-Agents and your game. It allows ML-Agents to +* ask your game what the current and maximum sizes (rows, columns, and potential piece types) of the board are +* ask your game what the "color" of a cell is +* ask whether the cell is a "special" piece type or not +* ask your game whether a move is allowed +* request that your game make a move + +These are handled by implementing the abstract methods of `AbstractBoard`. + +##### `public abstract BoardSize GetMaxBoardSize()` +Returns the largest `BoardSize` that the game can use. This is used to determine the sizes of observations and sensors, +so don't make it larger than necessary. + +##### `public virtual BoardSize GetCurrentBoardSize()` +Returns the current size of the board. Each field on this BoardSize must be less than or equal to the corresponding +field returned by `GetMaxBoardSize()`. This method is optional; if your always use the same size board, you don't +need to override it. + +If the current board size is smaller than the maximum board size, `GetCellType()` and `GetSpecialType()` will not be +called for cells outside the current board size, and `IsValidMove` won't be called for moves that would go outside of +the current board size. + +##### `public abstract int GetCellType(int row, int col)` +Returns the "color" of piece at the given row and column. +This should be between 0 and BoardSize.NumCellTypes-1 (inclusive). +The actual order of the values doesn't matter. + +##### `public abstract int GetSpecialType(int row, int col)` +Returns the special type of the piece at the given row and column. +This should be between 0 and BoardSize.NumSpecialTypes (inclusive). +The actual order of the values doesn't matter. + +##### `public abstract bool IsMoveValid(Move m)` +Check whether the particular `Move` is valid for the game. +The actual results will depend on the rules of the game, but we provide the `SimpleIsMoveValid()` method +that handles basic match3 rules with no special or immovable pieces. + +##### `public abstract bool MakeMove(Move m)` +Instruct the game to make the given move. Returns true if the move was made. +Note that during training, a move that was marked as invalid may occasionally still be +requested. If this happens, it is safe to do nothing and request another move. + +### `Move` struct +The Move struct encapsulates a swap of two adjacent cells. You can get the number of potential moves +for a board of a given size with. `Move.NumPotentialMoves(maxBoardSize)`. There are two helper +functions to create a new `Move`: +* `public static Move FromMoveIndex(int moveIndex, BoardSize maxBoardSize)` can be used to +iterate over all potential moves for the board by looping from 0 to `Move.NumPotentialMoves()` +* `public static Move FromPositionAndDirection(int row, int col, Direction dir, BoardSize maxBoardSize)` creates +a `Move` from a row, column, and direction (and board size). + +### `BoardSize` struct +Describes the "size" of the board, including the number of potential piece types that the board can have. +This is returned by the AbstractBoard.GetMaxBoardSize() and GetCurrentBoardSize() methods. + +#### `Match3Sensor` and `Match3SensorComponent` classes +The `Match3Sensor` generates observations about the state using the `AbstractBoard` interface. You can +choose whether to use vector or "visual" observations; in theory, visual observations should perform +better because they are 2-dimensional like the board, but we need to experiment more on this. + +A `Match3SensorComponent` generates `Match3Sensor`s (the exact number of sensors depends on your configuration) +at runtime, and should be added to the same GameObject as your `Agent` implementation. You do not need to write any +additional code to use them. + +#### `Match3Actuator` and `Match3ActuatorComponent` classes +The `Match3Actuator` converts actions from training or inference into a `Move` that is sent to` AbstractBoard.MakeMove()` +It also checks `AbstractBoard.IsMoveValid` for each potential move and uses this to set the action mask for Agent. + +A `Match3ActuatorComponent` generates a `Match3Actuator` at runtime, and should be added to the same GameObject +as your `Agent` implementation. You do not need to write any additional code to use them. + +### Setting up Match-3 simulation +* Implement the `AbstractBoard` methods to integrate with your game. +* Give the `Agent` rewards when it does what you want it to (match multiple pieces in a row, clears pieces of a certain +type, etc). +* Add the `Agent`, `AbstractBoard` implementation, `Match3SensorComponent`, and `Match3ActuatorComponent` to the same +`GameObject`. +* Call `Agent.RequestDecision()` when you're ready for the `Agent` to make a move on the next `Academy` step. During +the next `Academy` step, the `MakeMove()` method on the board will be called. + +## Implementation Details + +### Action Space +The indexing for actions is the same as described in +[Human Like Playtesting with Deep Learning](https://www.researchgate.net/publication/328307928_Human-Like_Playtesting_with_Deep_Learning) +(for example, Figure 2b). The horizontal moves are enumerated first, then the vertical ones. + + +## Feedback +If you are a Match-3 developer and are trying to leverage ML-Agents for this scenario, +[we want to hear from you](https://forms.gle/TBsB9jc8WshgzViU9). Additionally, we are also looking for interested +Match-3 teams to speak with us for 45 minutes. If you are interested, please indicate that in the +[form](https://forms.gle/TBsB9jc8WshgzViU9). If selected, we will provide gift cards as a token of appreciation. diff --git a/docs/Integrations.md b/docs/Integrations.md new file mode 100644 index 0000000000000000000000000000000000000000..4a007c18666071ad13cc114845536121875cfd67 --- /dev/null +++ b/docs/Integrations.md @@ -0,0 +1,10 @@ +# Game Integrations +ML-Agents provides some utilities to make it easier to integrate with some common genres of games. + +## Match-3 +The [Match-3 integration](Integrations-Match3.md) provides an abstraction of a match-3 game board and moves, along with +a sensor to observe the game state, and an actuator to translate the ML-Agent actions into game moves. + +## Interested in more game templates? +Do you have a type of game you are interested for ML-Agents? If so, please post a +[forum issue](https://forum.unity.com/forums/ml-agents.453/) with `[GAME TEMPLATE]` in the title. diff --git a/docs/LICENSE.md b/docs/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..b5bebb551dc782c8e46498a3a34fe7a5d05c4e21 --- /dev/null +++ b/docs/LICENSE.md @@ -0,0 +1 @@ +{!../LICENSE.md!} diff --git a/docs/Learning-Environment-Create-New.md b/docs/Learning-Environment-Create-New.md new file mode 100644 index 0000000000000000000000000000000000000000..adec58080a712768549ff8505f5a5ac48c3a0a92 --- /dev/null +++ b/docs/Learning-Environment-Create-New.md @@ -0,0 +1,498 @@ +# Making a New Learning Environment + +This tutorial walks through the process of creating a Unity Environment from +scratch. We recommend first reading the [Getting Started](Getting-Started.md) +guide to understand the concepts presented here first in an already-built +environment. + +![A simple ML-Agents environment](images/mlagents-NewTutSplash.png) + +In this example, we will create an agent capable of controlling a ball on a +platform. We will then train the agent to roll the ball toward the cube while +avoiding falling off the platform. + +## Overview + +Using the ML-Agents Toolkit in a Unity project involves the following basic +steps: + +1. Create an environment for your agents to live in. An environment can range + from a simple physical simulation containing a few objects to an entire game + or ecosystem. +1. Implement your Agent subclasses. An Agent subclass defines the code an Agent + uses to observe its environment, to carry out assigned actions, and to + calculate the rewards used for reinforcement training. You can also implement + optional methods to reset the Agent when it has finished or failed its task. +1. Add your Agent subclasses to appropriate GameObjects, typically, the object + in the scene that represents the Agent in the simulation. + +**Note:** If you are unfamiliar with Unity, refer to the +[Unity manual](https://docs.unity3d.com/Manual/index.html) +if an Editor task isn't explained sufficiently in this tutorial. + +If you haven't already, follow the [installation instructions](Installation.md). + +## Set Up the Unity Project + +The first task to accomplish is simply creating a new Unity project and +importing the ML-Agents assets into it: + +1. Launch Unity Hub and create a new 3D project named "RollerBall". +1. [Add the ML-Agents Unity package](Installation.md#install-the-comunityml-agents-unity-package) + to your project. + +Your Unity **Project** window should contain the following assets: + +

+ Project window +

+ +## Create the Environment + +Next, we will create a very simple scene to act as our learning environment. The +"physical" components of the environment include a Plane to act as the floor for +the Agent to move around on, a Cube to act as the goal or target for the agent +to seek, and a Sphere to represent the Agent itself. + +### Create the Floor Plane + +1. Right click in Hierarchy window, select 3D Object > Plane. +1. Name the GameObject "Floor". +1. Select the Floor Plane to view its properties in the Inspector window. +1. Set Transform to Position = `(0, 0, 0)`, Rotation = `(0, 0, 0)`, Scale = + `(1, 1, 1)`. + +

+ The Floor in the Inspector window +

+ +### Add the Target Cube + +1. Right click in Hierarchy window, select 3D Object > Cube. +1. Name the GameObject "Target". +1. Select the Target Cube to view its properties in the Inspector window. +1. Set Transform to Position = `(3, 0.5, 3)`, Rotation = `(0, 0, 0)`, Scale = + `(1, 1, 1)`. + +

+ The Target Cube in the Inspector window +

+ +### Add the Agent Sphere + +1. Right click in Hierarchy window, select 3D Object > Sphere. +1. Name the GameObject "RollerAgent". +1. Select the RollerAgent Sphere to view its properties in the Inspector window. +1. Set Transform to Position = `(0, 0.5, 0)`, Rotation = `(0, 0, 0)`, Scale = + `(1, 1, 1)`. +1. Click **Add Component**. +1. Add the `Rigidbody` component to the Sphere. + +### Group into Training Area + +Group the floor, target and agent under a single, empty, GameObject. This will simplify +some of our subsequent steps. + +To do so: + +1. Right-click on your Project Hierarchy and create a new empty GameObject. Name + it TrainingArea. +1. Reset the TrainingArea’s Transform so that it is at `(0,0,0)` with Rotation + `(0,0,0)` and Scale `(1,1,1)`. +1. Drag the Floor, Target, and RollerAgent GameObjects in the Hierarchy into the + TrainingArea GameObject. + +

+ The Hierarchy window +

+ +## Implement an Agent + +To create the Agent Script: + +1. Select the RollerAgent GameObject to view it in the Inspector window. +1. Click **Add Component**. +1. Click **New Script** in the list of components (at the bottom). +1. Name the script "RollerAgent". +1. Click **Create and Add**. + +Then, edit the new `RollerAgent` script: + +1. In the Unity Project window, double-click the `RollerAgent` script to open it + in your code editor. +1. Import ML-Agent package by adding + + ```csharp + using Unity.MLAgents; + using Unity.MLAgents.Sensors; + using Unity.MLAgents.Actuators; + ``` + then change the base class from `MonoBehaviour` to `Agent`. +1. Delete `Update()` since we are not using it, but keep `Start()`. + +So far, these are the basic steps that you would use to add ML-Agents to any +Unity project. Next, we will add the logic that will let our Agent learn to roll +to the cube using reinforcement learning. More specifically, we will need to +extend three methods from the `Agent` base class: + +- `OnEpisodeBegin()` +- `CollectObservations(VectorSensor sensor)` +- `OnActionReceived(ActionBuffers actionBuffers)` + +We overview each of these in more detail in the dedicated subsections below. + +### Initialization and Resetting the Agent + +The process of training in the ML-Agents Toolkit involves running episodes where +the Agent (Sphere) attempts to solve the task. Each episode lasts until the +Agents solves the task (i.e. reaches the cube), fails (rolls off the platform) +or times out (takes too long to solve or fail at the task). At the start of each +episode, `OnEpisodeBegin()` is called to set-up the environment for a +new episode. Typically the scene is initialized in a random manner to enable the +agent to learn to solve the task under a variety of conditions. + +In this example, each time the Agent (Sphere) reaches its target (Cube), the +episode ends and the target (Cube) is moved to a new random location; and if +the Agent rolls off the platform, it will be put back onto the floor. +These are all handled in `OnEpisodeBegin()`. + +To move the target (Cube), we need a reference to its Transform (which stores a +GameObject's position, orientation and scale in the 3D world). To get this +reference, add a public field of type `Transform` to the RollerAgent class. +Public fields of a component in Unity get displayed in the Inspector window, +allowing you to choose which GameObject to use as the target in the Unity +Editor. + +To reset the Agent's velocity (and later to apply force to move the agent) we +need a reference to the Rigidbody component. A +[Rigidbody](https://docs.unity3d.com/ScriptReference/Rigidbody.html) is Unity's +primary element for physics simulation. (See +[Physics](https://docs.unity3d.com/Manual/PhysicsSection.html) for full +documentation of Unity physics.) Since the Rigidbody component is on the same +GameObject as our Agent script, the best way to get this reference is using +`GameObject.GetComponent()`, which we can call in our script's `Start()` +method. + +So far, our RollerAgent script looks like: + +```csharp +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Sensors; + +public class RollerAgent : Agent +{ + Rigidbody rBody; + void Start () { + rBody = GetComponent(); + } + + public Transform Target; + public override void OnEpisodeBegin() + { + // If the Agent fell, zero its momentum + if (this.transform.localPosition.y < 0) + { + this.rBody.angularVelocity = Vector3.zero; + this.rBody.velocity = Vector3.zero; + this.transform.localPosition = new Vector3( 0, 0.5f, 0); + } + + // Move the target to a new spot + Target.localPosition = new Vector3(Random.value * 8 - 4, + 0.5f, + Random.value * 8 - 4); + } +} +``` + +Next, let's implement the `Agent.CollectObservations(VectorSensor sensor)` +method. + +### Observing the Environment + +The Agent sends the information we collect to the Brain, which uses it to make a +decision. When you train the Agent (or use a trained model), the data is fed +into a neural network as a feature vector. For an Agent to successfully learn a +task, we need to provide the correct information. A good rule of thumb for +deciding what information to collect is to consider what you would need to +calculate an analytical solution to the problem. + +In our case, the information our Agent collects includes the position of the +target, the position of the agent itself, and the velocity of the agent. This +helps the Agent learn to control its speed so it doesn't overshoot the target +and roll off the platform. In total, the agent observation contains 8 values as +implemented below: + +```csharp +public override void CollectObservations(VectorSensor sensor) +{ + // Target and Agent positions + sensor.AddObservation(Target.localPosition); + sensor.AddObservation(this.transform.localPosition); + + // Agent velocity + sensor.AddObservation(rBody.velocity.x); + sensor.AddObservation(rBody.velocity.z); +} +``` + +### Taking Actions and Assigning Rewards + +The final part of the Agent code is the `Agent.OnActionReceived()` method, which +receives actions and assigns the reward. + +#### Actions + +To solve the task of moving towards the target, the Agent (Sphere) needs to be +able to move in the `x` and `z` directions. As such, the agent needs 2 actions: +the first determines the force applied along the x-axis; and the +second determines the force applied along the z-axis. (If we allowed the Agent +to move in three dimensions, then we would need a third action.) + +The RollerAgent applies the values from the `action[]` array to its Rigidbody +component `rBody`, using `Rigidbody.AddForce()`: + +```csharp +Vector3 controlSignal = Vector3.zero; +controlSignal.x = action[0]; +controlSignal.z = action[1]; +rBody.AddForce(controlSignal * forceMultiplier); +``` + +#### Rewards + +Reinforcement learning requires rewards to signal which decisions are good and +which are bad. The learning algorithm uses the rewards to determine whether it +is giving the Agent the optimal actions. You want to reward an Agent for +completing the assigned task. In this case, the Agent is given a reward of 1.0 +for reaching the Target cube. + +Rewards are assigned in `OnActionReceived()`. The RollerAgent +calculates the distance to detect when it reaches the target. +When it does, the code calls `Agent.SetReward()` to assign a reward +of 1.0 and marks the agent as finished by calling `EndEpisode()` on +the Agent. + +```csharp +float distanceToTarget = Vector3.Distance(this.transform.localPosition, Target.localPosition); +// Reached target +if (distanceToTarget < 1.42f) +{ + SetReward(1.0f); + EndEpisode(); +} +``` + +Finally, if the Agent falls off the platform, end the episode so that it can +reset itself: + +```csharp +// Fell off platform +if (this.transform.localPosition.y < 0) +{ + EndEpisode(); +} +``` + +#### OnActionReceived() + +With the action and reward logic outlined above, the final version of +`OnActionReceived()` looks like: + +```csharp +public float forceMultiplier = 10; +public override void OnActionReceived(ActionBuffers actionBuffers) +{ + // Actions, size = 2 + Vector3 controlSignal = Vector3.zero; + controlSignal.x = actionBuffers.ContinuousActions[0]; + controlSignal.z = actionBuffers.ContinuousActions[1]; + rBody.AddForce(controlSignal * forceMultiplier); + + // Rewards + float distanceToTarget = Vector3.Distance(this.transform.localPosition, Target.localPosition); + + // Reached target + if (distanceToTarget < 1.42f) + { + SetReward(1.0f); + EndEpisode(); + } + + // Fell off platform + else if (this.transform.localPosition.y < 0) + { + EndEpisode(); + } +} +``` + +Note the `forceMultiplier` class variable is defined before the method definition. +Since `forceMultiplier` is public, you can set the value from the Inspector window. + +## Final Agent Setup in Editor + +Now that all the GameObjects and ML-Agent components are in place, it is time +to connect everything together in the Unity Editor. This involves adding and +setting some of the Agent Component's properties so that they are compatible +with our Agent script. + +1. Select the **RollerAgent** GameObject to show its properties in the Inspector + window. +1. Drag the Target GameObject in the Hierarchy into the `Target` field in RollerAgent Script. +1. Add a `Decision Requester` script with the **Add Component** button. + Set the **Decision Period** to `10`. For more information on decisions, + see [the Agent documentation](Learning-Environment-Design-Agents.md#decisions) +1. Add a `Behavior Parameters` script with the **Add Component** button. + Set the Behavior Parameters of the Agent to the following: + - `Behavior Name`: _RollerBall_ + - `Vector Observation` > `Space Size` = 8 + - `Actions` > `Continuous Actions` = 2 + +In the inspector, the `RollerAgent` should look like this now: +

+ The Agent GameObject in the Inspector window +

+ +Now you are ready to test the environment before training. + +## Testing the Environment + +It is always a good idea to first test your environment by controlling the Agent +using the keyboard. To do so, you will need to extend the `Heuristic()` method +in the `RollerAgent` class. For our example, the heuristic will generate an +action corresponding to the values of the "Horizontal" and "Vertical" input axis +(which correspond to the keyboard arrow keys): + +```csharp +public override void Heuristic(in ActionBuffers actionsOut) +{ + var continuousActionsOut = actionsOut.ContinuousActions; + continuousActionsOut[0] = Input.GetAxis("Horizontal"); + continuousActionsOut[1] = Input.GetAxis("Vertical"); +} +``` + +In order for the Agent to use the Heuristic, You will need to set the +`Behavior Type` to `Heuristic Only` in the `Behavior Parameters` of the +RollerAgent. + +Press **Play** to run the scene and use the arrows keys to move the Agent around +the platform. Make sure that there are no errors displayed in the Unity Editor +Console window and that the Agent resets when it reaches its target or falls +from the platform. + +## Training the Environment + +The process is the same as described in the +[Getting Started Guide](Getting-Started.md). + +The hyperparameters for training are specified in a configuration file that you +pass to the `mlagents-learn` program. Create a new `rollerball_config.yaml` file +under `config/` and include the following hyperparameter values: + +```yml +behaviors: + RollerBall: + trainer_type: ppo + hyperparameters: + batch_size: 10 + buffer_size: 100 + learning_rate: 3.0e-4 + beta: 5.0e-4 + epsilon: 0.2 + lambd: 0.99 + num_epoch: 3 + learning_rate_schedule: linear + beta_schedule: constant + epsilon_schedule: linear + network_settings: + normalize: false + hidden_units: 128 + num_layers: 2 + reward_signals: + extrinsic: + gamma: 0.99 + strength: 1.0 + max_steps: 500000 + time_horizon: 64 + summary_freq: 10000 +``` + +Hyperparameters are explained in [the training configuration file documentation](Training-Configuration-File.md) + +Since this example creates a very simple training environment with only a few +inputs and outputs, using small batch and buffer sizes speeds up the training +considerably. However, if you add more complexity to the environment or change +the reward or observation functions, you might also find that training performs +better with different hyperparameter values. In addition to setting these +hyperparameter values, the Agent **DecisionFrequency** parameter has a large +effect on training time and success. A larger value reduces the number of +decisions the training algorithm has to consider and, in this simple +environment, speeds up training. + +To train your agent, run the following command before pressing **Play** in the +Editor: + + mlagents-learn config/rollerball_config.yaml --run-id=RollerBall + +To monitor the statistics of Agent performance during training, use +[TensorBoard](Using-Tensorboard.md). + +![TensorBoard statistics display](images/mlagents-RollerAgentStats.png) + +In particular, the _cumulative_reward_ and _value_estimate_ statistics show how +well the Agent is achieving the task. In this example, the maximum reward an +Agent can earn is 1.0, so these statistics approach that value when the Agent +has successfully _solved_ the problem. + +## Optional: Multiple Training Areas within the Same Scene + +In many of the [example environments](Learning-Environment-Examples.md), many +copies of the training area are instantiated in the scene. This generally speeds +up training, allowing the environment to gather many experiences in parallel. +This can be achieved simply by instantiating many Agents with the same +`Behavior Name`. Note that we've already simplified our transition to using +multiple areas by creating the `TrainingArea` GameObject and relying on local +positions in `RollerAgent.cs`. Use the following steps to parallelize your +RollerBall environment: + +1. Drag the TrainingArea GameObject, along with its attached GameObjects, into + your Assets browser, turning it into a prefab. +1. You can now instantiate copies of the TrainingArea prefab. Drag them into + your scene, positioning them so that they do not overlap. + +Alternatively, you can use the `TrainingAreaReplicator` to replicate training areas. Use the following steps: + +1. Create a new empty Game Object in the scene. +2. Click on the new object and add a TrainingAreaReplicator component to the empty Game Object through the inspector. +3. Drag the training area to `Base Area` in the Training Area Replicator. +4. Specify the number of areas to replicate and the separation between areas. +5. Hit play and the areas will be replicated automatically! + +## Optional: Training Using Concurrent Unity Instances +Another level of parallelization comes by training using +[concurrent Unity instances](ML-Agents-Overview.md#additional-features). +For example, + +``` +mlagents-learn config/rollerball_config.yaml --run-id=RollerBall --num-envs=2 +``` + +will start ML Agents training with two environment instances. Combining multiple +training areas within the same scene, with concurrent Unity instances, effectively +gives you two levels of parallelism to speed up training. The command line option +`--num-envs=` controls the number of concurrent Unity instances that are +executed in parallel during training. diff --git a/docs/Learning-Environment-Design-Agents.md b/docs/Learning-Environment-Design-Agents.md new file mode 100644 index 0000000000000000000000000000000000000000..b9a65a88bddfdd7d1acd6c81ddc99872a4ffcb03 --- /dev/null +++ b/docs/Learning-Environment-Design-Agents.md @@ -0,0 +1,1181 @@ +# Agents + +**Table of Contents:** + +- [Decisions](#decisions) +- [Observations and Sensors](#observations-and-sensors) + - [Generating Observations](#generating-observations) + - [Agent.CollectObservations()](#agentcollectobservations) + - [Observable Fields and Properties](#observable-fields-and-properties) + - [ISensor interface and SensorComponents](#isensor-interface-and-sensorcomponents) + - [Vector Observations](#vector-observations) + - [One-hot encoding categorical information](#one-hot-encoding-categorical-information) + - [Normalization](#normalization) + - [Stacking](#stacking) + - [Vector Observation Summary & Best Practices](#vector-observation-summary--best-practices) + - [Visual Observations](#visual-observations) + - [Visual Observation Summary & Best Practices](#visual-observation-summary--best-practices) + - [Raycast Observations](#raycast-observations) + - [RayCast Observation Summary & Best Practices](#raycast-observation-summary--best-practices) + - [Variable Length Observations](#variable-length-observations) + - [Variable Length Observation Summary & Best Practices](#variable-length-observation-summary--best-practices) + - [Goal Signal](#goal-signal) + - [Goal Signal Summary & Best Practices](#goal-signal-summary--best-practices) +- [Actions and Actuators](#actions-and-actuators) + - [Continuous Actions](#continuous-actions) + - [Discrete Actions](#discrete-actions) + - [Masking Discrete Actions](#masking-discrete-actions) + - [Actions Summary & Best Practices](#actions-summary--best-practices) +- [Rewards](#rewards) + - [Examples](#examples) + - [Rewards Summary & Best Practices](#rewards-summary--best-practices) +- [Agent Properties](#agent-properties) +- [Destroying an Agent](#destroying-an-agent) +- [Defining Multi-agent Scenarios](#defining-multi-agent-scenarios) + - [Teams for Adversarial Scenarios](#teams-for-adversarial-scenarios) + - [Groups for Cooperative Scenarios](#groups-for-cooperative-scenarios) +- [Recording Demonstrations](#recording-demonstrations) + +An agent is an entity that can observe its environment, decide on the best +course of action using those observations, and execute those actions within its +environment. Agents can be created in Unity by extending the `Agent` class. The +most important aspects of creating agents that can successfully learn are the +observations the agent collects, and the reward you assign to estimate the value +of the agent's current state toward accomplishing its tasks. + +An Agent passes its observations to its Policy. The Policy then makes a decision +and passes the chosen action back to the agent. Your agent code must execute the +action, for example, move the agent in one direction or another. In order to +[train an agent using reinforcement learning](Learning-Environment-Design.md), +your agent must calculate a reward value at each action. The reward is used to +discover the optimal decision-making policy. + +The `Policy` class abstracts out the decision making logic from the Agent itself +so that you can use the same Policy in multiple Agents. How a Policy makes its +decisions depends on the `Behavior Parameters` associated with the agent. If you +set `Behavior Type` to `Heuristic Only`, the Agent will use its `Heuristic()` +method to make decisions which can allow you to control the Agent manually or +write your own Policy. If the Agent has a `Model` file, its Policy will use the +neural network `Model` to take decisions. + +When you create an Agent, you should usually extend the base Agent class. This +includes implementing the following methods: + +- `Agent.OnEpisodeBegin()` — Called at the beginning of an Agent's episode, + including at the beginning of the simulation. +- `Agent.CollectObservations(VectorSensor sensor)` — Called every step that the Agent + requests a decision. This is one possible way for collecting the Agent's + observations of the environment; see [Generating Observations](#generating-observations) + below for more options. +- `Agent.OnActionReceived()` — Called every time the Agent receives an action to + take. Receives the action chosen by the Agent. It is also common to assign a + reward in this method. +- `Agent.Heuristic()` - When the `Behavior Type` is set to `Heuristic Only` in + the Behavior Parameters of the Agent, the Agent will use the `Heuristic()` + method to generate the actions of the Agent. As such, the `Heuristic()` method + writes to the array of floats provided to the Heuristic method as argument. + __Note__: Do not create a new float array of action in the `Heuristic()` method, + as this will prevent writing floats to the original action array. + +As a concrete example, here is how the Ball3DAgent class implements these methods: + +- `Agent.OnEpisodeBegin()` — Resets the agent cube and ball to their starting + positions. The function randomizes the reset values so that the training + generalizes to more than a specific starting position and agent cube + orientation. +- `Agent.CollectObservations(VectorSensor sensor)` — Adds information about the + orientation of the agent cube, the ball velocity, and the relative position + between the ball and the cube. Since the `CollectObservations()` + method calls `VectorSensor.AddObservation()` such that vector size adds up to 8, + the Behavior Parameters of the Agent are set with vector observation space + with a state size of 8. +- `Agent.OnActionReceived()` — The action results + in a small change in the agent cube's rotation at each step. In this example, + an Agent receives a small positive reward for each step it keeps the ball on the + agent cube's head and a larger, negative reward for dropping the ball. An + Agent's episode is also ended when it drops the ball so that it will reset + with a new ball for the next simulation step. +- `Agent.Heuristic()` - Converts the keyboard inputs into actions. + +## Decisions + +The observation-decision-action-reward cycle repeats each time the Agent request +a decision. Agents will request a decision when `Agent.RequestDecision()` is +called. If you need the Agent to request decisions on its own at regular +intervals, add a `Decision Requester` component to the Agent's GameObject. +Making decisions at regular step intervals is generally most appropriate for +physics-based simulations. For example, an agent in a robotic simulator that +must provide fine-control of joint torques should make its decisions every step +of the simulation. In games such as real-time strategy, where many agents make +their decisions at regular intervals, the decision timing for each agent can be +staggered by setting the `DecisionStep` parameter in the `Decision Requester` +component for each agent. On the other hand, an agent that only needs to make +decisions when certain game or simulation events occur, such as in a turn-based +game, should call `Agent.RequestDecision()` manually. + +## Observations and Sensors +In order for an agent to learn, the observations should include all the +information an agent needs to accomplish its task. Without sufficient and +relevant information, an agent may learn poorly or may not learn at all. A +reasonable approach for determining what information should be included is to +consider what you would need to calculate an analytical solution to the problem, +or what you would expect a human to be able to use to solve the problem. + +### Generating Observations +ML-Agents provides multiple ways for an Agent to make observations: + 1. Overriding the `Agent.CollectObservations()` method and passing the + observations to the provided `VectorSensor`. + 1. Adding the `[Observable]` attribute to fields and properties on the Agent. + 1. Implementing the `ISensor` interface, using a `SensorComponent` attached to + the Agent to create the `ISensor`. + +#### Agent.CollectObservations() +Agent.CollectObservations() is best used for aspects of the environment which are +numerical and non-visual. The Policy class calls the +`CollectObservations(VectorSensor sensor)` method of each Agent. Your +implementation of this function must call `VectorSensor.AddObservation` to add +vector observations. + +The `VectorSensor.AddObservation` method provides a number of overloads for +adding common types of data to your observation vector. You can add Integers and +booleans directly to the observation vector, as well as some common Unity data +types such as `Vector2`, `Vector3`, and `Quaternion`. + +For examples of various state observation functions, you can look at the +[example environments](Learning-Environment-Examples.md) included in the +ML-Agents SDK. For instance, the 3DBall example uses the rotation of the +platform, the relative position of the ball, and the velocity of the ball as its +state observation. + +```csharp +public GameObject ball; + +public override void CollectObservations(VectorSensor sensor) +{ + // Orientation of the cube (2 floats) + sensor.AddObservation(gameObject.transform.rotation.z); + sensor.AddObservation(gameObject.transform.rotation.x); + // Relative position of the ball to the cube (3 floats) + sensor.AddObservation(ball.transform.position - gameObject.transform.position); + // Velocity of the ball (3 floats) + sensor.AddObservation(m_BallRb.velocity); + // 8 floats total +} +``` + +As an experiment, you can remove the velocity components from +the observation and retrain the 3DBall agent. While it will learn to balance the +ball reasonably well, the performance of the agent without using velocity is +noticeably worse. + +The observations passed to `VectorSensor.AddObservation()` must always contain +the same number of elements must always be in the same order. If the number +of observed entities in an environment can vary, you can pad the calls +with zeros for any missing entities in a specific observation, or you can limit +an agent's observations to a fixed subset. For example, instead of observing +every enemy in an environment, you could only observe the closest five. + +Additionally, when you set up an Agent's `Behavior Parameters` in the Unity +Editor, you must set the **Vector Observations > Space Size** +to equal the number of floats that are written by `CollectObservations()`. + +#### Observable Fields and Properties +Another approach is to define the relevant observations as fields or properties +on your Agent class, and annotate them with an `ObservableAttribute`. For +example, in the Ball3DHardAgent, the difference between positions could be observed +by adding a property to the Agent: +```csharp +using Unity.MLAgents.Sensors.Reflection; + +public class Ball3DHardAgent : Agent { + + [Observable(numStackedObservations: 9)] + Vector3 PositionDelta + { + get + { + return ball.transform.position - gameObject.transform.position; + } + } +} +``` +`ObservableAttribute` currently supports most basic types (e.g. floats, ints, +bools), as well as `Vector2`, `Vector3`, `Vector4`, `Quaternion`, and enums. + +The behavior of `ObservableAttribute`s are controlled by the "Observable Attribute +Handling" in the Agent's `Behavior Parameters`. The possible values for this are: + * **Ignore** (default) - All ObservableAttributes on the Agent will be ignored. + If there are no ObservableAttributes on the Agent, this will result in the + fastest initialization time. + * **Exclude Inherited** - Only members on the declared class will be examined; + members that are inherited are ignored. This is a reasonable tradeoff between + performance and flexibility. + * **Examine All** All members on the class will be examined. This can lead to + slower startup times. + +"Exclude Inherited" is generally sufficient, but if your Agent inherits from +another Agent implementation that has Observable members, you will need to use +"Examine All". + +Internally, ObservableAttribute uses reflection to determine which members of +the Agent have ObservableAttributes, and also uses reflection to access the +fields or invoke the properties at runtime. This may be slower than using +CollectObservations or an ISensor, although this might not be enough to +noticeably affect performance. + +**NOTE**: you do not need to adjust the Space Size in the Agent's +`Behavior Parameters` when you add `[Observable]` fields or properties to an +Agent, since their size can be computed before they are used. + +#### ISensor interface and SensorComponents +The `ISensor` interface is generally intended for advanced users. The `Write()` +method is used to actually generate the observation, but some other methods +such as returning the shape of the observations must also be implemented. + +The `SensorComponent` abstract class is used to create the actual `ISensor` at +runtime. It must be attached to the same `GameObject` as the `Agent`, or to a +child `GameObject`. + +There are several SensorComponents provided in the API, including: +- `CameraSensorComponent` - Uses images from a `Camera` as observations. +- `RenderTextureSensorComponent` - Uses the content of a `RenderTexture` as +observations. +- `RayPerceptionSensorComponent` - Uses the information from set of ray casts +as observations. +- `Match3SensorComponent` - Uses the board of a [Match-3 game](Integrations-Match3.md) +as observations. +- `GridSensorComponent` - Uses a set of box queries in a grid shape as +observations. + +**NOTE**: you do not need to adjust the Space Size in the Agent's +`Behavior Parameters` when using `SensorComponents`s. + +Internally, both `Agent.CollectObservations` and `[Observable]` attribute use an +ISensors to write observations, although this is mostly abstracted from the user. + +### Vector Observations +Both `Agent.CollectObservations()` and `ObservableAttribute`s produce vector +observations, which are represented at lists of `float`s. `ISensor`s can +produce both vector observations and visual observations, which are +multi-dimensional arrays of floats. + +Below are some additional considerations when dealing with vector observations: + +#### One-hot encoding categorical information + +Type enumerations should be encoded in the _one-hot_ style. That is, add an +element to the feature vector for each element of enumeration, setting the +element representing the observed member to one and set the rest to zero. For +example, if your enumeration contains \[Sword, Shield, Bow\] and the agent +observes that the current item is a Bow, you would add the elements: 0, 0, 1 to +the feature vector. The following code example illustrates how to add. + +```csharp +enum ItemType { Sword, Shield, Bow, LastItem } +public override void CollectObservations(VectorSensor sensor) +{ + for (int ci = 0; ci < (int)ItemType.LastItem; ci++) + { + sensor.AddObservation((int)currentItem == ci ? 1.0f : 0.0f); + } +} +``` + +`VectorSensor` also provides a two-argument function `AddOneHotObservation()` as +a shortcut for _one-hot_ style observations. The following example is identical +to the previous one. + +```csharp +enum ItemType { Sword, Shield, Bow, LastItem } +const int NUM_ITEM_TYPES = (int)ItemType.LastItem + 1; + +public override void CollectObservations(VectorSensor sensor) +{ + // The first argument is the selection index; the second is the + // number of possibilities + sensor.AddOneHotObservation((int)currentItem, NUM_ITEM_TYPES); +} +``` + +`ObservableAttribute` has built-in support for enums. Note that you don't need +the `LastItem` placeholder in this case: +```csharp +enum ItemType { Sword, Shield, Bow } + +public class HeroAgent : Agent +{ + [Observable] + ItemType m_CurrentItem; +} +``` + +#### Normalization + +For the best results when training, you should normalize the components of your +feature vector to the range [-1, +1] or [0, 1]. When you normalize the values, +the PPO neural network can often converge to a solution faster. Note that it +isn't always necessary to normalize to these recommended ranges, but it is +considered a best practice when using neural networks. The greater the variation +in ranges between the components of your observation, the more likely that +training will be affected. + +To normalize a value to [0, 1], you can use the following formula: + +```csharp +normalizedValue = (currentValue - minValue)/(maxValue - minValue) +``` + +:warning: For vectors, you should apply the above formula to each component (x, +y, and z). Note that this is _not_ the same as using the `Vector3.normalized` +property or `Vector3.Normalize()` method in Unity (and similar for `Vector2`). + +Rotations and angles should also be normalized. For angles between 0 and 360 +degrees, you can use the following formulas: + +```csharp +Quaternion rotation = transform.rotation; +Vector3 normalized = rotation.eulerAngles / 180.0f - Vector3.one; // [-1,1] +Vector3 normalized = rotation.eulerAngles / 360.0f; // [0,1] +``` + +For angles that can be outside the range [0,360], you can either reduce the +angle, or, if the number of turns is significant, increase the maximum value +used in your normalization formula. + +#### Stacking +Stacking refers to repeating observations from previous steps as part of a +larger observation. For example, consider an Agent that generates these +observations in four steps +``` +step 1: [0.1] +step 2: [0.2] +step 3: [0.3] +step 4: [0.4] +``` + +If we use a stack size of 3, the observations would instead be: +```csharp +step 1: [0.1, 0.0, 0.0] +step 2: [0.2, 0.1, 0.0] +step 3: [0.3, 0.2, 0.1] +step 4: [0.4, 0.3, 0.2] +``` +(The observations are padded with zeroes for the first `stackSize-1` steps). +This is a simple way to give an Agent limited "memory" without the complexity +of adding a recurrent neural network (RNN). + +The steps for enabling stacking depends on how you generate observations: +* For Agent.CollectObservations(), set "Stacked Vectors" on the Agent's + `Behavior Parameters` to a value greater than 1. +* For ObservableAttribute, set the `numStackedObservations` parameter in the + constructor, e.g. `[Observable(numStackedObservations: 2)]`. +* For `ISensor`s, wrap them in a `StackingSensor` (which is also an `ISensor`). + Generally, this should happen in the `CreateSensor()` method of your + `SensorComponent`. + +#### Vector Observation Summary & Best Practices + +- Vector Observations should include all variables relevant for allowing the + agent to take the optimally informed decision, and ideally no extraneous + information. +- In cases where Vector Observations need to be remembered or compared over + time, either an RNN should be used in the model, or the `Stacked Vectors` + value in the agent GameObject's `Behavior Parameters` should be changed. +- Categorical variables such as type of object (Sword, Shield, Bow) should be + encoded in one-hot fashion (i.e. `3` -> `0, 0, 1`). This can be done + automatically using the `AddOneHotObservation()` method of the `VectorSensor`, + or using `[Observable]` on an enum field or property of the Agent. +- In general, all inputs should be normalized to be in the range 0 to +1 (or -1 + to 1). For example, the `x` position information of an agent where the maximum + possible value is `maxValue` should be recorded as + `VectorSensor.AddObservation(transform.position.x / maxValue);` rather than + `VectorSensor.AddObservation(transform.position.x);`. +- Positional information of relevant GameObjects should be encoded in relative + coordinates wherever possible. This is often relative to the agent position. + +### Visual Observations + +Visual observations are generally provided to agent via either a `CameraSensor` +or `RenderTextureSensor`. These collect image information and transforms it into +a 3D Tensor which can be fed into the convolutional neural network (CNN) of the +agent policy. For more information on CNNs, see +[this guide](http://cs231n.github.io/convolutional-networks/). This allows +agents to learn from spatial regularities in the observation images. It is +possible to use visual and vector observations with the same agent. + +Agents using visual observations can capture state of arbitrary complexity and +are useful when the state is difficult to describe numerically. However, they +are also typically less efficient and slower to train, and sometimes don't +succeed at all as compared to vector observations. As such, they should only be +used when it is not possible to properly define the problem using vector or +ray-cast observations. + +Visual observations can be derived from Cameras or RenderTextures within your +scene. To add a visual observation to an Agent, add either a Camera Sensor +Component or RenderTextures Sensor Component to the Agent. Then drag the camera +or render texture you want to add to the `Camera` or `RenderTexture` field. You +can have more than one camera or render texture and even use a combination of +both attached to an Agent. For each visual observation, set the width and height +of the image (in pixels) and whether or not the observation is color or +grayscale. + +![Agent Camera](images/visual-observation.png) + +or + +![Agent RenderTexture](images/visual-observation-rendertexture.png) + +Each Agent that uses the same Policy must have the same number of visual +observations, and they must all have the same resolutions (including whether or +not they are grayscale). Additionally, each Sensor Component on an Agent must +have a unique name so that they can be sorted deterministically (the name must +be unique for that Agent, but multiple Agents can have a Sensor Component with +the same name). + +Visual observations also support stacking, by specifying `Observation Stacks` +to a value greater than 1. The visual observations from the last `stackSize` +steps will be stacked on the last dimension (channel dimension). + +When using `RenderTexture` visual observations, a handy feature for debugging is +adding a `Canvas`, then adding a `Raw Image` with it's texture set to the +Agent's `RenderTexture`. This will render the agent observation on the game +screen. + +![RenderTexture with Raw Image](images/visual-observation-rawimage.png) + +The [GridWorld environment](Learning-Environment-Examples.md#gridworld) is an +example on how to use a RenderTexture for both debugging and observation. Note +that in this example, a Camera is rendered to a RenderTexture, which is then +used for observations and debugging. To update the RenderTexture, the Camera +must be asked to render every time a decision is requested within the game code. +When using Cameras as observations directly, this is done automatically by the +Agent. + +![Agent RenderTexture Debug](images/gridworld.png) + +#### Visual Observation Summary & Best Practices + +- To collect visual observations, attach `CameraSensor` or `RenderTextureSensor` + components to the agent GameObject. +- Visual observations should generally only be used when vector observations are + not sufficient. +- Image size should be kept as small as possible, without the loss of needed + details for decision making. +- Images should be made grayscale in situations where color information is not + needed for making informed decisions. + +### Raycast Observations + +Raycasts are another possible method for providing observations to an agent. +This can be easily implemented by adding a `RayPerceptionSensorComponent3D` (or +`RayPerceptionSensorComponent2D`) to the Agent GameObject. + +During observations, several rays (or spheres, depending on settings) are cast +into the physics world, and the objects that are hit determine the observation +vector that is produced. + +![Agent with two RayPerceptionSensorComponent3Ds](images/ray_perception.png) + +Both sensor components have several settings: + +- _Detectable Tags_ A list of strings corresponding to the types of objects that + the Agent should be able to distinguish between. For example, in the WallJump + example, we use "wall", "goal", and "block" as the list of objects to detect. +- _Rays Per Direction_ Determines the number of rays that are cast. One ray is + always cast forward, and this many rays are cast to the left and right. +- _Max Ray Degrees_ The angle (in degrees) for the outermost rays. 90 degrees + corresponds to the left and right of the agent. +- _Sphere Cast Radius_ The size of the sphere used for sphere casting. If set to + 0, rays will be used instead of spheres. Rays may be more efficient, + especially in complex scenes. +- _Ray Length_ The length of the casts +- _Ray Layer Mask_ The [LayerMask](https://docs.unity3d.com/ScriptReference/LayerMask.html) + passed to the raycast or spherecast. This can be used to ignore certain types + of objects when casting. +- _Observation Stacks_ The number of previous results to "stack" with the cast + results. Note that this can be independent of the "Stacked Vectors" setting in + `Behavior Parameters`. +- _Start Vertical Offset_ (3D only) The vertical offset of the ray start point. +- _End Vertical Offset_ (3D only) The vertical offset of the ray end point. +- _Alternating Ray Order_ Alternating is the default, it gives an order of (0, + -delta, delta, -2*delta, 2*delta, ..., -n*delta, n*delta). If alternating is + disabled the order is left to right (-n*delta, -(n-1)*delta, ..., -delta, 0, + delta, ..., (n-1)*delta, n*delta). For general usage there is no difference + but if using custom models the left-to-right layout that matches the spatial + structuring can be preferred (e.g. for processing with conv nets). +- _Use Batched Raycasts_ (3D only) Whether to use batched raycasts. Enable to use batched raycasts and the jobs system. + +In the example image above, the Agent has two `RayPerceptionSensorComponent3D`s. +Both use 3 Rays Per Direction and 90 Max Ray Degrees. One of the components had +a vertical offset, so the Agent can tell whether it's clear to jump over the +wall. + +The total size of the created observations is + +``` +(Observation Stacks) * (1 + 2 * Rays Per Direction) * (Num Detectable Tags + 2) +``` + +so the number of rays and tags should be kept as small as possible to reduce the +amount of data used. Note that this is separate from the State Size defined in +`Behavior Parameters`, so you don't need to worry about the formula above when +setting the State Size. + +#### RayCast Observation Summary & Best Practices + +- Attach `RayPerceptionSensorComponent3D` or `RayPerceptionSensorComponent2D` to + use. +- This observation type is best used when there is relevant spatial information + for the agent that doesn't require a fully rendered image to convey. +- Use as few rays and tags as necessary to solve the problem in order to improve + learning stability and agent performance. +- If you run into performance issues, try using batched raycasts by enabling the _Use Batched Raycast_ setting. + (Only available for 3D ray perception sensors.) + +### Grid Observations +Grid-base observations combine the advantages of 2D spatial representation in +visual observations, and the flexibility of defining detectable objects in +RayCast observations. The sensor uses a set of box queries in a grid shape and +gives a top-down 2D view around the agent. This can be implemented by adding a +`GridSensorComponent` to the Agent GameObject. + +During observations, the sensor detects the presence of detectable objects in +each cell and encode that into one-hot representation. The collected information +from each cell forms a 3D tensor observation and will be fed into the +convolutional neural network (CNN) of the agent policy just like visual +observations. + +![Agent with GridSensorComponent](images/grid_sensor.png) + +The sensor component has the following settings: +- _Cell Scale_ The scale of each cell in the grid. +- _Grid Size_ Number of cells on each side of the grid. +- _Agent Game Object_ The Agent that holds the grid sensor. This is used to + disambiguate objects with the same tag as the agent so that the agent doesn't + detect itself. +- _Rotate With Agent_ Whether the grid rotates with the Agent. +- _Detectable Tags_ A list of strings corresponding to the types of objects that + the Agent should be able to distinguish between. +- _Collider Mask_ The [LayerMask](https://docs.unity3d.com/ScriptReference/LayerMask.html) + passed to the collider detection. This can be used to ignore certain types + of objects. +- _Initial Collider Buffer Size_ The initial size of the Collider buffer used + in the non-allocating Physics calls for each cell. +- _Max Collider Buffer Size_ The max size of the Collider buffer used in the + non-allocating Physics calls for each cell. + +The observation for each grid cell is a one-hot encoding of the detected object. +The total size of the created observations is + +``` +GridSize.x * GridSize.z * Num Detectable Tags +``` + +so the number of detectable tags and size of the grid should be kept as small as +possible to reduce the amount of data used. This makes a trade-off between the +granularity of the observation and training speed. + +To allow more variety of observations that grid sensor can capture, the +`GridSensorComponent` and the underlying `GridSensorBase` also provides interfaces +that can be overridden to collect customized observation from detected objects. +See the doc on +[extending grid Sensors](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/com.unity.ml-agents.extensions/Documentation~/CustomGridSensors.md) +for more details on custom grid sensors. + +__Note__: The `GridSensor` only works in 3D environments and will not behave +properly in 2D environments. + +#### Grid Observation Summary & Best Practices + +- Attach `GridSensorComponent` to use. +- This observation type is best used when there is relevant non-visual spatial information that + can be best captured in 2D representations. +- Use as small grid size and as few tags as necessary to solve the problem in order to improve + learning stability and agent performance. +- Do not use `GridSensor` in a 2D game. + +### Variable Length Observations + +It is possible for agents to collect observations from a varying number of +GameObjects by using a `BufferSensor`. +You can add a `BufferSensor` to your Agent by adding a `BufferSensorComponent` to +its GameObject. +The `BufferSensor` can be useful in situations in which the Agent must pay +attention to a varying number of entities (for example, a varying number of +enemies or projectiles). +On the trainer side, the `BufferSensor` +is processed using an attention module. More information about attention +mechanisms can be found [here](https://arxiv.org/abs/1706.03762). Training or +doing inference with variable length observations can be slower than using +a flat vector observation. However, attention mechanisms enable solving +problems that require comparative reasoning between entities in a scene +such as our [Sorter environment](Learning-Environment-Examples.md#sorter). +Note that even though the `BufferSensor` can process a variable number of +entities, you still need to define a maximum number of entities. This is +because our network architecture requires to know what the shape of the +observations will be. If fewer entities are observed than the maximum, the +observation will be padded with zeros and the trainer will ignore +the padded observations. Note that attention layers are invariant to +the order of the entities, so there is no need to properly "order" the +entities before feeding them into the `BufferSensor`. + +The `BufferSensorComponent` Editor inspector has two arguments: + - `Observation Size` : This is how many floats each entities will be + represented with. This number is fixed and all entities must + have the same representation. For example, if the entities you want to + put into the `BufferSensor` have for relevant information position and + speed, then the `Observation Size` should be 6 floats. + - `Maximum Number of Entities` : This is the maximum number of entities + the `BufferSensor` will be able to collect. + +To add an entity's observations to a `BufferSensorComponent`, you need +to call `BufferSensorComponent.AppendObservation()` in the +Agent.CollectObservations() method +with a float array of size `Observation Size` as argument. + +__Note__: Currently, the observations put into the `BufferSensor` are +not normalized, you will need to normalize your observations manually +between -1 and 1. + +#### Variable Length Observation Summary & Best Practices + - Attach `BufferSensorComponent` to use. + - Call `BufferSensorComponent.AppendObservation()` in the + Agent.CollectObservations() methodto add the observations + of an entity to the `BufferSensor`. + - Normalize the entities observations before feeding them into the `BufferSensor`. + +### Goal Signal + +It is possible for agents to collect observations that will be treated as "goal signal". +A goal signal is used to condition the policy of the agent, meaning that if the goal +changes, the policy (i.e. the mapping from observations to actions) will change +as well. Note that this is true +for any observation since all observations influence the policy of the Agent to +some degree. But by specifying a goal signal explicitly, we can make this conditioning +more important to the agent. This feature can be used in settings where an agent +must learn to solve different tasks that are similar by some aspects because the +agent will learn to reuse learnings from different tasks to generalize better. +In Unity, you can specify that a `VectorSensor` or +a `CameraSensor` is a goal by attaching a `VectorSensorComponent` or a +`CameraSensorComponent` to the Agent and selecting `Goal Signal` as `Observation Type`. +On the trainer side, there are two different ways to condition the policy. This +setting is determined by the +[conditioning_type parameter](Training-Configuration-File.md#common-trainer-configurations). +If set to `hyper` (default) a [HyperNetwork](https://arxiv.org/pdf/1609.09106.pdf) +will be used to generate some of the +weights of the policy using the goal observations as input. Note that using a +HyperNetwork requires a lot of computations, it is recommended to use a smaller +number of hidden units in the policy to alleviate this. +If set to `none` the goal signal will be considered as regular observations. +For an example on how to use a goal signal, see the +[GridWorld example](Learning-Environment-Examples.md#gridworld). + +#### Goal Signal Summary & Best Practices + - Attach a `VectorSensorComponent` or `CameraSensorComponent` to an agent and + set the observation type to goal to use the feature. + - Set the conditioning_type parameter in the training configuration. + - Reduce the number of hidden units in the network when using the HyperNetwork + conditioning type. + +## Actions and Actuators + +An action is an instruction from the Policy that the agent carries out. The +action is passed to the an `IActionReceiver` (either an `Agent` or an `IActuator`) +as the `ActionBuffers` parameter when the Academy invokes the +`IActionReciever.OnActionReceived()` function. +There are two types of actions supported: **Continuous** and **Discrete**. + +Neither the Policy nor the training algorithm know anything about what the +action values themselves mean. The training algorithm simply tries different +values for the action list and observes the affect on the accumulated rewards +over time and many training episodes. Thus, the only place actions are defined +for an Agent is in the `OnActionReceived()` function. + +For example, if you designed an agent to move in two dimensions, you could use +either continuous or the discrete actions. In the continuous case, you +would set the action size to two (one for each dimension), and the +agent's Policy would output an action with two floating point values. In the +discrete case, you would use one Branch with a size of four (one for each +direction), and the Policy would create an action array containing a single +element with a value ranging from zero to three. Alternatively, you could create +two branches of size two (one for horizontal movement and one for vertical +movement), and the Policy would output an action array containing two elements +with values ranging from zero to one. You could alternatively use a combination of continuous +and discrete actions e.g., using one continuous action for horizontal movement +and a discrete branch of size two for the vertical movement. + +Note that when you are programming actions for an agent, it is often helpful to +test your action logic using the `Heuristic()` method of the Agent, which lets +you map keyboard commands to actions. + +### Continuous Actions + +When an Agent's Policy has **Continuous** actions, the +`ActionBuffers.ContinuousActions` passed to the Agent's `OnActionReceived()` function +is an array with length equal to the `Continuous Action Size` property value. The +individual values in the array have whatever meanings that you ascribe to them. +If you assign an element in the array as the speed of an Agent, for example, the +training process learns to control the speed of the Agent through this +parameter. + +The [3DBall example](Learning-Environment-Examples.md#3dball-3d-balance-ball) uses +continuous actions with two control values. + +![3DBall](images/balance.png) + +These control values are applied as rotation to the cube: + +```csharp + public override void OnActionReceived(ActionBuffers actionBuffers) + { + var actionZ = 2f * Mathf.Clamp(actionBuffers.ContinuousActions[0], -1f, 1f); + var actionX = 2f * Mathf.Clamp(actionBuffers.ContinuousActions[1], -1f, 1f); + + gameObject.transform.Rotate(new Vector3(0, 0, 1), actionZ); + gameObject.transform.Rotate(new Vector3(1, 0, 0), actionX); + } +``` + +By default the output from our provided PPO algorithm pre-clamps the values of +`ActionBuffers.ContinuousActions` into the [-1, 1] range. It is a best practice to manually clip +these as well, if you plan to use a 3rd party algorithm with your environment. +As shown above, you can scale the control values as needed after clamping them. + +### Discrete Actions + +When an Agent's Policy uses **discrete** actions, the +`ActionBuffers.DiscreteActions` passed to the Agent's `OnActionReceived()` function +is an array of integers with length equal to `Discrete Branch Size`. When defining the discrete actions, `Branches` +is an array of integers, each value corresponds to the number of possibilities for each branch. + +For example, if we wanted an Agent that can move in a plane and jump, we could +define two branches (one for motion and one for jumping) because we want our +agent be able to move **and** jump concurrently. We define the first branch to +have 5 possible actions (don't move, go left, go right, go backward, go forward) +and the second one to have 2 possible actions (don't jump, jump). The +`OnActionReceived()` method would look something like: + +```csharp +// Get the action index for movement +int movement = actionBuffers.DiscreteActions[0]; +// Get the action index for jumping +int jump = actionBuffers.DiscreteActions[1]; + +// Look up the index in the movement action list: +if (movement == 1) { directionX = -1; } +if (movement == 2) { directionX = 1; } +if (movement == 3) { directionZ = -1; } +if (movement == 4) { directionZ = 1; } +// Look up the index in the jump action list: +if (jump == 1 && IsGrounded()) { directionY = 1; } + +// Apply the action results to move the Agent +gameObject.GetComponent().AddForce( + new Vector3( + directionX * 40f, directionY * 300f, directionZ * 40f)); +``` + +#### Masking Discrete Actions + +When using Discrete Actions, it is possible to specify that some actions are +impossible for the next decision. When the Agent is controlled by a neural +network, the Agent will be unable to perform the specified action. Note that +when the Agent is controlled by its Heuristic, the Agent will still be able to +decide to perform the masked action. In order to disallow an action, override +the `Agent.WriteDiscreteActionMask()` virtual method, and call +`SetActionEnabled()` on the provided `IDiscreteActionMask`: + +```csharp +public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask) +{ + actionMask.SetActionEnabled(branch, actionIndex, isEnabled); +} +``` + +Where: + +- `branch` is the index (starting at 0) of the branch on which you want to +allow or disallow the action +- `actionIndex` is the index of the action that you want to allow or disallow. +- `isEnabled` is a bool indicating whether the action should be allowed or now. + +For example, if you have an Agent with 2 branches and on the first branch +(branch 0) there are 4 possible actions : _"do nothing"_, _"jump"_, _"shoot"_ +and _"change weapon"_. Then with the code bellow, the Agent will either _"do +nothing"_ or _"change weapon"_ for their next decision (since action index 1 and 2 +are masked) + +```csharp +actionMask.SetActionEnabled(0, 1, false); +actionMask.SetActionEnabled(0, 2, false); +``` + +Notes: + +- You can call `SetActionEnabled` multiple times if you want to put masks on multiple + branches. +- At each step, the state of an action is reset and enabled by default. +- You cannot mask all the actions of a branch. +- You cannot mask actions in continuous control. + + +### IActuator interface and ActuatorComponents +The Actuator API allows users to abstract behavior out of Agents and in to +components (similar to the ISensor API). The `IActuator` interface and `Agent` +class both implement the `IActionReceiver` interface to allow for backward compatibility +with the current `Agent.OnActionReceived`. +This means you will not have to change your code until you decide to use the `IActuator` API. + +Like the `ISensor` interface, the `IActuator` interface is intended for advanced users. + +The `ActuatorComponent` abstract class is used to create the actual `IActuator` at +runtime. It must be attached to the same `GameObject` as the `Agent`, or to a +child `GameObject`. Actuators and all of their data structures are initialized +during `Agent.Initialize`. This was done to prevent an unexpected allocations at runtime. + +You can find an example of an `IActuator` implementation in the `Basic` example scene. +**NOTE**: you do not need to adjust the Actions in the Agent's +`Behavior Parameters` when using an `IActuator` and `ActuatorComponents`. + +Internally, `Agent.OnActionReceived` uses an `IActuator` to send actions to the Agent, +although this is mostly abstracted from the user. + + +### Actions Summary & Best Practices + +- Agents can use `Discrete` and/or `Continuous` actions. +- Discrete actions can have multiple action branches, and it's possible to mask + certain actions so that they won't be taken. +- In general, fewer actions will make for easier learning. +- Be sure to set the Continuous Action Size and Discrete Branch Size to the desired + number for each type of action, and not greater, as doing the latter can interfere with the + efficiency of the training process. +- Continuous action values should be clipped to an + appropriate range. The provided PPO model automatically clips these values + between -1 and 1, but third party training systems may not do so. + +## Rewards + +In reinforcement learning, the reward is a signal that the agent has done +something right. The PPO reinforcement learning algorithm works by optimizing +the choices an agent makes such that the agent earns the highest cumulative +reward over time. The better your reward mechanism, the better your agent will +learn. + +**Note:** Rewards are not used during inference by an Agent using a trained +model and is also not used during imitation learning. + +Perhaps the best advice is to start simple and only add complexity as needed. In +general, you should reward results rather than actions you think will lead to +the desired results. You can even use the Agent's Heuristic to control the Agent +while watching how it accumulates rewards. + +Allocate rewards to an Agent by calling the `AddReward()` or `SetReward()` +methods on the agent. The reward assigned between each decision should be in the +range [-1,1]. Values outside this range can lead to unstable training. The +`reward` value is reset to zero when the agent receives a new decision. If there +are multiple calls to `AddReward()` for a single agent decision, the rewards +will be summed together to evaluate how good the previous decision was. The +`SetReward()` will override all previous rewards given to an agent since the +previous decision. + +### Examples + +You can examine the `OnActionReceived()` functions defined in the +[example environments](Learning-Environment-Examples.md) to see how those +projects allocate rewards. + +The `GridAgent` class in the +[GridWorld example](Learning-Environment-Examples.md#gridworld) uses a very +simple reward system: + +```csharp +Collider[] hitObjects = Physics.OverlapBox(trueAgent.transform.position, + new Vector3(0.3f, 0.3f, 0.3f)); +if (hitObjects.Where(col => col.gameObject.tag == "goal").ToArray().Length == 1) +{ + AddReward(1.0f); + EndEpisode(); +} +else if (hitObjects.Where(col => col.gameObject.tag == "pit").ToArray().Length == 1) +{ + AddReward(-1f); + EndEpisode(); +} +``` + +The agent receives a positive reward when it reaches the goal and a negative +reward when it falls into the pit. Otherwise, it gets no rewards. This is an +example of a _sparse_ reward system. The agent must explore a lot to find the +infrequent reward. + +In contrast, the `AreaAgent` in the +[Area example](Learning-Environment-Examples.md#push-block) gets a small +negative reward every step. In order to get the maximum reward, the agent must +finish its task of reaching the goal square as quickly as possible: + +```csharp +AddReward( -0.005f); +MoveAgent(act); + +if (gameObject.transform.position.y < 0.0f || + Mathf.Abs(gameObject.transform.position.x - area.transform.position.x) > 8f || + Mathf.Abs(gameObject.transform.position.z + 5 - area.transform.position.z) > 8) +{ + AddReward(-1f); + EndEpisode(); +} +``` + +The agent also gets a larger negative penalty if it falls off the playing +surface. + +The `Ball3DAgent` in the +[3DBall](Learning-Environment-Examples.md#3dball-3d-balance-ball) takes a +similar approach, but allocates a small positive reward as long as the agent +balances the ball. The agent can maximize its rewards by keeping the ball on the +platform: + +```csharp + +SetReward(0.1f); + +// When ball falls mark Agent as finished and give a negative penalty +if ((ball.transform.position.y - gameObject.transform.position.y) < -2f || + Mathf.Abs(ball.transform.position.x - gameObject.transform.position.x) > 3f || + Mathf.Abs(ball.transform.position.z - gameObject.transform.position.z) > 3f) +{ + SetReward(-1f); + EndEpisode(); + +} +``` + +The `Ball3DAgent` also assigns a negative penalty when the ball falls off the +platform. + +Note that all of these environments make use of the `EndEpisode()` method, which +manually terminates an episode when a termination condition is reached. This can +be called independently of the `Max Step` property. + +### Rewards Summary & Best Practices + +- Use `AddReward()` to accumulate rewards between decisions. Use `SetReward()` + to overwrite any previous rewards accumulate between decisions. +- The magnitude of any given reward should typically not be greater than 1.0 in + order to ensure a more stable learning process. +- Positive rewards are often more helpful to shaping the desired behavior of an + agent than negative rewards. Excessive negative rewards can result in the + agent failing to learn any meaningful behavior. +- For locomotion tasks, a small positive reward (+0.1) for forward velocity is + typically used. +- If you want the agent to finish a task quickly, it is often helpful to provide + a small penalty every step (-0.05) that the agent does not complete the task. + In this case completion of the task should also coincide with the end of the + episode by calling `EndEpisode()` on the agent when it has accomplished its + goal. + +## Agent Properties + +![Agent Inspector](images/3dball_learning_brain.png) + +- `Behavior Parameters` - The parameters dictating what Policy the Agent will + receive. + - `Behavior Name` - The identifier for the behavior. Agents with the same + behavior name will learn the same policy. + - `Vector Observation` + - `Space Size` - Length of vector observation for the Agent. + - `Stacked Vectors` - The number of previous vector observations that will + be stacked and used collectively for decision making. This results in the + effective size of the vector observation being passed to the Policy being: + _Space Size_ x _Stacked Vectors_. + - `Actions` + - `Continuous Actions` - The number of concurrent continuous actions that + the Agent can take. + - `Discrete Branches` - An array of integers, defines multiple concurrent + discrete actions. The values in the `Discrete Branches` array correspond + to the number of possible discrete values for each action branch. + - `Model` - The neural network model used for inference (obtained after + training) + - `Inference Device` - Whether to use CPU or GPU to run the model during + inference + - `Behavior Type` - Determines whether the Agent will do training, inference, + or use its Heuristic() method: + - `Default` - the Agent will train if they connect to a python trainer, + otherwise they will perform inference. + - `Heuristic Only` - the Agent will always use the `Heuristic()` method. + - `Inference Only` - the Agent will always perform inference. + - `Team ID` - Used to define the team for self-play + - `Use Child Sensors` - Whether to use all Sensor components attached to child + GameObjects of this Agent. +- `Max Step` - The per-agent maximum number of steps. Once this number is + reached, the Agent will be reset. + +## Destroying an Agent + +You can destroy an Agent GameObject during the simulation. Make sure that there +is always at least one Agent training at all times by either spawning a new +Agent every time one is destroyed or by re-spawning new Agents when the whole +environment resets. + +## Defining Multi-agent Scenarios + +### Teams for Adversarial Scenarios + +Self-play is triggered by including the self-play hyperparameter hierarchy in +the [trainer configuration](Training-ML-Agents.md#training-configurations). To +distinguish opposing agents, set the team ID to different integer values in the +behavior parameters script on the agent prefab. + +

+ Team ID +

+ +**_Team ID must be 0 or an integer greater than 0._** + +In symmetric games, since all agents (even on opposing teams) will share the +same policy, they should have the same 'Behavior Name' in their Behavior +Parameters Script. In asymmetric games, they should have a different Behavior +Name in their Behavior Parameters script. Note, in asymmetric games, the agents +must have both different Behavior Names _and_ different team IDs! + +For examples of how to use this feature, you can see the trainer configurations +and agent prefabs for our Tennis and Soccer environments. Tennis and Soccer +provide examples of symmetric games. To train an asymmetric game, specify +trainer configurations for each of your behavior names and include the self-play +hyperparameter hierarchy in both. + +### Groups for Cooperative Scenarios + +Cooperative behavior in ML-Agents can be enabled by instantiating a `SimpleMultiAgentGroup`, +typically in an environment controller or similar script, and adding agents to it +using the `RegisterAgent(Agent agent)` method. Note that all agents added to the same `SimpleMultiAgentGroup` +must have the same behavior name and Behavior Parameters. Using `SimpleMultiAgentGroup` enables the +agents within a group to learn how to work together to achieve a common goal (i.e., +maximize a group-given reward), even if one or more of the group members are removed +before the episode ends. You can then use this group to add/set rewards, end or interrupt episodes +at a group level using the `AddGroupReward()`, `SetGroupReward()`, `EndGroupEpisode()`, and +`GroupEpisodeInterrupted()` methods. For example: + +```csharp +// Create a Multi Agent Group in Start() or Initialize() +m_AgentGroup = new SimpleMultiAgentGroup(); + +// Register agents in group at the beginning of an episode +for (var agent in AgentList) +{ + m_AgentGroup.RegisterAgent(agent); +} + +// if the team scores a goal +m_AgentGroup.AddGroupReward(rewardForGoal); + +// If the goal is reached and the episode is over +m_AgentGroup.EndGroupEpisode(); +ResetScene(); + +// If time ran out and we need to interrupt the episode +m_AgentGroup.GroupEpisodeInterrupted(); +ResetScene(); +``` + +Multi Agent Groups should be used with the MA-POCA trainer, which is explicitly designed to train +cooperative environments. This can be enabled by using the `poca` trainer - see the +[training configurations](Training-Configuration-File.md) doc for more information on +configuring MA-POCA. When using MA-POCA, agents which are deactivated or removed from the Scene +during the episode will still learn to contribute to the group's long term rewards, even +if they are not active in the scene to experience them. + +See the [Cooperative Push Block](Learning-Environment-Examples.md#cooperative-push-block) environment +for an example of how to use Multi Agent Groups, and the +[Dungeon Escape](Learning-Environment-Examples.md#dungeon-escape) environment for an example of +how the Multi Agent Group can be used with agents that are removed from the scene mid-episode. + +**NOTE**: Groups differ from Teams (for competitive settings) in the following way - Agents +working together should be added to the same Group, while agents playing against each other +should be given different Team Ids. If in the Scene there is one playing field and two teams, +there should be two Groups, one for each team, and each team should be assigned a different +Team Id. If this playing field is duplicated many times in the Scene (e.g. for training +speedup), there should be two Groups _per playing field_, and two unique Team Ids +_for the entire Scene_. In environments with both Groups and Team Ids configured, MA-POCA and +self-play can be used together for training. In the diagram below, there are two agents on each team, +and two playing fields where teams are pitted against each other. All the blue agents should share a Team Id +(and the orange ones a different ID), and there should be four group managers, one per pair of agents. + +

+ Group Manager vs Team Id +

+ +Please see the [SoccerTwos](Learning-Environment-Examples.md#soccer-twos) environment for an example. + +#### Cooperative Behaviors Notes and Best Practices +* An agent can only be registered to one MultiAgentGroup at a time. If you want to re-assign an +agent from one group to another, you have to unregister it from the current group first. + +* Agents with different behavior names in the same group are not supported. + +* Agents within groups should always set the `Max Steps` parameter in the Agent script to 0. +Instead, handle Max Steps using the MultiAgentGroup by ending the episode for the entire +Group using `GroupEpisodeInterrupted()`. + +* `EndGroupEpisode` and `GroupEpisodeInterrupted` do the same job in the game, but has +slightly different effect on the training. If the episode is completed, you would want to call +`EndGroupEpisode`. But if the episode is not over but it has been running for enough steps, i.e. +reaching max step, you would call `GroupEpisodeInterrupted`. + +* If an agent finished earlier, e.g. completed tasks/be removed/be killed in the game, do not call +`EndEpisode()` on the Agent. Instead, disable the agent and re-enable it when the next episode starts, +or destroy the agent entirely. This is because calling `EndEpisode()` will call `OnEpisodeBegin()`, which +will reset the agent immediately. While it is possible to call `EndEpisode()` in this way, it is usually not the +desired behavior when training groups of agents. + +* If an agent that was disabled in a scene needs to be re-enabled, it must be re-registered to the MultiAgentGroup. + +* Group rewards are meant to reinforce agents to act in the group's best interest instead of +individual ones, and are treated differently than individual agent rewards during +training. So calling `AddGroupReward()` is not equivalent to calling agent.AddReward() on each agent +in the group. + +* You can still add incremental rewards to agents using `Agent.AddReward()` if they are +in a Group. These rewards will only be given to those agents and are received when the +Agent is active. + +* Environments which use Multi Agent Groups can be trained using PPO or SAC, but agents will +not be able to learn from group rewards after deactivation/removal, nor will they behave as cooperatively. + +## Recording Demonstrations + +In order to record demonstrations from an agent, add the +`Demonstration Recorder` component to a GameObject in the scene which contains +an `Agent` component. Once added, it is possible to name the demonstration that +will be recorded from the agent. + +

+ Demonstration Recorder +

+ +When `Record` is checked, a demonstration will be created whenever the scene is +played from the Editor. Depending on the complexity of the task, anywhere from a +few minutes or a few hours of demonstration data may be necessary to be useful +for imitation learning. To specify an exact number of steps you want to record +use the `Num Steps To Record` field and the editor will end your play session +automatically once that many steps are recorded. If you set `Num Steps To Record` +to `0` then recording will continue until you manually end the play session. Once +the play session ends a `.demo` file will be created in the `Assets/Demonstrations` +folder (by default). This file contains the demonstrations. Clicking on the file will +provide metadata about the demonstration in the inspector. + +

+ Demonstration Inspector +

+ +You can then specify the path to this file in your +[training configurations](Training-Configuration-File.md#behavioral-cloning). diff --git a/docs/Learning-Environment-Design.md b/docs/Learning-Environment-Design.md new file mode 100644 index 0000000000000000000000000000000000000000..984be604fc10677835e859b59f576a2431df0e76 --- /dev/null +++ b/docs/Learning-Environment-Design.md @@ -0,0 +1,167 @@ +# Designing a Learning Environment + +This page contains general advice on how to design your learning environment, in +addition to overviewing aspects of the ML-Agents Unity SDK that pertain to +setting up your scene and simulation as opposed to designing your agents within +the scene. We have a dedicated page on +[Designing Agents](Learning-Environment-Design-Agents.md) which includes how to +instrument observations, actions and rewards, define teams for multi-agent +scenarios and record agent demonstrations for imitation learning. + +To help on-board to the entire set of functionality provided by the ML-Agents +Toolkit, we recommend exploring our [API documentation](API-Reference.md). +Additionally, our [example environments](Learning-Environment-Examples.md) are a +great resource as they provide sample usage of almost all of our features. + +## The Simulation and Training Process + +Training and simulation proceed in steps orchestrated by the ML-Agents Academy +class. The Academy works with Agent objects in the scene to step through the +simulation. + +During training, the external Python training process communicates with the +Academy to run a series of episodes while it collects data and optimizes its +neural network model. When training is completed successfully, you can add the +trained model file to your Unity project for later use. + +The ML-Agents Academy class orchestrates the agent simulation loop as follows: + +1. Calls your Academy's `OnEnvironmentReset` delegate. +1. Calls the `OnEpisodeBegin()` function for each Agent in the scene. +1. Gathers information about the scene. This is done by calling the + `CollectObservations(VectorSensor sensor)` function for each Agent in the + scene, as well as updating their sensor and collecting the resulting + observations. +1. Uses each Agent's Policy to decide on the Agent's next action. +1. Calls the `OnActionReceived()` function for each Agent in the scene, passing + in the action chosen by the Agent's Policy. +1. Calls the Agent's `OnEpisodeBegin()` function if the Agent has reached its + `Max Step` count or has otherwise marked itself as `EndEpisode()`. + +To create a training environment, extend the Agent class to implement the above +methods whether you need to implement them or not depends on your specific +scenario. + +## Organizing the Unity Scene + +To train and use the ML-Agents Toolkit in a Unity scene, the scene as many Agent +subclasses as you need. Agent instances should be attached to the GameObject +representing that Agent. + +### Academy + +The Academy is a singleton which orchestrates Agents and their decision making +processes. Only a single Academy exists at a time. + +#### Academy resetting + +To alter the environment at the start of each episode, add your method to the +Academy's OnEnvironmentReset action. + +```csharp +public class MySceneBehavior : MonoBehaviour +{ + public void Awake() + { + Academy.Instance.OnEnvironmentReset += EnvironmentReset; + } + + void EnvironmentReset() + { + // Reset the scene here + } +} +``` + +For example, you might want to reset an Agent to its starting position or move a +goal to a random position. An environment resets when the `reset()` method is +called on the Python `UnityEnvironment`. + +When you reset an environment, consider the factors that should change so that +training is generalizable to different conditions. For example, if you were +training a maze-solving agent, you would probably want to change the maze itself +for each training episode. Otherwise, the agent would probably on learn to solve +one, particular maze, not mazes in general. + +### Multiple Areas + +In many of the example environments, many copies of the training area are +instantiated in the scene. This generally speeds up training, allowing the +environment to gather many experiences in parallel. This can be achieved simply +by instantiating many Agents with the same Behavior Name. If possible, consider +designing your scene to support multiple areas. + +Check out our example environments to see examples of multiple areas. +Additionally, the +[Making a New Learning Environment](Learning-Environment-Create-New.md#optional-multiple-training-areas-within-the-same-scene) +guide demonstrates this option. + +## Environments + +When you create a training environment in Unity, you must set up the scene so +that it can be controlled by the external training process. Considerations +include: + +- The training scene must start automatically when your Unity application is + launched by the training process. +- The Academy must reset the scene to a valid starting point for each episode of + training. +- A training episode must have a definite end — either using `Max Steps` or by + each Agent ending its episode manually with `EndEpisode()`. + +## Environment Parameters + +Curriculum learning and environment parameter randomization are two training +methods that control specific parameters in your environment. As such, it is +important to ensure that your environment parameters are updated at each step to +the correct values. To enable this, we expose a `EnvironmentParameters` C# class +that you can use to retrieve the values of the parameters defined in the +training configurations for both of those features. Please see our +[documentation](Training-ML-Agents.md#environment-parameters) +for curriculum learning and environment parameter randomization for details. + +We recommend modifying the environment from the Agent's `OnEpisodeBegin()` +function by leveraging `Academy.Instance.EnvironmentParameters`. See the +WallJump example environment for a sample usage (specifically, +[WallJumpAgent.cs](../Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs) +). + +## Agent + +The Agent class represents an actor in the scene that collects observations and +carries out actions. The Agent class is typically attached to the GameObject in +the scene that otherwise represents the actor — for example, to a player object +in a football game or a car object in a vehicle simulation. Every Agent must +have appropriate `Behavior Parameters`. + +Generally, when creating an Agent, you should extend the Agent class and implement +the `CollectObservations(VectorSensor sensor)` and `OnActionReceived()` methods: + +- `CollectObservations(VectorSensor sensor)` — Collects the Agent's observation + of its environment. +- `OnActionReceived()` — Carries out the action chosen by the Agent's Policy and + assigns a reward to the current state. + +Your implementations of these functions determine how the Behavior Parameters +assigned to this Agent must be set. + +You must also determine how an Agent finishes its task or times out. You can +manually terminate an Agent episode in your `OnActionReceived()` function when +the Agent has finished (or irrevocably failed) its task by calling the +`EndEpisode()` function. You can also set the Agent's `Max Steps` property to a +positive value and the Agent will consider the episode over after it has taken +that many steps. You can use the `Agent.OnEpisodeBegin()` function to prepare +the Agent to start again. + +See [Agents](Learning-Environment-Design-Agents.md) for detailed information +about programming your own Agents. + +## Recording Statistics + +We offer developers a mechanism to record statistics from within their Unity +environments. These statistics are aggregated and generated during the training +process. To record statistics, see the `StatsRecorder` C# class. + +See the FoodCollector example environment for a sample usage (specifically, +[FoodCollectorSettings.cs](../Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorSettings.cs) +). diff --git a/docs/Learning-Environment-Examples.md b/docs/Learning-Environment-Examples.md new file mode 100644 index 0000000000000000000000000000000000000000..22fb7fcd37e4d522a10105895ab66776e839d0ad --- /dev/null +++ b/docs/Learning-Environment-Examples.md @@ -0,0 +1,500 @@ +# Example Learning Environments + + + +The Unity ML-Agents Toolkit includes an expanding set of example environments +that highlight the various features of the toolkit. These environments can also +serve as templates for new environments or as ways to test new ML algorithms. +Environments are located in `Project/Assets/ML-Agents/Examples` and summarized +below. + +For the environments that highlight specific features of the toolkit, we provide +the pre-trained model files and the training config file that enables you to +train the scene yourself. The environments that are designed to serve as +challenges for researchers do not have accompanying pre-trained model files or +training configs and are marked as _Optional_ below. + +This page only overviews the example environments we provide. To learn more on +how to design and build your own environments see our +[Making a New Learning Environment](Learning-Environment-Create-New.md) page. If +you would like to contribute environments, please see our +[contribution guidelines](CONTRIBUTING.md) page. + +## Basic + +![Basic](images/basic.png) + +- Set-up: A linear movement task where the agent must move left or right to + rewarding states. +- Goal: Move to the most reward state. +- Agents: The environment contains one agent. +- Agent Reward Function: + - -0.01 at each step + - +0.1 for arriving at suboptimal state. + - +1.0 for arriving at optimal state. +- Behavior Parameters: + - Vector Observation space: One variable corresponding to current state. + - Actions: 1 discrete action branch with 3 actions (Move left, do nothing, move + right). + - Visual Observations: None +- Float Properties: None +- Benchmark Mean Reward: 0.93 + +## 3DBall: 3D Balance Ball + +![3D Balance Ball](images/balance.png) + +- Set-up: A balance-ball task, where the agent balances the ball on it's head. +- Goal: The agent must balance the ball on it's head for as long as possible. +- Agents: The environment contains 12 agents of the same kind, all using the + same Behavior Parameters. +- Agent Reward Function: + - +0.1 for every step the ball remains on it's head. + - -1.0 if the ball falls off. +- Behavior Parameters: + - Vector Observation space: 8 variables corresponding to rotation of the agent + cube, and position and velocity of ball. + - Vector Observation space (Hard Version): 5 variables corresponding to + rotation of the agent cube and position of ball. + - Actions: 2 continuous actions, with one value corresponding to + X-rotation, and the other to Z-rotation. + - Visual Observations: Third-person view from the upper-front of the agent. Use + `Visual3DBall` scene. +- Float Properties: Three + - scale: Specifies the scale of the ball in the 3 dimensions (equal across the + three dimensions) + - Default: 1 + - Recommended Minimum: 0.2 + - Recommended Maximum: 5 + - gravity: Magnitude of gravity + - Default: 9.81 + - Recommended Minimum: 4 + - Recommended Maximum: 105 + - mass: Specifies mass of the ball + - Default: 1 + - Recommended Minimum: 0.1 + - Recommended Maximum: 20 +- Benchmark Mean Reward: 100 + +## GridWorld + +![GridWorld](images/gridworld.png) + +- Set-up: A multi-goal version of the grid-world task. Scene contains agent, goal, + and obstacles. +- Goal: The agent must navigate the grid to the appropriate goal while + avoiding the obstacles. +- Agents: The environment contains nine agents with the same Behavior + Parameters. +- Agent Reward Function: + - -0.01 for every step. + - +1.0 if the agent navigates to the correct goal (episode ends). + - -1.0 if the agent navigates to an incorrect goal (episode ends). +- Behavior Parameters: + - Vector Observation space: None + - Actions: 1 discrete action branch with 5 actions, corresponding to movement in + cardinal directions or not moving. Note that for this environment, + [action masking](Learning-Environment-Design-Agents.md#masking-discrete-actions) + is turned on by default (this option can be toggled using the `Mask Actions` + checkbox within the `trueAgent` GameObject). The trained model file provided + was generated with action masking turned on. + - Visual Observations: One corresponding to top-down view of GridWorld. + - Goal Signal : A one hot vector corresponding to which color is the correct goal + for the Agent +- Float Properties: Three, corresponding to grid size, number of green goals, and + number of red goals. +- Benchmark Mean Reward: 0.8 + +## Push Block + +![Push](images/push.png) + +- Set-up: A platforming environment where the agent can push a block around. +- Goal: The agent must push the block to the goal. +- Agents: The environment contains one agent. +- Agent Reward Function: + - -0.0025 for every step. + - +1.0 if the block touches the goal. +- Behavior Parameters: + - Vector Observation space: (Continuous) 70 variables corresponding to 14 + ray-casts each detecting one of three possible objects (wall, goal, or + block). + - Actions: 1 discrete action branch with 7 actions, corresponding to turn clockwise + and counterclockwise, move along four different face directions, or do nothing. +- Float Properties: Four + - block_scale: Scale of the block along the x and z dimensions + - Default: 2 + - Recommended Minimum: 0.5 + - Recommended Maximum: 4 + - dynamic_friction: Coefficient of friction for the ground material acting on + moving objects + - Default: 0 + - Recommended Minimum: 0 + - Recommended Maximum: 1 + - static_friction: Coefficient of friction for the ground material acting on + stationary objects + - Default: 0 + - Recommended Minimum: 0 + - Recommended Maximum: 1 + - block_drag: Effect of air resistance on block + - Default: 0.5 + - Recommended Minimum: 0 + - Recommended Maximum: 2000 +- Benchmark Mean Reward: 4.5 + +## Wall Jump + +![Wall](images/wall.png) + +- Set-up: A platforming environment where the agent can jump over a wall. +- Goal: The agent must use the block to scale the wall and reach the goal. +- Agents: The environment contains one agent linked to two different Models. The + Policy the agent is linked to changes depending on the height of the wall. The + change of Policy is done in the WallJumpAgent class. +- Agent Reward Function: + - -0.0005 for every step. + - +1.0 if the agent touches the goal. + - -1.0 if the agent falls off the platform. +- Behavior Parameters: + - Vector Observation space: Size of 74, corresponding to 14 ray casts each + detecting 4 possible objects. plus the global position of the agent and + whether or not the agent is grounded. + - Actions: 4 discrete action branches: + - Forward Motion (3 possible actions: Forward, Backwards, No Action) + - Rotation (3 possible actions: Rotate Left, Rotate Right, No Action) + - Side Motion (3 possible actions: Left, Right, No Action) + - Jump (2 possible actions: Jump, No Action) + - Visual Observations: None +- Float Properties: Four +- Benchmark Mean Reward (Big & Small Wall): 0.8 + +## Crawler + +![Crawler](images/crawler.png) + +- Set-up: A creature with 4 arms and 4 forearms. +- Goal: The agents must move its body toward the goal direction without falling. +- Agents: The environment contains 10 agents with same Behavior Parameters. +- Agent Reward Function (independent): + The reward function is now geometric meaning the reward each step is a product + of all the rewards instead of a sum, this helps the agent try to maximize all + rewards instead of the easiest rewards. + - Body velocity matches goal velocity. (normalized between (0,1)) + - Head direction alignment with goal direction. (normalized between (0,1)) +- Behavior Parameters: + - Vector Observation space: 172 variables corresponding to position, rotation, + velocity, and angular velocities of each limb plus the acceleration and + angular acceleration of the body. + - Actions: 20 continuous actions, corresponding to target + rotations for joints. + - Visual Observations: None +- Float Properties: None +- Benchmark Mean Reward: 3000 + +## Worm + +![Worm](images/worm.png) + +- Set-up: A worm with a head and 3 body segments. +- Goal: The agents must move its body toward the goal direction. +- Agents: The environment contains 10 agents with same Behavior Parameters. +- Agent Reward Function (independent): + The reward function is now geometric meaning the reward each step is a product + of all the rewards instead of a sum, this helps the agent try to maximize all + rewards instead of the easiest rewards. + - Body velocity matches goal velocity. (normalized between (0,1)) + - Body direction alignment with goal direction. (normalized between (0,1)) +- Behavior Parameters: + - Vector Observation space: 64 variables corresponding to position, rotation, + velocity, and angular velocities of each limb plus the acceleration and + angular acceleration of the body. + - Actions: 9 continuous actions, corresponding to target + rotations for joints. + - Visual Observations: None +- Float Properties: None +- Benchmark Mean Reward: 800 + +## Food Collector + +![Collector](images/foodCollector.png) + +- Set-up: A multi-agent environment where agents compete to collect food. +- Goal: The agents must learn to collect as many green food spheres as possible + while avoiding red spheres. +- Agents: The environment contains 5 agents with same Behavior Parameters. +- Agent Reward Function (independent): + - +1 for interaction with green spheres + - -1 for interaction with red spheres +- Behavior Parameters: + - Vector Observation space: 53 corresponding to velocity of agent (2), whether + agent is frozen and/or shot its laser (2), plus grid based perception of + objects around agent's forward direction (40 by 40 with 6 different categories). + - Actions: + - 3 continuous actions correspond to Forward Motion, Side Motion and Rotation + - 1 discrete acion branch for Laser with 2 possible actions corresponding to + Shoot Laser or No Action + - Visual Observations (Optional): First-person camera per-agent, plus one vector + flag representing the frozen state of the agent. This scene uses a combination + of vector and visual observations and the training will not succeed without + the frozen vector flag. Use `VisualFoodCollector` scene. +- Float Properties: Two + - laser_length: Length of the laser used by the agent + - Default: 1 + - Recommended Minimum: 0.2 + - Recommended Maximum: 7 + - agent_scale: Specifies the scale of the agent in the 3 dimensions (equal + across the three dimensions) + - Default: 1 + - Recommended Minimum: 0.5 + - Recommended Maximum: 5 +- Benchmark Mean Reward: 10 + +## Hallway + +![Hallway](images/hallway.png) + +- Set-up: Environment where the agent needs to find information in a room, + remember it, and use it to move to the correct goal. +- Goal: Move to the goal which corresponds to the color of the block in the + room. +- Agents: The environment contains one agent. +- Agent Reward Function (independent): + - +1 For moving to correct goal. + - -0.1 For moving to incorrect goal. + - -0.0003 Existential penalty. +- Behavior Parameters: + - Vector Observation space: 30 corresponding to local ray-casts detecting + objects, goals, and walls. + - Actions: 1 discrete action Branch, with 4 actions corresponding to agent + rotation and forward/backward movement. +- Float Properties: None +- Benchmark Mean Reward: 0.7 + - To train this environment, you can enable curiosity by adding the `curiosity` reward signal + in `config/ppo/Hallway.yaml` + +## Soccer Twos + +![SoccerTwos](images/soccer.png) + +- Set-up: Environment where four agents compete in a 2 vs 2 toy soccer game. +- Goal: + - Get the ball into the opponent's goal while preventing the ball from + entering own goal. +- Agents: The environment contains two different Multi Agent Groups with two agents in each. + Parameters : SoccerTwos. +- Agent Reward Function (dependent): + - (1 - `accumulated time penalty`) When ball enters opponent's goal + `accumulated time penalty` is incremented by (1 / `MaxStep`) every fixed + update and is reset to 0 at the beginning of an episode. + - -1 When ball enters team's goal. +- Behavior Parameters: + - Vector Observation space: 336 corresponding to 11 ray-casts forward + distributed over 120 degrees and 3 ray-casts backward distributed over 90 + degrees each detecting 6 possible object types, along with the object's + distance. The forward ray-casts contribute 264 state dimensions and backward + 72 state dimensions over three observation stacks. + - Actions: 3 discrete branched actions corresponding to + forward, backward, sideways movement, as well as rotation. + - Visual Observations: None +- Float Properties: Two + - ball_scale: Specifies the scale of the ball in the 3 dimensions (equal + across the three dimensions) + - Default: 7.5 + - Recommended minimum: 4 + - Recommended maximum: 10 + - gravity: Magnitude of the gravity + - Default: 9.81 + - Recommended minimum: 6 + - Recommended maximum: 20 + +## Strikers Vs. Goalie + +![StrikersVsGoalie](images/strikersvsgoalie.png) + +- Set-up: Environment where two agents compete in a 2 vs 1 soccer variant. +- Goal: + - Striker: Get the ball into the opponent's goal. + - Goalie: Keep the ball out of the goal. +- Agents: The environment contains two different Multi Agent Groups. One with two Strikers and the other one Goalie. + Behavior Parameters : Striker, Goalie. +- Striker Agent Reward Function (dependent): + - +1 When ball enters opponent's goal. + - -0.001 Existential penalty. +- Goalie Agent Reward Function (dependent): + - -1 When ball enters goal. + - 0.001 Existential bonus. +- Behavior Parameters: + - Striker Vector Observation space: 294 corresponding to 11 ray-casts forward + distributed over 120 degrees and 3 ray-casts backward distributed over 90 + degrees each detecting 5 possible object types, along with the object's + distance. The forward ray-casts contribute 231 state dimensions and backward + 63 state dimensions over three observation stacks. + - Striker Actions: 3 discrete branched actions corresponding + to forward, backward, sideways movement, as well as rotation. + - Goalie Vector Observation space: 738 corresponding to 41 ray-casts + distributed over 360 degrees each detecting 4 possible object types, along + with the object's distance and 3 observation stacks. + - Goalie Actions: 3 discrete branched actions corresponding + to forward, backward, sideways movement, as well as rotation. + - Visual Observations: None +- Float Properties: Two + - ball_scale: Specifies the scale of the ball in the 3 dimensions (equal + across the three dimensions) + - Default: 7.5 + - Recommended minimum: 4 + - Recommended maximum: 10 + - gravity: Magnitude of the gravity + - Default: 9.81 + - Recommended minimum: 6 + - Recommended maximum: 20 + +## Walker + +![Walker](images/walker.png) + +- Set-up: Physics-based Humanoid agents with 26 degrees of freedom. These DOFs + correspond to articulation of the following body-parts: hips, chest, spine, + head, thighs, shins, feet, arms, forearms and hands. +- Goal: The agents must move its body toward the goal direction without falling. +- Agents: The environment contains 10 independent agents with same Behavior + Parameters. +- Agent Reward Function (independent): + The reward function is now geometric meaning the reward each step is a product + of all the rewards instead of a sum, this helps the agent try to maximize all + rewards instead of the easiest rewards. + - Body velocity matches goal velocity. (normalized between (0,1)) + - Head direction alignment with goal direction. (normalized between (0,1)) +- Behavior Parameters: + - Vector Observation space: 243 variables corresponding to position, rotation, + velocity, and angular velocities of each limb, along with goal direction. + - Actions: 39 continuous actions, corresponding to target + rotations and strength applicable to the joints. + - Visual Observations: None +- Float Properties: Four + - gravity: Magnitude of gravity + - Default: 9.81 + - Recommended Minimum: + - Recommended Maximum: + - hip_mass: Mass of the hip component of the walker + - Default: 8 + - Recommended Minimum: 7 + - Recommended Maximum: 28 + - chest_mass: Mass of the chest component of the walker + - Default: 8 + - Recommended Minimum: 3 + - Recommended Maximum: 20 + - spine_mass: Mass of the spine component of the walker + - Default: 8 + - Recommended Minimum: 3 + - Recommended Maximum: 20 +- Benchmark Mean Reward : 2500 + + +## Pyramids + +![Pyramids](images/pyramids.png) + +- Set-up: Environment where the agent needs to press a button to spawn a + pyramid, then navigate to the pyramid, knock it over, and move to the gold + brick at the top. +- Goal: Move to the golden brick on top of the spawned pyramid. +- Agents: The environment contains one agent. +- Agent Reward Function (independent): + - +2 For moving to golden brick (minus 0.001 per step). +- Behavior Parameters: + - Vector Observation space: 148 corresponding to local ray-casts detecting + switch, bricks, golden brick, and walls, plus variable indicating switch + state. + - Actions: 1 discrete action branch, with 4 actions corresponding to agent rotation and + forward/backward movement. +- Float Properties: None +- Benchmark Mean Reward: 1.75 + +## Match 3 +![Match 3](images/match3.png) + +- Set-up: Simple match-3 game. Matched pieces are removed, and remaining pieces +drop down. New pieces are spawned randomly at the top, with a chance of being +"special". +- Goal: Maximize score from matching pieces. +- Agents: The environment contains several independent Agents. +- Agent Reward Function (independent): + - .01 for each normal piece cleared. Special pieces are worth 2x or 3x. +- Behavior Parameters: + - None + - Observations and actions are defined with a sensor and actuator respectively. +- Float Properties: None +- Benchmark Mean Reward: + - 39.5 for visual observations + - 38.5 for vector observations + - 34.2 for simple heuristic (pick a random valid move) + - 37.0 for greedy heuristic (pick the highest-scoring valid move) + +## Sorter +![Sorter](images/sorter.png) + + - Set-up: The Agent is in a circular room with numbered tiles. The values of the + tiles are random between 1 and 20. The tiles present in the room are randomized + at each episode. When the Agent visits a tile, it turns green. + - Goal: Visit all the tiles in ascending order. + - Agents: The environment contains a single Agent + - Agent Reward Function: + - -.0002 Existential penalty. + - +1 For visiting the right tile + - -1 For visiting the wrong tile + - BehaviorParameters: + - Vector Observations : 4 : 2 floats for Position and 2 floats for orientation + - Variable Length Observations : Between 1 and 20 entities (one for each tile) + each with 22 observations, the first 20 are one hot encoding of the value of the tile, + the 21st and 22nd represent the position of the tile relative to the Agent and the 23rd + is `1` if the tile was visited and `0` otherwise. + - Actions: 3 discrete branched actions corresponding to forward, backward, + sideways movement, as well as rotation. + - Float Properties: One + - num_tiles: The maximum number of tiles to sample. + - Default: 2 + - Recommended Minimum: 1 + - Recommended Maximum: 20 + - Benchmark Mean Reward: Depends on the number of tiles. + +## Cooperative Push Block +![CoopPushBlock](images/cooperative_pushblock.png) + +- Set-up: Similar to Push Block, the agents are in an area with blocks that need +to be pushed into a goal. Small blocks can be pushed by one agents and are worth ++1 value, medium blocks require two agents to push in and are worth +2, and large +blocks require all 3 agents to push and are worth +3. +- Goal: Push all blocks into the goal. +- Agents: The environment contains three Agents in a Multi Agent Group. +- Agent Reward Function: + - -0.0001 Existential penalty, as a group reward. + - +1, +2, or +3 for pushing in a block, added as a group reward. +- Behavior Parameters: + - Observation space: A single Grid Sensor with separate tags for each block size, + the goal, the walls, and other agents. + - Actions: 1 discrete action branch with 7 actions, corresponding to turn clockwise + and counterclockwise, move along four different face directions, or do nothing. +- Float Properties: None +- Benchmark Mean Reward: 11 (Group Reward) + +## Dungeon Escape +![DungeonEscape](images/dungeon_escape.png) + +- Set-up: Agents are trapped in a dungeon with a dragon, and must work together to escape. + To retrieve the key, one of the agents must find and slay the dragon, sacrificing itself + to do so. The dragon will drop a key for the others to use. The other agents can then pick + up this key and unlock the dungeon door. If the agents take too long, the dragon will escape + through a portal and the environment resets. +- Goal: Unlock the dungeon door and leave. +- Agents: The environment contains three Agents in a Multi Agent Group and one Dragon, which + moves in a predetermined pattern. +- Agent Reward Function: + - +1 group reward if any agent successfully unlocks the door and leaves the dungeon. +- Behavior Parameters: + - Observation space: A Ray Perception Sensor with separate tags for the walls, other agents, + the door, key, the dragon, and the dragon's portal. A single Vector Observation which indicates + whether the agent is holding a key. + - Actions: 1 discrete action branch with 7 actions, corresponding to turn clockwise + and counterclockwise, move along four different face directions, or do nothing. +- Float Properties: None +- Benchmark Mean Reward: 1.0 (Group Reward) diff --git a/docs/Learning-Environment-Executable.md b/docs/Learning-Environment-Executable.md new file mode 100644 index 0000000000000000000000000000000000000000..f5ea6936cc9c2a93180bf560ecefce77362da085 --- /dev/null +++ b/docs/Learning-Environment-Executable.md @@ -0,0 +1,198 @@ +# Using an Environment Executable + +This section will help you create and use built environments rather than the +Editor to interact with an environment. Using an executable has some advantages +over using the Editor: + +- You can exchange executable with other people without having to share your + entire repository. +- You can put your executable on a remote machine for faster training. +- You can use `Server Build` (`Headless`) mode for faster training (as long as the executable does not need rendering). +- You can keep using the Unity Editor for other tasks while the agents are + training. + +## Building the 3DBall environment + +The first step is to open the Unity scene containing the 3D Balance Ball +environment: + +1. Launch Unity. +1. On the Projects dialog, choose the **Open** option at the top of the window. +1. Using the file dialog that opens, locate the `Project` folder within the + ML-Agents project and click **Open**. +1. In the **Project** window, navigate to the folder + `Assets/ML-Agents/Examples/3DBall/Scenes/`. +1. Double-click the `3DBall` file to load the scene containing the Balance Ball + environment. + +![3DBall Scene](images/mlagents-Open3DBall.png) + +Next, we want the set up scene to play correctly when the training process +launches our environment executable. This means: + +- The environment application runs in the background. +- No dialogs require interaction. +- The correct scene loads automatically. + +1. Open Player Settings (menu: **Edit** > **Project Settings** > **Player**). +1. Under **Resolution and Presentation**: + - Ensure that **Run in Background** is Checked. + - Ensure that **Display Resolution Dialog** is set to Disabled. (Note: this + setting may not be available in newer versions of the editor.) +1. Open the Build Settings window (menu:**File** > **Build Settings**). +1. Choose your target platform. + - (optional) Select “Development Build†to + [log debug messages](https://docs.unity3d.com/Manual/LogFiles.html). +1. If any scenes are shown in the **Scenes in Build** list, make sure that the + 3DBall Scene is the only one checked. (If the list is empty, then only the + current scene is included in the build). +1. Click **Build**: + - In the File dialog, navigate to your ML-Agents directory. + - Assign a file name and click **Save**. + - (For Windows)With Unity 2018.1, it will ask you to select a folder instead + of a file name. Create a subfolder within the root directory and select + that folder to build. In the following steps you will refer to this + subfolder's name as `env_name`. You cannot create builds in the Assets + folder + +![Build Window](images/mlagents-BuildWindow.png) + +Now that we have a Unity executable containing the simulation environment, we +can interact with it. + +## Interacting with the Environment + +If you want to use the [Python API](Python-LLAPI.md) to interact with your +executable, you can pass the name of the executable with the argument +'file_name' of the `UnityEnvironment`. For instance: + +```python +from mlagents_envs.environment import UnityEnvironment +env = UnityEnvironment(file_name=) +``` + +## Training the Environment + +1. Open a command or terminal window. +1. Navigate to the folder where you installed the ML-Agents Toolkit. If you + followed the default [installation](Installation.md), then navigate to the + `ml-agents/` folder. +1. Run + `mlagents-learn --env= --run-id=` + Where: + - `` is the file path of the trainer configuration yaml + - `` is the name and path to the executable you exported from Unity + (without extension) + - `` is a string used to separate the results of different + training runs + +For example, if you are training with a 3DBall executable, and you saved it to +the directory where you installed the ML-Agents Toolkit, run: + +```sh +mlagents-learn config/ppo/3DBall.yaml --env=3DBall --run-id=firstRun +``` + +And you should see something like + +```console +ml-agents$ mlagents-learn config/ppo/3DBall.yaml --env=3DBall --run-id=first-run + + + â–„â–„â–„â–“â–“â–“â–“ + ╓▓▓▓▓▓▓█▓▓▓▓▓ + ,â–„â–„â–„m▀▀▀' ,▓▓▓▀▓▓▄ â–“â–“â–“ â–“â–“â–Œ + â–„â–“â–“â–“â–€' â–„â–“â–“â–€ â–“â–“â–“ â–„â–„ â–„â–„ ,â–„â–„ â–„â–„â–„â–„ ,â–„â–„ ▄▓▓▌▄ â–„â–„â–„ ,â–„â–„ + â–„â–“â–“â–“â–€ â–„â–“â–“â–€ â–â–“â–“â–Œ â–“â–“â–Œ â–â–“â–“ â–▓▓▓▀▀▀▓▓▌ â–“â–“â–“ ▀▓▓▌▀ ^â–“â–“â–Œ â•’â–“â–“â–Œ + â–„â–“â–“â–“â–“â–“â–„â–„â–„â–„â–„â–„â–„â–„â–“â–“â–“ â–“â–€ â–“â–“â–Œ â–â–“â–“ â–â–“â–“ â–“â–“â–“ â–“â–“â–“ â–“â–“â–Œ â–â–“â–“â–„ â–“â–“â–Œ + ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ â–“â–“ â–“â–“â–Œ â–â–“â–“ â–â–“â–“ â–“â–“â–“ â–“â–“â–“ â–“â–“â–Œ â–â–“â–“â–â–“â–“ + ^█▓▓▓ ▀▓▓▄ â–â–“â–“â–Œ â–“â–“â–“â–“â–„â–“â–“â–“â–“ â–â–“â–“ â–“â–“â–“ â–“â–“â–“ â–“â–“â–“â–„ â–“â–“â–“â–“` + '▀▓▓▓▄ ^â–“â–“â–“ â–“â–“â–“ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ â–â–“â–“â–Œ + ▀▀▀▀▓▄▄▄ â–“â–“â–“â–“â–“â–“, â–“â–“â–“â–“â–€ + `▀█▓▓▓▓▓▓▓▓▓▌ + ¬`▀▀▀█▓ + +``` + +**Note**: If you're using Anaconda, don't forget to activate the ml-agents +environment first. + +If `mlagents-learn` runs correctly and starts training, you should see something +like this: + +```console +CrashReporter: initialized +Mono path[0] = '/Users/dericp/workspace/ml-agents/3DBall.app/Contents/Resources/Data/Managed' +Mono config path = '/Users/dericp/workspace/ml-agents/3DBall.app/Contents/MonoBleedingEdge/etc' +INFO:mlagents_envs: +'Ball3DAcademy' started successfully! +Unity Academy name: Ball3DAcademy + +INFO:mlagents_envs:Connected new brain: +Unity brain name: Ball3DLearning + Number of Visual Observations (per agent): 0 + Vector Observation space size (per agent): 8 + Number of stacked Vector Observation: 1 +INFO:mlagents_envs:Hyperparameters for the PPO Trainer of brain Ball3DLearning: + batch_size: 64 + beta: 0.001 + buffer_size: 12000 + epsilon: 0.2 + gamma: 0.995 + hidden_units: 128 + lambd: 0.99 + learning_rate: 0.0003 + max_steps: 5.0e4 + normalize: True + num_epoch: 3 + num_layers: 2 + time_horizon: 1000 + sequence_length: 64 + summary_freq: 1000 + use_recurrent: False + memory_size: 256 + use_curiosity: False + curiosity_strength: 0.01 + curiosity_enc_size: 128 + output_path: ./results/first-run-0/Ball3DLearning +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 1000. Mean Reward: 1.242. Std of Reward: 0.746. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 2000. Mean Reward: 1.319. Std of Reward: 0.693. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 3000. Mean Reward: 1.804. Std of Reward: 1.056. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 4000. Mean Reward: 2.151. Std of Reward: 1.432. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 5000. Mean Reward: 3.175. Std of Reward: 2.250. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 6000. Mean Reward: 4.898. Std of Reward: 4.019. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 7000. Mean Reward: 6.716. Std of Reward: 5.125. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 8000. Mean Reward: 12.124. Std of Reward: 11.929. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 9000. Mean Reward: 18.151. Std of Reward: 16.871. Training. +INFO:mlagents.trainers: first-run-0: Ball3DLearning: Step: 10000. Mean Reward: 27.284. Std of Reward: 28.667. Training. +``` + +You can press Ctrl+C to stop the training, and your trained model will be at +`results//.onnx`, which corresponds to your model's +latest checkpoint. (**Note:** There is a known bug on Windows that causes the +saving of the model to fail when you early terminate the training, it's +recommended to wait until Step has reached the max_steps parameter you set in +your config YAML.) You can now embed this trained model into your Agent by +following the steps below: + +1. Move your model file into + `Project/Assets/ML-Agents/Examples/3DBall/TFModels/`. +1. Open the Unity Editor, and select the **3DBall** scene as described above. +1. Select the **3DBall** prefab from the Project window and select **Agent**. +1. Drag the `.onnx` file from the Project window of the Editor to + the **Model** placeholder in the **Ball3DAgent** inspector window. +1. Press the **Play** button at the top of the Editor. + +## Training on Headless Server + +To run training on headless server with no graphics rendering support, you need to turn off +graphics display in the Unity executable. There are two ways to achieve this: +1. Pass `--no-graphics` option to mlagents-learn training command. This is equivalent to + adding `-nographics -batchmode` to the Unity executable's commandline. +2. Build your Unity executable with **Server Build**. You can find this setting in Build Settings + in the Unity Editor. + +If you want to train with graphics (for example, using camera and visual observations), you'll +need to set up display rendering support (e.g. xvfb) on you server machine. In our +[Colab Notebook Tutorials](ML-Agents-Toolkit-Documentation.md#python-tutorial-with-google-colab), the Setup section has +examples of setting up xvfb on servers. diff --git a/docs/Limitations.md b/docs/Limitations.md new file mode 100644 index 0000000000000000000000000000000000000000..0cf8a8160253d453f5dc1a5f78f531c23bc76a08 --- /dev/null +++ b/docs/Limitations.md @@ -0,0 +1,7 @@ +# Limitations + +See the package-specific Limitations pages: + +- [`com.unity.mlagents` Unity package](https://docs.unity3d.com/Packages/com.unity.ml-agents@2.3/manual/index.html#known-limitations) +- [`mlagents` Python package](../ml-agents/) +- [`mlagents_envs` Python package](../ml-agents-envs/) diff --git a/docs/ML-Agents-Envs-README.md b/docs/ML-Agents-Envs-README.md new file mode 100644 index 0000000000000000000000000000000000000000..9e382027ea4c24d5a2defddf8739e164291947af --- /dev/null +++ b/docs/ML-Agents-Envs-README.md @@ -0,0 +1 @@ +{!../ml-agents-envs/README.md!} diff --git a/docs/ML-Agents-Overview.md b/docs/ML-Agents-Overview.md new file mode 100644 index 0000000000000000000000000000000000000000..ed1b834ed73dbc230767449f4fc73cb36720fddb --- /dev/null +++ b/docs/ML-Agents-Overview.md @@ -0,0 +1,819 @@ +# ML-Agents Toolkit Overview + +**Table of Contents** + +- [Running Example: Training NPC Behaviors](#running-example-training-npc-behaviors) +- [Key Components](#key-components) +- [Training Modes](#training-modes) + - [Built-in Training and Inference](#built-in-training-and-inference) + - [Cross-Platform Inference](#cross-platform-inference) + - [Custom Training and Inference](#custom-training-and-inference) +- [Flexible Training Scenarios](#flexible-training-scenarios) +- [Training Methods: Environment-agnostic](#training-methods-environment-agnostic) + - [A Quick Note on Reward Signals](#a-quick-note-on-reward-signals) + - [Deep Reinforcement Learning](#deep-reinforcement-learning) + - [Curiosity for Sparse-reward Environments](#curiosity-for-sparse-reward-environments) + - [RND for Sparse-reward Environments](#rnd-for-sparse-reward-environments) + - [Imitation Learning](#imitation-learning) + - [GAIL (Generative Adversarial Imitation Learning)](#gail-generative-adversarial-imitation-learning) + - [Behavioral Cloning (BC)](#behavioral-cloning-bc) + - [Recording Demonstrations](#recording-demonstrations) + - [Summary](#summary) +- [Training Methods: Environment-specific](#training-methods-environment-specific) + - [Training in Competitive Multi-Agent Environments with Self-Play](#training-in-competitive-multi-agent-environments-with-self-play) + - [Training in Cooperative Multi-Agent Environments with MA-POCA](#training-in-cooperative-multi-agent-environments-with-ma-poca) + - [Solving Complex Tasks using Curriculum Learning](#solving-complex-tasks-using-curriculum-learning) + - [Training Robust Agents using Environment Parameter Randomization](#training-robust-agents-using-environment-parameter-randomization) +- [Model Types](#model-types) + - [Learning from Vector Observations](#learning-from-vector-observations) + - [Learning from Cameras using Convolutional Neural Networks](#learning-from-cameras-using-convolutional-neural-networks) + - [Learning from Variable Length Observations using Attention](#learning-from-variable-length-observations-using-attention) + - [Memory-enhanced Agents using Recurrent Neural Networks](#memory-enhanced-agents-using-recurrent-neural-networks) +- [Additional Features](#additional-features) +- [Summary and Next Steps](#summary-and-next-steps) + +**The Unity Machine Learning Agents Toolkit** (ML-Agents Toolkit) is an +open-source project that enables games and simulations to serve as environments +for training intelligent agents. Agents can be trained using reinforcement +learning, imitation learning, neuroevolution, or other machine learning methods +through a simple-to-use Python API. We also provide implementations (based on +PyTorch) of state-of-the-art algorithms to enable game developers and +hobbyists to easily train intelligent agents for 2D, 3D and VR/AR games. These +trained agents can be used for multiple purposes, including controlling NPC +behavior (in a variety of settings such as multi-agent and adversarial), +automated testing of game builds and evaluating different game design decisions +pre-release. The ML-Agents Toolkit is mutually beneficial for both game +developers and AI researchers as it provides a central platform where advances +in AI can be evaluated on Unity’s rich environments and then made accessible to +the wider research and game developer communities. + +Depending on your background (i.e. researcher, game developer, hobbyist), you +may have very different questions on your mind at the moment. To make your +transition to the ML-Agents Toolkit easier, we provide several background pages +that include overviews and helpful resources on the +[Unity Engine](Background-Unity.md), +[machine learning](Background-Machine-Learning.md) and +[PyTorch](Background-PyTorch.md). We **strongly** recommend browsing the +relevant background pages if you're not familiar with a Unity scene, basic +machine learning concepts or have not previously heard of PyTorch. + +The remainder of this page contains a deep dive into ML-Agents, its key +components, different training modes and scenarios. By the end of it, you should +have a good sense of _what_ the ML-Agents Toolkit allows you to do. The +subsequent documentation pages provide examples of _how_ to use ML-Agents. To +get started, watch this +[demo video of ML-Agents in action](https://www.youtube.com/watch?v=fiQsmdwEGT8&feature=youtu.be). + +## Running Example: Training NPC Behaviors + +To help explain the material and terminology in this page, we'll use a +hypothetical, running example throughout. We will explore the problem of +training the behavior of a non-playable character (NPC) in a game. (An NPC is a +game character that is never controlled by a human player and its behavior is +pre-defined by the game developer.) More specifically, let's assume we're +building a multi-player, war-themed game in which players control the soldiers. +In this game, we have a single NPC who serves as a medic, finding and reviving +wounded players. Lastly, let us assume that there are two teams, each with five +players and one NPC medic. + +The behavior of a medic is quite complex. It first needs to avoid getting +injured, which requires detecting when it is in danger and moving to a safe +location. Second, it needs to be aware of which of its team members are injured +and require assistance. In the case of multiple injuries, it needs to assess the +degree of injury and decide who to help first. Lastly, a good medic will always +place itself in a position where it can quickly help its team members. Factoring +in all of these traits means that at every instance, the medic needs to measure +several attributes of the environment (e.g. position of team members, position +of enemies, which of its team members are injured and to what degree) and then +decide on an action (e.g. hide from enemy fire, move to help one of its +members). Given the large number of settings of the environment and the large +number of actions that the medic can take, defining and implementing such +complex behaviors by hand is challenging and prone to errors. + +With ML-Agents, it is possible to _train_ the behaviors of such NPCs (called +**Agents**) using a variety of methods. The basic idea is quite simple. We need +to define three entities at every moment of the game (called **environment**): + +- **Observations** - what the medic perceives about the environment. + Observations can be numeric and/or visual. Numeric observations measure + attributes of the environment from the point of view of the agent. For our + medic this would be attributes of the battlefield that are visible to it. For + most interesting environments, an agent will require several continuous + numeric observations. Visual observations, on the other hand, are images + generated from the cameras attached to the agent and represent what the agent + is seeing at that point in time. It is common to confuse an agent's + observation with the environment (or game) **state**. The environment state + represents information about the entire scene containing all the game + characters. The agents observation, however, only contains information that + the agent is aware of and is typically a subset of the environment state. For + example, the medic observation cannot include information about an enemy in + hiding that the medic is unaware of. +- **Actions** - what actions the medic can take. Similar to observations, + actions can either be continuous or discrete depending on the complexity of + the environment and agent. In the case of the medic, if the environment is a + simple grid world where only their location matters, then a discrete action + taking on one of four values (north, south, east, west) suffices. However, if + the environment is more complex and the medic can move freely then using two + continuous actions (one for direction and another for speed) is more + appropriate. +- **Reward signals** - a scalar value indicating how well the medic is doing. + Note that the reward signal need not be provided at every moment, but only + when the medic performs an action that is good or bad. For example, it can + receive a large negative reward if it dies, a modest positive reward whenever + it revives a wounded team member, and a modest negative reward when a wounded + team member dies due to lack of assistance. Note that the reward signal is how + the objectives of the task are communicated to the agent, so they need to be + set up in a manner where maximizing reward generates the desired optimal + behavior. + +After defining these three entities (the building blocks of a **reinforcement +learning task**), we can now _train_ the medic's behavior. This is achieved by +simulating the environment for many trials where the medic, over time, learns +what is the optimal action to take for every observation it measures by +maximizing its future reward. The key is that by learning the actions that +maximize its reward, the medic is learning the behaviors that make it a good +medic (i.e. one who saves the most number of lives). In **reinforcement +learning** terminology, the behavior that is learned is called a **policy**, +which is essentially a (optimal) mapping from observations to actions. Note that +the process of learning a policy through running simulations is called the +**training phase**, while playing the game with an NPC that is using its learned +policy is called the **inference phase**. + +The ML-Agents Toolkit provides all the necessary tools for using Unity as the +simulation engine for learning the policies of different objects in a Unity +environment. In the next few sections, we discuss how the ML-Agents Toolkit +achieves this and what features it provides. + +## Key Components + +The ML-Agents Toolkit contains five high-level components: + +- **Learning Environment** - which contains the Unity scene and all the game + characters. The Unity scene provides the environment in which agents observe, + act, and learn. How you set up the Unity scene to serve as a learning + environment really depends on your goal. You may be trying to solve a specific + reinforcement learning problem of limited scope, in which case you can use the + same scene for both training and for testing trained agents. Or, you may be + training agents to operate in a complex game or simulation. In this case, it + might be more efficient and practical to create a purpose-built training + scene. The ML-Agents Toolkit includes an ML-Agents Unity SDK + (`com.unity.ml-agents` package) that enables you to transform any Unity scene + into a learning environment by defining the agents and their behaviors. +- **Python Low-Level API** - which contains a low-level Python interface for + interacting and manipulating a learning environment. Note that, unlike the + Learning Environment, the Python API is not part of Unity, but lives outside + and communicates with Unity through the Communicator. This API is contained in + a dedicated `mlagents_envs` Python package and is used by the Python training + process to communicate with and control the Academy during training. However, + it can be used for other purposes as well. For example, you could use the API + to use Unity as the simulation engine for your own machine learning + algorithms. See [Python API](Python-LLAPI.md) for more information. +- **External Communicator** - which connects the Learning Environment with the + Python Low-Level API. It lives within the Learning Environment. +- **Python Trainers** which contains all the machine learning algorithms that + enable training agents. The algorithms are implemented in Python and are part + of their own `mlagents` Python package. The package exposes a single + command-line utility `mlagents-learn` that supports all the training methods + and options outlined in this document. The Python Trainers interface solely + with the Python Low-Level API. +- **Gym Wrapper** (not pictured). A common way in which machine learning + researchers interact with simulation environments is via a wrapper provided by + OpenAI called [gym](https://github.com/openai/gym). We provide a gym wrapper + in the `ml-agents-envs` package and [instructions](Python-Gym-API.md) for using + it with existing machine learning algorithms which utilize gym. +- **PettingZoo Wrapper** (not pictured) PettingZoo is python API for + interacting with multi-agent simulation environments that provides a + gym-like interface. We provide a PettingZoo wrapper for Unity ML-Agents + environments in the `ml-agents-envs` package and + [instructions](Python-PettingZoo-API.md) for using it with machine learning + algorithms. + +

+ Simplified ML-Agents Scene Block Diagram +

+ +_Simplified block diagram of ML-Agents._ + +The Learning Environment contains two Unity Components that help organize the +Unity scene: + +- **Agents** - which is attached to a Unity GameObject (any character within a + scene) and handles generating its observations, performing the actions it + receives and assigning a reward (positive / negative) when appropriate. Each + Agent is linked to a Behavior. +- **Behavior** - defines specific attributes of the agent such as the number of + actions that agent can take. Each Behavior is uniquely identified by a + `Behavior Name` field. A Behavior can be thought as a function that receives + observations and rewards from the Agent and returns actions. A Behavior can be + of one of three types: Learning, Heuristic or Inference. A Learning Behavior + is one that is not, yet, defined but about to be trained. A Heuristic Behavior + is one that is defined by a hard-coded set of rules implemented in code. An + Inference Behavior is one that includes a trained Neural Network file. In + essence, after a Learning Behavior is trained, it becomes an Inference + Behavior. + +Every Learning Environment will always have one Agent for every character in the +scene. While each Agent must be linked to a Behavior, it is possible for Agents +that have similar observations and actions to have the same Behavior. In our +sample game, we have two teams each with their own medic. Thus we will have two +Agents in our Learning Environment, one for each medic, but both of these medics +can have the same Behavior. This does not mean that at each instance they will +have identical observation and action _values_. + +

+ Example ML-Agents Scene Block Diagram +

+ +_Example block diagram of ML-Agents Toolkit for our sample game._ + +Note that in a single environment, there can be multiple Agents and multiple +Behaviors at the same time. For example, if we expanded our game to include tank +driver NPCs, then the Agent attached to those characters cannot share its +Behavior with the Agent linked to the medics (medics and drivers have different +actions). The Learning Environment through the Academy (not represented in the +diagram) ensures that all the Agents are in sync in addition to controlling +environment-wide settings. + +Lastly, it is possible to exchange data between Unity and Python outside of the +machine learning loop through _Side Channels_. One example of using _Side +Channels_ is to exchange data with Python about _Environment Parameters_. The +following diagram illustrates the above. + +

+ More Complete Example ML-Agents Scene Block Diagram +

+ +## Training Modes + +Given the flexibility of ML-Agents, there are a few ways in which training and +inference can proceed. + +### Built-in Training and Inference + +As mentioned previously, the ML-Agents Toolkit ships with several +implementations of state-of-the-art algorithms for training intelligent agents. +More specifically, during training, all the medics in the scene send their +observations to the Python API through the External Communicator. The Python API +processes these observations and sends back actions for each medic to take. +During training these actions are mostly exploratory to help the Python API +learn the best policy for each medic. Once training concludes, the learned +policy for each medic can be exported as a model file. Then during the inference +phase, the medics still continue to generate their observations, but instead of +being sent to the Python API, they will be fed into their (internal, embedded) +model to generate the _optimal_ action for each medic to take at every point in +time. + +The [Getting Started Guide](Getting-Started.md) tutorial covers this training +mode with the **3D Balance Ball** sample environment. + +#### Cross-Platform Inference + +It is important to note that the ML-Agents Toolkit leverages the +[Unity Inference Engine](Unity-Inference-Engine.md) to run the models within a +Unity scene such that an agent can take the _optimal_ action at each step. Given +that the Unity Inference Engine support most platforms that Unity does, this +means that any model you train with the ML-Agents Toolkit can be embedded into +your Unity application that runs on any platform. See our +[dedicated blog post](https://blogs.unity3d.com/2019/03/01/unity-ml-agents-toolkit-v0-7-a-leap-towards-cross-platform-inference/) +for additional information. + +### Custom Training and Inference + +In the previous mode, the Agents were used for training to generate a PyTorch +model that the Agents can later use. However, any user of the ML-Agents Toolkit +can leverage their own algorithms for training. In this case, the behaviors of +all the Agents in the scene will be controlled within Python. You can even turn +your environment into a [gym.](Python-Gym-API.md) + +We do not currently have a tutorial highlighting this mode, but you can learn +more about the Python API [here](Python-LLAPI.md). + +## Flexible Training Scenarios + +While the discussion so-far has mostly focused on training a single agent, with +ML-Agents, several training scenarios are possible. We are excited to see what +kinds of novel and fun environments the community creates. For those new to +training intelligent agents, below are a few examples that can serve as +inspiration: + +- Single-Agent. A single agent, with its own reward signal. The traditional way + of training an agent. An example is any single-player game, such as Chicken. +- Simultaneous Single-Agent. Multiple independent agents with independent reward + signals with same `Behavior Parameters`. A parallelized version of the + traditional training scenario, which can speed-up and stabilize the training + process. Helpful when you have multiple versions of the same character in an + environment who should learn similar behaviors. An example might be training a + dozen robot-arms to each open a door simultaneously. +- Adversarial Self-Play. Two interacting agents with inverse reward signals. In + two-player games, adversarial self-play can allow an agent to become + increasingly more skilled, while always having the perfectly matched opponent: + itself. This was the strategy employed when training AlphaGo, and more + recently used by OpenAI to train a human-beating 1-vs-1 Dota 2 agent. +- Cooperative Multi-Agent. Multiple interacting agents with a shared reward + signal with same or different `Behavior Parameters`. In this scenario, all + agents must work together to accomplish a task that cannot be done alone. + Examples include environments where each agent only has access to partial + information, which needs to be shared in order to accomplish the task or + collaboratively solve a puzzle. +- Competitive Multi-Agent. Multiple interacting agents with inverse reward + signals with same or different `Behavior Parameters`. In this scenario, agents + must compete with one another to either win a competition, or obtain some + limited set of resources. All team sports fall into this scenario. +- Ecosystem. Multiple interacting agents with independent reward signals with + same or different `Behavior Parameters`. This scenario can be thought of as + creating a small world in which animals with different goals all interact, + such as a savanna in which there might be zebras, elephants and giraffes, or + an autonomous driving simulation within an urban environment. + +## Training Methods: Environment-agnostic + +The remaining sections overview the various state-of-the-art machine learning +algorithms that are part of the ML-Agents Toolkit. If you aren't studying +machine and reinforcement learning as a subject and just want to train agents to +accomplish tasks, you can treat these algorithms as _black boxes_. There are a +few training-related parameters to adjust inside Unity as well as on the Python +training side, but you do not need in-depth knowledge of the algorithms +themselves to successfully create and train agents. Step-by-step procedures for +running the training process are provided in the +[Training ML-Agents](Training-ML-Agents.md) page. + +This section specifically focuses on the training methods that are available +regardless of the specifics of your learning environment. + +#### A Quick Note on Reward Signals + +In this section we introduce the concepts of _intrinsic_ and _extrinsic_ +rewards, which helps explain some of the training methods. + +In reinforcement learning, the end goal for the Agent is to discover a behavior +(a Policy) that maximizes a reward. You will need to provide the agent one or +more reward signals to use during training. Typically, a reward is defined by +your environment, and corresponds to reaching some goal. These are what we refer +to as _extrinsic_ rewards, as they are defined external of the learning +algorithm. + +Rewards, however, can be defined outside of the environment as well, to +encourage the agent to behave in certain ways, or to aid the learning of the +true extrinsic reward. We refer to these rewards as _intrinsic_ reward signals. +The total reward that the agent will learn to maximize can be a mix of extrinsic +and intrinsic reward signals. + +The ML-Agents Toolkit allows reward signals to be defined in a modular way, and +we provide four reward signals that can the mixed and matched to help shape +your agent's behavior: + +- `extrinsic`: represents the rewards defined in your environment, and is + enabled by default +- `gail`: represents an intrinsic reward signal that is defined by GAIL (see + below) +- `curiosity`: represents an intrinsic reward signal that encourages exploration + in sparse-reward environments that is defined by the Curiosity module (see + below). +- `rnd`: represents an intrinsic reward signal that encourages exploration + in sparse-reward environments that is defined by the Curiosity module (see + below). + +### Deep Reinforcement Learning + +ML-Agents provide an implementation of two reinforcement learning algorithms: + +- [Proximal Policy Optimization (PPO)](https://blog.openai.com/openai-baselines-ppo/) +- [Soft Actor-Critic (SAC)](https://bair.berkeley.edu/blog/2018/12/14/sac/) + +The default algorithm is PPO. This is a method that has been shown to be more +general purpose and stable than many other RL algorithms. + +In contrast with PPO, SAC is _off-policy_, which means it can learn from +experiences collected at any time during the past. As experiences are collected, +they are placed in an experience replay buffer and randomly drawn during +training. This makes SAC significantly more sample-efficient, often requiring +5-10 times less samples to learn the same task as PPO. However, SAC tends to +require more model updates. SAC is a good choice for heavier or slower +environments (about 0.1 seconds per step or more). SAC is also a "maximum +entropy" algorithm, and enables exploration in an intrinsic way. Read more about +maximum entropy RL +[here](https://bair.berkeley.edu/blog/2017/10/06/soft-q-learning/). + +#### Curiosity for Sparse-reward Environments + +In environments where the agent receives rare or infrequent rewards (i.e. +sparse-reward), an agent may never receive a reward signal on which to bootstrap +its training process. This is a scenario where the use of an intrinsic reward +signals can be valuable. Curiosity is one such signal which can help the agent +explore when extrinsic rewards are sparse. + +The `curiosity` Reward Signal enables the Intrinsic Curiosity Module. This is an +implementation of the approach described in +[Curiosity-driven Exploration by Self-supervised Prediction](https://pathak22.github.io/noreward-rl/) +by Pathak, et al. It trains two networks: + +- an inverse model, which takes the current and next observation of the agent, + encodes them, and uses the encoding to predict the action that was taken + between the observations +- a forward model, which takes the encoded current observation and action, and + predicts the next encoded observation. + +The loss of the forward model (the difference between the predicted and actual +encoded observations) is used as the intrinsic reward, so the more surprised the +model is, the larger the reward will be. + +For more information, see our dedicated +[blog post on the Curiosity module](https://blogs.unity3d.com/2018/06/26/solving-sparse-reward-tasks-with-curiosity/). + +#### RND for Sparse-reward Environments + +Similarly to Curiosity, Random Network Distillation (RND) is useful in sparse or rare +reward environments as it helps the Agent explore. The RND Module is implemented following +the paper [Exploration by Random Network Distillation](https://arxiv.org/abs/1810.12894). +RND uses two networks: + - The first is a network with fixed random weights that takes observations as inputs and + generates an encoding + - The second is a network with similar architecture that is trained to predict the + outputs of the first network and uses the observations the Agent collects as training data. + +The loss (the squared difference between the predicted and actual encoded observations) +of the trained model is used as intrinsic reward. The more an Agent visits a state, the +more accurate the predictions and the lower the rewards which encourages the Agent to +explore new states with higher prediction errors. + +### Imitation Learning + +It is often more intuitive to simply demonstrate the behavior we want an agent +to perform, rather than attempting to have it learn via trial-and-error methods. +For example, instead of indirectly training a medic with the help of a reward +function, we can give the medic real world examples of observations from the +game and actions from a game controller to guide the medic's behavior. Imitation +Learning uses pairs of observations and actions from a demonstration to learn a +policy. See this [video demo](https://youtu.be/kpb8ZkMBFYs) of imitation +learning . + +Imitation learning can either be used alone or in conjunction with reinforcement +learning. If used alone it can provide a mechanism for learning a specific type +of behavior (i.e. a specific style of solving the task). If used in conjunction +with reinforcement learning it can dramatically reduce the time the agent takes +to solve the environment. This can be especially pronounced in sparse-reward +environments. For instance, on the +[Pyramids environment](Learning-Environment-Examples.md#pyramids), using 6 +episodes of demonstrations can reduce training steps by more than 4 times. See +Behavioral Cloning + GAIL + Curiosity + RL below. + +

+ Using Demonstrations with Reinforcement Learning +

+ +The ML-Agents Toolkit provides a way to learn directly from demonstrations, as +well as use them to help speed up reward-based training (RL). We include two +algorithms called Behavioral Cloning (BC) and Generative Adversarial Imitation +Learning (GAIL). In most scenarios, you can combine these two features: + +- If you want to help your agents learn (especially with environments that have + sparse rewards) using pre-recorded demonstrations, you can generally enable + both GAIL and Behavioral Cloning at low strengths in addition to having an + extrinsic reward. An example of this is provided for the PushBlock example + environment in `config/imitation/PushBlock.yaml`. +- If you want to train purely from demonstrations with GAIL and BC _without_ an + extrinsic reward signal, please see the CrawlerStatic example environment under + in `config/imitation/CrawlerStatic.yaml`. + +***Note:*** GAIL introduces a [_survivor bias_](https://arxiv.org/pdf/1809.02925.pdf) +to the learning process. That is, by giving positive rewards based on similarity +to the expert, the agent is incentivized to remain alive for as long as possible. +This can directly conflict with goal-oriented tasks like our PushBlock or Pyramids +example environments where an agent must reach a goal state thus ending the +episode as quickly as possible. In these cases, we strongly recommend that you +use a low strength GAIL reward signal and a sparse extrinisic signal when +the agent achieves the task. This way, the GAIL reward signal will guide the +agent until it discovers the extrnisic signal and will not overpower it. If the +agent appears to be ignoring the extrinsic reward signal, you should reduce +the strength of GAIL. + +#### GAIL (Generative Adversarial Imitation Learning) + +GAIL, or +[Generative Adversarial Imitation Learning](https://arxiv.org/abs/1606.03476), +uses an adversarial approach to reward your Agent for behaving similar to a set +of demonstrations. GAIL can be used with or without environment rewards, and +works well when there are a limited number of demonstrations. In this framework, +a second neural network, the discriminator, is taught to distinguish whether an +observation/action is from a demonstration or produced by the agent. This +discriminator can then examine a new observation/action and provide it a reward +based on how close it believes this new observation/action is to the provided +demonstrations. + +At each training step, the agent tries to learn how to maximize this reward. +Then, the discriminator is trained to better distinguish between demonstrations +and agent state/actions. In this way, while the agent gets better and better at +mimicking the demonstrations, the discriminator keeps getting stricter and +stricter and the agent must try harder to "fool" it. + +This approach learns a _policy_ that produces states and actions similar to the +demonstrations, requiring fewer demonstrations than direct cloning of the +actions. In addition to learning purely from demonstrations, the GAIL reward +signal can be mixed with an extrinsic reward signal to guide the learning +process. + +#### Behavioral Cloning (BC) + +BC trains the Agent's policy to exactly mimic the actions shown in a set of +demonstrations. The BC feature can be enabled on the PPO or SAC trainers. As BC +cannot generalize past the examples shown in the demonstrations, BC tends to +work best when there exists demonstrations for nearly all of the states that the +agent can experience, or in conjunction with GAIL and/or an extrinsic reward. + +#### Recording Demonstrations + +Demonstrations of agent behavior can be recorded from the Unity Editor or build, +and saved as assets. These demonstrations contain information on the +observations, actions, and rewards for a given agent during the recording +session. They can be managed in the Editor, as well as used for training with BC +and GAIL. See the +[Designing Agents](Learning-Environment-Design-Agents.md#recording-demonstrations) +page for more information on how to record demonstrations for your agent. + +### Summary + +To summarize, we provide 3 training methods: BC, GAIL and RL (PPO or SAC) that +can be used independently or together: + +- BC can be used on its own or as a pre-training step before GAIL and/or RL +- GAIL can be used with or without extrinsic rewards +- RL can be used on its own (either PPO or SAC) or in conjunction with BC and/or + GAIL. + +Leveraging either BC or GAIL requires recording demonstrations to be provided as +input to the training algorithms. + +## Training Methods: Environment-specific + +In addition to the three environment-agnostic training methods introduced in the +previous section, the ML-Agents Toolkit provides additional methods that can aid +in training behaviors for specific types of environments. + +### Training in Competitive Multi-Agent Environments with Self-Play + +ML-Agents provides the functionality to train both symmetric and asymmetric +adversarial games with +[Self-Play](https://openai.com/blog/competitive-self-play/). A symmetric game is +one in which opposing agents are equal in form, function and objective. Examples +of symmetric games are our Tennis and Soccer example environments. In +reinforcement learning, this means both agents have the same observation and +actions and learn from the same reward function and so _they can share the +same policy_. In asymmetric games, this is not the case. An example of an +asymmetric games are Hide and Seek. Agents in these types of games do not always +have the same observation or actions and so sharing policy networks is not +necessarily ideal. + +With self-play, an agent learns in adversarial games by competing against fixed, +past versions of its opponent (which could be itself as in symmetric games) to +provide a more stable, stationary learning environment. This is compared to +competing against the current, best opponent in every episode, which is +constantly changing (because it's learning). + +Self-play can be used with our implementations of both Proximal Policy +Optimization (PPO) and Soft Actor-Critic (SAC). However, from the perspective of +an individual agent, these scenarios appear to have non-stationary dynamics +because the opponent is often changing. This can cause significant issues in the +experience replay mechanism used by SAC. Thus, we recommend that users use PPO. +For further reading on this issue in particular, see the paper +[Stabilising Experience Replay for Deep Multi-Agent Reinforcement Learning](https://arxiv.org/pdf/1702.08887.pdf). + +See our +[Designing Agents](Learning-Environment-Design-Agents.md#defining-teams-for-multi-agent-scenarios) +page for more information on setting up teams in your Unity scene. Also, read +our +[blog post on self-play](https://blogs.unity3d.com/2020/02/28/training-intelligent-adversaries-using-self-play-with-ml-agents/) +for additional information. Additionally, check [ELO Rating System](ELO-Rating-System.md) the method we use to calculate +the relative skill level between two players. + +### Training In Cooperative Multi-Agent Environments with MA-POCA + +![PushBlock with Agents Working Together](images/cooperative_pushblock.png) + +ML-Agents provides the functionality for training cooperative behaviors - i.e., +groups of agents working towards a common goal, where the success of the individual +is linked to the success of the whole group. In such a scenario, agents typically receive +rewards as a group. For instance, if a team of agents wins a game against an opposing +team, everyone is rewarded - even agents who did not directly contribute to the win. This +makes learning what to do as an individual difficult - you may get a win +for doing nothing, and a loss for doing your best. + +In ML-Agents, we provide MA-POCA (MultiAgent POsthumous Credit Assignment), which +is a novel multi-agent trainer that trains a _centralized critic_, a neural network +that acts as a "coach" for a whole group of agents. You can then give rewards to the team +as a whole, and the agents will learn how best to contribute to achieving that reward. +Agents can _also_ be given rewards individually, and the team will work together to help the +individual achieve those goals. During an episode, agents can be added or removed from the group, +such as when agents spawn or die in a game. If agents are removed mid-episode (e.g., if teammates die +or are removed from the game), they will still learn whether their actions contributed +to the team winning later, enabling agents to take group-beneficial actions even if +they result in the individual being removed from the game (i.e., self-sacrifice). +MA-POCA can also be combined with self-play to train teams of agents to play against each other. + +To learn more about enabling cooperative behaviors for agents in an ML-Agents environment, +check out [this page](Learning-Environment-Design-Agents.md#groups-for-cooperative-scenarios). + +To learn more about MA-POCA, please see our paper +[On the Use and Misuse of Absorbing States in Multi-Agent Reinforcement Learning](https://arxiv.org/pdf/2111.05992.pdf). +For further reading, MA-POCA builds on previous work in multi-agent cooperative learning +([Lowe et al.](https://arxiv.org/abs/1706.02275), [Foerster et al.](https://arxiv.org/pdf/1705.08926.pdf), +among others) to enable the above use-cases. + +### Solving Complex Tasks using Curriculum Learning + +Curriculum learning is a way of training a machine learning model where more +difficult aspects of a problem are gradually introduced in such a way that the +model is always optimally challenged. This idea has been around for a long time, +and it is how we humans typically learn. If you imagine any childhood primary +school education, there is an ordering of classes and topics. Arithmetic is +taught before algebra, for example. Likewise, algebra is taught before calculus. +The skills and knowledge learned in the earlier subjects provide a scaffolding +for later lessons. The same principle can be applied to machine learning, where +training on easier tasks can provide a scaffolding for harder tasks in the +future. + +Imagine training the medic to scale a wall to arrive at a wounded team +member. The starting point when training a medic to accomplish this task will be +a random policy. That starting policy will have the medic running in circles, +and will likely never, or very rarely scale the wall properly to revive their +team member (and achieve the reward). If we start with a simpler task, such as +moving toward an unobstructed team member, then the medic can easily learn to +accomplish the task. From there, we can slowly add to the difficulty of the task +by increasing the size of the wall until the medic can complete the initially +near-impossible task of scaling the wall. We have included an environment to +demonstrate this with ML-Agents, called +[Wall Jump](Learning-Environment-Examples.md#wall-jump). + +![Wall](images/curriculum.png) + +_Demonstration of a hypothetical curriculum training scenario in which a +progressively taller wall obstructs the path to the goal._ + +_[**Note**: The example provided above is for instructional purposes, and was +based on an early version of the +[Wall Jump example environment](Learning-Environment-Examples.md). As such, it +is not possible to directly replicate the results here using that environment.]_ + +The ML-Agents Toolkit supports modifying custom environment parameters during +the training process to aid in learning. This allows elements of the environment +related to difficulty or complexity to be dynamically adjusted based on training +progress. The [Training ML-Agents](Training-ML-Agents.md#curriculum-learning) +page has more information on defining training curriculums. + +### Training Robust Agents using Environment Parameter Randomization + +An agent trained on a specific environment, may be unable to generalize to any +tweaks or variations in the environment (in machine learning this is referred to +as overfitting). This becomes problematic in cases where environments are +instantiated with varying objects or properties. One mechanism to alleviate this +and train more robust agents that can generalize to unseen variations of the +environment is to expose them to these variations during training. Similar to +Curriculum Learning, where environments become more difficult as the agent +learns, the ML-Agents Toolkit provides a way to randomly sample parameters of +the environment during training. We refer to this approach as **Environment +Parameter Randomization**. For those familiar with Reinforcement Learning +research, this approach is based on the concept of +[Domain Randomization](https://arxiv.org/abs/1703.06907). By using +[parameter randomization during training](Training-ML-Agents.md#environment-parameter-randomization), +the agent can be better suited to adapt (with higher performance) to future +unseen variations of the environment. + +| Ball scale of 0.5 | Ball scale of 4 | +| :--------------------------: | :------------------------: | +| ![](images/3dball_small.png) | ![](images/3dball_big.png) | + +_Example of variations of the 3D Ball environment. The environment parameters +are `gravity`, `ball_mass` and `ball_scale`._ + +## Model Types + +Regardless of the training method deployed, there are a few model types that +users can train using the ML-Agents Toolkit. This is due to the flexibility in +defining agent observations, which include vector, ray cast and visual +observations. You can learn more about how to instrument an agent's observation +in the [Designing Agents](Learning-Environment-Design-Agents.md) guide. + +### Learning from Vector Observations + +Whether an agent's observations are ray cast or vector, the ML-Agents Toolkit +provides a fully connected neural network model to learn from those +observations. At training time you can configure different aspects of this model +such as the number of hidden units and number of layers. + +### Learning from Cameras using Convolutional Neural Networks + +Unlike other platforms, where the agent’s observation might be limited to a +single vector or image, the ML-Agents Toolkit allows multiple cameras to be used +for observations per agent. This enables agents to learn to integrate +information from multiple visual streams. This can be helpful in several +scenarios such as training a self-driving car which requires multiple cameras +with different viewpoints, or a navigational agent which might need to integrate +aerial and first-person visuals. You can learn more about adding visual +observations to an agent +[here](Learning-Environment-Design-Agents.md#multiple-visual-observations). + +When visual observations are utilized, the ML-Agents Toolkit leverages +convolutional neural networks (CNN) to learn from the input images. We offer +three network architectures: + +- a simple encoder which consists of two convolutional layers +- the implementation proposed by + [Mnih et al.](https://www.nature.com/articles/nature14236), consisting of + three convolutional layers, +- the [IMPALA Resnet](https://arxiv.org/abs/1802.01561) consisting of three + stacked layers, each with two residual blocks, making a much larger network + than the other two. + +The choice of the architecture depends on the visual complexity of the scene and +the available computational resources. + +### Learning from Variable Length Observations using Attention + +Using the ML-Agents Toolkit, it is possible to have agents learn from a +varying number of inputs. To do so, each agent can keep track of a buffer +of vector observations. At each step, the agent will go through all the +elements in the buffer and extract information but the elements +in the buffer can change at every step. +This can be useful in scenarios in which the agents must keep track of +a varying number of elements throughout the episode. For example in a game +where an agent must learn to avoid projectiles, but the projectiles can vary in +numbers. + +![Variable Length Observations Illustrated](images/variable-length-observation-illustrated.png) + +You can learn more about variable length observations +[here](Learning-Environment-Design-Agents.md#variable-length-observations). +When variable length observations are utilized, the ML-Agents Toolkit +leverages attention networks to learn from a varying number of entities. +Agents using attention will ignore entities that are deemed not relevant +and pay special attention to entities relevant to the current situation +based on context. + +### Memory-enhanced Agents using Recurrent Neural Networks + +Have you ever entered a room to get something and immediately forgot what you +were looking for? Don't let that happen to your agents. + +![Inspector](images/ml-agents-LSTM.png) + +In some scenarios, agents must learn to remember the past in order to take the +best decision. When an agent only has partial observability of the environment, +keeping track of past observations can help the agent learn. Deciding what the +agents should remember in order to solve a task is not easy to do by hand, but +our training algorithms can learn to keep track of what is important to remember +with [LSTM](https://en.wikipedia.org/wiki/Long_short-term_memory). + +## Additional Features + +Beyond the flexible training scenarios available, the ML-Agents Toolkit includes +additional features which improve the flexibility and interpretability of the +training process. + +- **Concurrent Unity Instances** - We enable developers to run concurrent, + parallel instances of the Unity executable during training. For certain + scenarios, this should speed up training. Check out our dedicated page on + [creating a Unity executable](Learning-Environment-Executable.md) and the + [Training ML-Agents](Training-ML-Agents.md#training-using-concurrent-unity-instances) + page for instructions on how to set the number of concurrent instances. +- **Recording Statistics from Unity** - We enable developers to + [record statistics](Learning-Environment-Design.md#recording-statistics) from + within their Unity environments. These statistics are aggregated and generated + during the training process. +- **Custom Side Channels** - We enable developers to + [create custom side channels](Custom-SideChannels.md) to manage data transfer + between Unity and Python that is unique to their training workflow and/or + environment. +- **Custom Samplers** - We enable developers to + [create custom sampling methods](Training-ML-Agents.md#defining-a-new-sampler-type) + for Environment Parameter Randomization. This enables users to customize this + training method for their particular environment. + +## Summary and Next Steps + +To briefly summarize: The ML-Agents Toolkit enables games and simulations built +in Unity to serve as the platform for training intelligent agents. It is +designed to enable a large variety of training modes and scenarios and comes +packed with several features to enable researchers and developers to leverage +(and enhance) machine learning within Unity. + +In terms of next steps: + +- For a walkthrough of running ML-Agents with a simple scene, check out the + [Getting Started](Getting-Started.md) guide. +- For a "Hello World" introduction to creating your own Learning Environment, + check out the + [Making a New Learning Environment](Learning-Environment-Create-New.md) page. +- For an overview on the more complex example environments that are provided in + this toolkit, check out the + [Example Environments](Learning-Environment-Examples.md) page. +- For more information on the various training options available, check out the + [Training ML-Agents](Training-ML-Agents.md) page. diff --git a/docs/ML-Agents-README.md b/docs/ML-Agents-README.md new file mode 100644 index 0000000000000000000000000000000000000000..5e2c7107a8c86a5b554b8645a63d65011adfd568 --- /dev/null +++ b/docs/ML-Agents-README.md @@ -0,0 +1 @@ +{!../ml-agents/README.md!} diff --git a/docs/ML-Agents-Toolkit-Documentation.md b/docs/ML-Agents-Toolkit-Documentation.md new file mode 100644 index 0000000000000000000000000000000000000000..a4389dc38a976825993beac6325223fc305f69b8 --- /dev/null +++ b/docs/ML-Agents-Toolkit-Documentation.md @@ -0,0 +1,84 @@ +# Unity ML-Agents Toolkit Documentation + +## Installation & Set-up + +- [Installation](Installation.md) + - [Using Virtual Environment](Using-Virtual-Environment.md) + +## Getting Started + +- [Getting Started Guide](Getting-Started.md) +- [ML-Agents Toolkit Overview](ML-Agents-Overview.md) + - [Background: Unity](Background-Unity.md) + - [Background: Machine Learning](Background-Machine-Learning.md) + - [Background: PyTorch](Background-PyTorch.md) +- [Example Environments](Learning-Environment-Examples.md) + +## Creating Learning Environments + +- [Making a New Learning Environment](Learning-Environment-Create-New.md) +- [Designing a Learning Environment](Learning-Environment-Design.md) + - [Designing Agents](Learning-Environment-Design-Agents.md) +- [Using an Executable Environment](Learning-Environment-Executable.md) +- [ML-Agents Package Settings](Package-Settings.md) + +## Training & Inference + +- [Training ML-Agents](Training-ML-Agents.md) + - [Training Configuration File](Training-Configuration-File.md) + - [Using TensorBoard to Observe Training](Using-Tensorboard.md) + - [Profiling Trainers](Profiling-Python.md) +- [Unity Inference Engine](Unity-Inference-Engine.md) + +## Extending ML-Agents + +- [Creating Custom Side Channels](Custom-SideChannels.md) +- [Creating Custom Samplers for Environment Parameter Randomization](Training-ML-Agents.md#defining-a-new-sampler-type) + +## Hugging Face Integration + +- [Using Hugging Face to download and upload trained models](Hugging-Face-Integration.md) + +## Python Tutorial with Google Colab + +- [Using a UnityEnvironment](https://colab.research.google.com/github/Unity-Technologies/ml-agents/blob/release_20_docs/colab/Colab_UnityEnvironment_1_Run.ipynb) +- [Q-Learning with a UnityEnvironment](https://colab.research.google.com/github/Unity-Technologies/ml-agents/blob/release_20_docs/colab/Colab_UnityEnvironment_2_Train.ipynb) +- [Using Side Channels on a UnityEnvironment](https://colab.research.google.com/github/Unity-Technologies/ml-agents/blob/release_20_docs/colab/Colab_UnityEnvironment_3_SideChannel.ipynb) + +## Help + +- [Migrating from earlier versions of ML-Agents](Migrating.md) +- [Frequently Asked Questions](FAQ.md) +- [ML-Agents Glossary](Glossary.md) +- [Limitations](Limitations.md) + +## API Docs + +- [API Reference](API-Reference.md) +- [Python API Documentation](Python-LLAPI-Documentation.md) +- [How to use the Python API](Python-LLAPI.md) +- [How to use the Unity Environment Registry](Unity-Environment-Registry.md) +- [Wrapping Learning Environment as a Gym (+Baselines/Dopamine Integration)](Python-Gym-API.md) + +## Translations + +To make the Unity ML-Agents Toolkit accessible to the global research and Unity +developer communities, we're attempting to create and maintain translations of +our documentation. We've started with translating a subset of the documentation +to one language (Chinese), but we hope to continue translating more pages and to +other languages. Consequently, we welcome any enhancements and improvements from +the community. + +- [Chinese](../localized_docs/zh-CN/) +- [Korean](../localized_docs/KR/) + +## Deprecated Docs + +We no longer use them ourselves and so they may not be up-to-date. We've decided +to keep them up just in case they are helpful to you. + +- [Windows Anaconda Installation](Installation-Anaconda-Windows.md) +- [Using Docker](Using-Docker.md) +- [Training on the Cloud with Amazon Web Services](Training-on-Amazon-Web-Service.md) +- [Training on the Cloud with Microsoft Azure](Training-on-Microsoft-Azure.md) +- [Using the Video Recorder](https://github.com/Unity-Technologies/video-recorder) diff --git a/docs/Migrating.md b/docs/Migrating.md new file mode 100644 index 0000000000000000000000000000000000000000..dc294447496c34c9fd53c28b28cbe200990e318e --- /dev/null +++ b/docs/Migrating.md @@ -0,0 +1,882 @@ +# Upgrading + +# Migrating + +## Migrating to the ml-agents-envs 0.29.0 package +- Python 3.8 is now the minimum version of python supported due to [python3.6 EOL](https://endoflife.date/python). + Please update your python installation to 3.8.13 or higher. +- The `gym-unity` package has been refactored into the `ml-agents-envs` package. Please update your imports accordingly. +- Example: + - Before +```python +from gym_unity.unity_gym_env import UnityToGymWrapper +``` + - After: +```python +from mlagents_envs.envs.unity_gym_env import UnityToGymWrapper +``` + + +## Migrating the package to version 2.0 +- The official version of Unity ML-Agents supports is now 2022.3 LTS. If you run + into issues, please consider deleting your project's Library folder and reponening your + project. +- If you used any of the APIs that were deprecated before version 2.0, you need to use their replacement. These +deprecated APIs have been removed. See the migration steps bellow for specific API replacements. + +### Deprecated methods removed +| **Deprecated API** | **Suggested Replacement** | +|:-------:|:------:| +| `IActuator ActuatorComponent.CreateActuator()` | `IActuator[] ActuatorComponent.CreateActuators()` | +| `IActionReceiver.PackActions(in float[] destination)` | none | +| `Agent.CollectDiscreteActionMasks(DiscreteActionMasker actionMasker)` | `Agent.WriteDiscreteActionMask(IDiscreteActionMask actionMask)` | +| `Agent.Heuristic(float[] actionsOut)` | `Agent.Heuristic(in ActionBuffers actionsOut)` | +| `Agent.OnActionReceived(float[] vectorAction)` | `Agent.OnActionReceived(ActionBuffers actions)` | +| `Agent.GetAction()` | `Agent.GetStoredActionBuffers()` | +| `BrainParameters.SpaceType`, `VectorActionSize`, `VectorActionSpaceType`, and `NumActions` | `BrainParameters.ActionSpec` | +| `ObservationWriter.AddRange(IEnumerable data, int writeOffset = 0)` | `ObservationWriter. AddList(IList data, int writeOffset = 0` | +| `SensorComponent.IsVisual()` and `IsVector()` | none | +| `VectorSensor.AddObservation(IEnumerable observation)` | `VectorSensor.AddObservation(IList observation)` | +| `SideChannelsManager` | `SideChannelManager` | + +### IDiscreteActionMask changes +- The interface for disabling specific discrete actions has changed. `IDiscreteActionMask.WriteMask()` was removed, +and replaced with `SetActionEnabled()`. Instead of returning an IEnumerable with indices to disable, you can +now call `SetActionEnabled` for each index to disable (or enable). As an example, if you overrode +`Agent.WriteDiscreteActionMask()` with something that looked like: + +```csharp +public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask) +{ + var branch = 2; + var actionsToDisable = new[] {1, 3}; + actionMask.WriteMask(branch, actionsToDisable); +} +``` + +the equivalent code would now be + +```csharp +public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask) +{ + var branch = 2; + actionMask.SetActionEnabled(branch, 1, false); + actionMask.SetActionEnabled(branch, 3, false); +} +``` +### IActuator changes +- The `IActuator` interface now implements `IHeuristicProvider`. Please add the corresponding `Heuristic(in ActionBuffers)` +method to your custom Actuator classes. + +### ISensor and SensorComponent changes +- The `ISensor.GetObservationShape()` method and `ITypedSensor` +and `IDimensionPropertiesSensor` interfaces were removed, and `GetObservationSpec()` was added. You can use +`ObservationSpec.Vector()` or `ObservationSpec.Visual()` to generate `ObservationSpec`s that are equivalent to +the previous shape. For example, if your old ISensor looked like: + +```csharp +public override int[] GetObservationShape() +{ + return new[] { m_Height, m_Width, m_NumChannels }; +} +``` + +the equivalent code would now be + +```csharp +public override ObservationSpec GetObservationSpec() +{ + return ObservationSpec.Visual(m_Height, m_Width, m_NumChannels); +} +``` + +- The `ISensor.GetCompressionType()` method and `ISparseChannelSensor` interface was removed, +and `GetCompressionSpec()` was added. You can use `CompressionSpec.Default()` or +`CompressionSpec.Compressed()` to generate `CompressionSpec`s that are equivalent to + the previous values. For example, if your old ISensor looked like: + ```csharp +public virtual SensorCompressionType GetCompressionType() +{ + return SensorCompressionType.None; +} +``` + +the equivalent code would now be + +```csharp +public CompressionSpec GetCompressionSpec() +{ + return CompressionSpec.Default(); +} +``` + +- The abstract method `SensorComponent.GetObservationShape()` was removed. +- The abstract method `SensorComponent.CreateSensor()` was replaced with `CreateSensors()`, which returns an `ISensor[]`. + +### Match3 integration changes +The Match-3 integration utilities were moved from `com.unity.ml-agents.extensions` to `com.unity.ml-agents`. + +The `AbstractBoard` interface was changed: +* `AbstractBoard` no longer contains `Rows`, `Columns`, `NumCellTypes`, and `NumSpecialTypes` fields. +* `public abstract BoardSize GetMaxBoardSize()` was added as an abstract method. `BoardSize` is a new struct that +contains `Rows`, `Columns`, `NumCellTypes`, and `NumSpecialTypes` fields, with the same meanings as the old +`AbstractBoard` fields. +* `public virtual BoardSize GetCurrentBoardSize()` is an optional method; by default it returns `GetMaxBoardSize()`. If +you wish to use a single behavior to work with multiple board sizes, override `GetCurrentBoardSize()` to return the +current `BoardSize`. The values returned by `GetCurrentBoardSize()` must be less than or equal to the corresponding +values from `GetMaxBoardSize()`. + +### GridSensor changes +The sensor configuration has changed: +* The sensor implementation has been refactored and exsisting GridSensor created from extension package +will not work in newer version. Some errors might show up when loading the old sensor in the scene. +You'll need to remove the old sensor and create a new GridSensor. +* These parameters names have changed but still refer to the same concept in the sensor: `GridNumSide` -> `GridSize`, +`RotateToAgent` -> `RotateWithAgent`, `ObserveMask` -> `ColliderMask`, `DetectableObjects` -> `DetectableTags` +* `DepthType` (`ChanelBase`/`ChannelHot`) option and `ChannelDepth` are removed. Now the default is +one-hot encoding for detected tag. If you were using original GridSensor without overriding any method, +switching to new GridSensor will produce similar effect for training although the actual observations +will be slightly different. + +For creating your GridSensor implementation with custom data: +* To create custom GridSensor, derive from `GridSensorBase` instead of `GridSensor`. Besides overriding +`GetObjectData()`, you will also need to consider override `GetCellObservationSize()`, `IsDataNormalized()` +and `GetProcessCollidersMethod()` according to the data you collect. Also you'll need to override +`GridSensorComponent.GetGridSensors()` and return your custom GridSensor. +* The input argument `tagIndex` in `GetObjectData()` has changed from 1-indexed to 0-indexed and the +data type changed from `float` to `int`. The index of first detectable tag will be 0 instead of 1. +`normalizedDistance` was removed from input. +* The observation data should be written to the input `dataBuffer` instead of creating and returning a new array. +* Removed the constraint of all data required to be normalized. You should specify it in `IsDataNormalized()`. +Sensors with non-normalized data cannot use PNG compression type. +* The sensor will not further encode the data recieved from `GetObjectData()` anymore. The values +recieved from `GetObjectData()` will be the observation sent to the trainer. + +### LSTM models from previous releases no longer supported +The way the Unity Inference Engine processes LSTM (recurrent neural networks) has changed. As a result, models +trained with previous versions of ML-Agents will not be usable at inference if they were trained with a `memory` +setting in the `.yaml` config file. +If you want to use a model that has a recurrent neural network in this release of ML-Agents, you need to train +the model using the python trainer from this release. + + +## Migrating to Release 13 +### Implementing IHeuristic in your IActuator implementations + - If you have any custom actuators, you can now implement the `IHeuristicProvider` interface to have your actuator + handle the generation of actions when an Agent is running in heuristic mode. +- `VectorSensor.AddObservation(IEnumerable)` is deprecated. Use `VectorSensor.AddObservation(IList)` + instead. +- `ObservationWriter.AddRange()` is deprecated. Use `ObservationWriter.AddList()` instead. +- `ActuatorComponent.CreateAcuator()` is deprecated. Please use override `ActuatorComponent.CreateActuators` + instead. Since `ActuatorComponent.CreateActuator()` is abstract, you will still need to override it in your + class until it is removed. It is only ever called if you don't override `ActuatorComponent.CreateActuators`. + You can suppress the warnings by surrounding the method with the following pragma: + ```c# + #pragma warning disable 672 + public IActuator CreateActuator() { ... } + #pragma warning restore 672 + ``` + + +# Migrating +## Migrating to Release 11 +### Agent virtual method deprecation + - `Agent.CollectDiscreteActionMasks()` was deprecated and should be replaced with `Agent.WriteDiscreteActionMask()` + - `Agent.Heuristic(float[])` was deprecated and should be replaced with `Agent.Heuristic(ActionBuffers)`. + - `Agent.OnActionReceived(float[])` was deprecated and should be replaced with `Agent.OnActionReceived(ActionBuffers)`. + - `Agent.GetAction()` was deprecated and should be replaced with `Agent.GetStoredActionBuffers()`. + +The default implementation of these will continue to call the deprecated versions where appropriate. However, the +deprecated versions may not be compatible with continuous and discrete actions on the same Agent. + +### BrainParameters field and method deprecation + - `BrainParameters.VectorActionSize` was deprecated; you can now set `BrainParameters.ActionSpec.NumContinuousActions` + or `BrainParameters.ActionSpec.BranchSizes` instead. + - `BrainParameters.VectorActionSpaceType` was deprecated, since both continuous and discrete actions can now be used. + - `BrainParameters.NumActions()` was deprecated. Use `BrainParameters.ActionSpec.NumContinuousActions` and + `BrainParameters.ActionSpec.NumDiscreteActions` instead. + +## Migrating from Release 7 to latest + +### Important changes +- Some trainer files were moved. If you were using the `TrainerFactory` class, it was moved to +the `trainers/trainer` folder. +- The `components` folder containing `bc` and `reward_signals` code was moved to the `trainers/tf` +folder + +### Steps to Migrate +- Replace calls to `from mlagents.trainers.trainer_util import TrainerFactory` to `from mlagents.trainers.trainer import TrainerFactory` +- Replace calls to `from mlagents.trainers.trainer_util import handle_existing_directories` to `from mlagents.trainers.directory_utils import validate_existing_directories` +- Replace `mlagents.trainers.components` with `mlagents.trainers.tf.components` in your import statements. + + +## Migrating from Release 3 to Release 7 + +### Important changes +- The Parameter Randomization feature has been merged with the Curriculum feature. It is now possible to specify a sampler +in the lesson of a Curriculum. Curriculum has been refactored and is now specified at the level of the parameter, not the +behavior. More information +[here](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Training-ML-Agents.md).(#4160) + +### Steps to Migrate +- The configuration format for curriculum and parameter randomization has changed. To upgrade your configuration files, +an upgrade script has been provided. Run `python -m mlagents.trainers.upgrade_config -h` to see the script usage. Note that you will have had to upgrade to/install the current version of ML-Agents before running the script. To update manually: + - If your config file used a `parameter_randomization` section, rename that section to `environment_parameters` + - If your config file used a `curriculum` section, you will need to rewrite your curriculum with this [format](Training-ML-Agents.md#curriculum). + +## Migrating from Release 1 to Release 3 + +### Important changes +- Training artifacts (trained models, summaries) are now found under `results/` + instead of `summaries/` and `models/`. +- Trainer configuration, curriculum configuration, and parameter randomization + configuration have all been moved to a single YAML file. (#3791) +- Trainer configuration format has changed, and using a "default" behavior name has + been deprecated. (#3936) +- `max_step` in the `TerminalStep` and `TerminalSteps` objects was renamed `interrupted`. +- On the UnityEnvironment API, `get_behavior_names()` and `get_behavior_specs()` methods were combined into the property `behavior_specs` that contains a mapping from behavior names to behavior spec. +- `use_visual` and `allow_multiple_visual_obs` in the `UnityToGymWrapper` constructor +were replaced by `allow_multiple_obs` which allows one or more visual observations and +vector observations to be used simultaneously. +- `--save-freq` has been removed from the CLI and is now configurable in the trainer configuration + file. +- `--lesson` has been removed from the CLI. Lessons will resume when using `--resume`. + To start at a different lesson, modify your Curriculum configuration. + +### Steps to Migrate +- To upgrade your configuration files, an upgrade script has been provided. Run + `python -m mlagents.trainers.upgrade_config -h` to see the script usage. Note that you will have + had to upgrade to/install the current version of ML-Agents before running the script. + + To do it manually, copy your `` sections from `trainer_config.yaml` into a separate trainer configuration file, under a `behaviors` section. + The `default` section is no longer needed. This new file should be specific to your environment, and not contain + configurations for multiple environments (unless they have the same Behavior Names). + - You will need to reformat your trainer settings as per the [example](Training-ML-Agents.md). + - If your training uses [curriculum](Training-ML-Agents.md#curriculum-learning), move those configurations under a `curriculum` section. + - If your training uses [parameter randomization](Training-ML-Agents.md#environment-parameter-randomization), move + the contents of the sampler config to `parameter_randomization` in the main trainer configuration. +- If you are using `UnityEnvironment` directly, replace `max_step` with `interrupted` + in the `TerminalStep` and `TerminalSteps` objects. + - Replace usage of `get_behavior_names()` and `get_behavior_specs()` in UnityEnvironment with `behavior_specs`. + - If you use the `UnityToGymWrapper`, remove `use_visual` and `allow_multiple_visual_obs` + from the constructor and add `allow_multiple_obs = True` if the environment contains either + both visual and vector observations or multiple visual observations. + - If you were setting `--save-freq` in the CLI, add a `checkpoint_interval` value in your + trainer configuration, and set it equal to `save-freq * n_agents_in_scene`. + +## Migrating from 0.15 to Release 1 + +### Important changes + +- The `MLAgents` C# namespace was renamed to `Unity.MLAgents`, and other nested + namespaces were similarly renamed (#3843). +- The `--load` and `--train` command-line flags have been deprecated and + replaced with `--resume` and `--inference`. +- Running with the same `--run-id` twice will now throw an error. +- The `play_against_current_self_ratio` self-play trainer hyperparameter has + been renamed to `play_against_latest_model_ratio` +- Removed the multi-agent gym option from the gym wrapper. For multi-agent + scenarios, use the [Low Level Python API](Python-LLAPI.md). +- The low level Python API has changed. You can look at the document + [Low Level Python API documentation](Python-LLAPI.md) for more information. If + you use `mlagents-learn` for training, this should be a transparent change. +- The obsolete `Agent` methods `GiveModel`, `Done`, `InitializeAgent`, + `AgentAction` and `AgentReset` have been removed. +- The signature of `Agent.Heuristic()` was changed to take a `float[]` as a + parameter, instead of returning the array. This was done to prevent a common + source of error where users would return arrays of the wrong size. +- The SideChannel API has changed (#3833, #3660) : + - Introduced the `SideChannelManager` to register, unregister and access side + channels. + - `EnvironmentParameters` replaces the default `FloatProperties`. You can + access the `EnvironmentParameters` with + `Academy.Instance.EnvironmentParameters` on C#. If you were previously + creating a `UnityEnvironment` in python and passing it a + `FloatPropertiesChannel`, create an `EnvironmentParametersChannel` instead. + - `SideChannel.OnMessageReceived` is now a protected method (was public) + - SideChannel IncomingMessages methods now take an optional default argument, + which is used when trying to read more data than the message contains. + - Added a feature to allow sending stats from C# environments to TensorBoard + (and other python StatsWriters). To do this from your code, use + `Academy.Instance.StatsRecorder.Add(key, value)`(#3660) +- `num_updates` and `train_interval` for SAC have been replaced with + `steps_per_update`. +- The `UnityEnv` class from the `gym-unity` package was renamed + `UnityToGymWrapper` and no longer creates the `UnityEnvironment`. Instead, the + `UnityEnvironment` must be passed as input to the constructor of + `UnityToGymWrapper` +- Public fields and properties on several classes were renamed to follow Unity's + C# style conventions. All public fields and properties now use "PascalCase" + instead of "camelCase"; for example, `Agent.maxStep` was renamed to + `Agent.MaxStep`. For a full list of changes, see the pull request. (#3828) +- `WriteAdapter` was renamed to `ObservationWriter`. (#3834) + +### Steps to Migrate + +- In C# code, replace `using MLAgents` with `using Unity.MLAgents`. Replace + other nested namespaces such as `using MLAgents.Sensors` with + `using Unity.MLAgents.Sensors` +- Replace the `--load` flag with `--resume` when calling `mlagents-learn`, and + don't use the `--train` flag as training will happen by default. To run + without training, use `--inference`. +- To force-overwrite files from a pre-existing run, add the `--force` + command-line flag. +- The Jupyter notebooks have been removed from the repository. +- If your Agent class overrides `Heuristic()`, change the signature to + `public override void Heuristic(float[] actionsOut)` and assign values to + `actionsOut` instead of returning an array. +- If you used `SideChannels` you must: + - Replace `Academy.FloatProperties` with + `Academy.Instance.EnvironmentParameters`. + - `Academy.RegisterSideChannel` and `Academy.UnregisterSideChannel` were + removed. Use `SideChannelManager.RegisterSideChannel` and + `SideChannelManager.UnregisterSideChannel` instead. +- Set `steps_per_update` to be around equal to the number of agents in your + environment, times `num_updates` and divided by `train_interval`. +- Replace `UnityEnv` with `UnityToGymWrapper` in your code. The constructor no + longer takes a file name as input but a fully constructed `UnityEnvironment` + instead. +- Update uses of "camelCase" fields and properties to "PascalCase". + +## Migrating from 0.14 to 0.15 + +### Important changes + +- The `Agent.CollectObservations()` virtual method now takes as input a + `VectorSensor` sensor as argument. The `Agent.AddVectorObs()` methods were + removed. +- The `SetMask` was renamed to `SetMask` method must now be called on the + `DiscreteActionMasker` argument of the `CollectDiscreteActionMasks` virtual + method. +- We consolidated our API for `DiscreteActionMasker`. `SetMask` takes two + arguments : the branch index and the list of masked actions for that branch. +- The `Monitor` class has been moved to the Examples Project. (It was prone to + errors during testing) +- The `MLAgents.Sensors` namespace has been introduced. All sensors classes are + part of the `MLAgents.Sensors` namespace. +- The `MLAgents.SideChannels` namespace has been introduced. All side channel + classes are part of the `MLAgents.SideChannels` namespace. +- The interface for `RayPerceptionSensor.PerceiveStatic()` was changed to take + an input class and write to an output class, and the method was renamed to + `Perceive()`. +- The `SetMask` method must now be called on the `DiscreteActionMasker` argument + of the `CollectDiscreteActionMasks` method. +- The method `GetStepCount()` on the Agent class has been replaced with the + property getter `StepCount` +- The `--multi-gpu` option has been removed temporarily. +- `AgentInfo.actionMasks` has been renamed to `AgentInfo.discreteActionMasks`. +- `BrainParameters` and `SpaceType` have been removed from the public API +- `BehaviorParameters` have been removed from the public API. +- `DecisionRequester` has been made internal (you can still use the + DecisionRequesterComponent from the inspector). `RepeatAction` was renamed + `TakeActionsBetweenDecisions` for clarity. +- The following methods in the `Agent` class have been renamed. The original + method names will be removed in a later release: + - `InitializeAgent()` was renamed to `Initialize()` + - `AgentAction()` was renamed to `OnActionReceived()` + - `AgentReset()` was renamed to `OnEpsiodeBegin()` + - `Done()` was renamed to `EndEpisode()` + - `GiveModel()` was renamed to `SetModel()` +- The `IFloatProperties` interface has been removed. +- The interface for SideChannels was changed: + - In C#, `OnMessageReceived` now takes a `IncomingMessage` argument, and + `QueueMessageToSend` takes an `OutgoingMessage` argument. + - In python, `on_message_received` now takes a `IncomingMessage` argument, and + `queue_message_to_send` takes an `OutgoingMessage` argument. + - Automatic stepping for Academy is now controlled from the + AutomaticSteppingEnabled property. + +### Steps to Migrate + +- Add the `using MLAgents.Sensors;` in addition to `using MLAgents;` on top of + your Agent's script. +- Replace your Agent's implementation of `CollectObservations()` with + `CollectObservations(VectorSensor sensor)`. In addition, replace all calls to + `AddVectorObs()` with `sensor.AddObservation()` or + `sensor.AddOneHotObservation()` on the `VectorSensor` passed as argument. +- Replace your calls to `SetActionMask` on your Agent to + `DiscreteActionMasker.SetActionMask` in `CollectDiscreteActionMasks`. +- If you call `RayPerceptionSensor.PerceiveStatic()` manually, add your inputs + to a `RayPerceptionInput`. To get the previous float array output, iterate + through `RayPerceptionOutput.rayOutputs` and call + `RayPerceptionOutput.RayOutput.ToFloatArray()`. +- Replace all calls to `Agent.GetStepCount()` with `Agent.StepCount` +- We strongly recommend replacing the following methods with their new + equivalent as they will be removed in a later release: + - `InitializeAgent()` to `Initialize()` + - `AgentAction()` to `OnActionReceived()` + - `AgentReset()` to `OnEpisodeBegin()` + - `Done()` to `EndEpisode()` + - `GiveModel()` to `SetModel()` +- Replace `IFloatProperties` variables with `FloatPropertiesChannel` variables. +- If you implemented custom `SideChannels`, update the signatures of your + methods, and add your data to the `OutgoingMessage` or read it from the + `IncomingMessage`. +- Replace calls to Academy.EnableAutomaticStepping()/DisableAutomaticStepping() + with Academy.AutomaticSteppingEnabled = true/false. + +## Migrating from 0.13 to 0.14 + +### Important changes + +- The `UnitySDK` folder has been split into a Unity Package + (`com.unity.ml-agents`) and an examples project (`Project`). Please follow the + [Installation Guide](Installation.md) to get up and running with this new repo + structure. +- Several changes were made to how agents are reset and marked as done: + - Calling `Done()` on the Agent will now reset it immediately and call the + `AgentReset` virtual method. (This is to simplify the previous logic in + which the Agent had to wait for the next `EnvironmentStep` to reset) + - The "Reset on Done" setting in AgentParameters was removed; this is now + effectively always true. `AgentOnDone` virtual method on the Agent has been + removed. +- The `Decision Period` and `On Demand decision` checkbox have been removed from + the Agent. On demand decision is now the default (calling `RequestDecision` on + the Agent manually.) +- The Academy class was changed to a singleton, and its virtual methods were + removed. +- Trainer steps are now counted per-Agent, not per-environment as in previous + versions. For instance, if you have 10 Agents in the scene, 20 environment + steps now corresponds to 200 steps as printed in the terminal and in + Tensorboard. +- Curriculum config files are now YAML formatted and all curricula for a + training run are combined into a single file. +- The `--num-runs` command-line option has been removed from `mlagents-learn`. +- Several fields on the Agent were removed or made private in order to simplify + the interface. + - The `agentParameters` field of the Agent has been removed. (Contained only + `maxStep` information) + - `maxStep` is now a public field on the Agent. (Was moved from + `agentParameters`) + - The `Info` field of the Agent has been made private. (Was only used + internally and not meant to be modified outside of the Agent) + - The `GetReward()` method on the Agent has been removed. (It was being + confused with `GetCumulativeReward()`) + - The `AgentAction` struct no longer contains a `value` field. (Value + estimates were not set during inference) + - The `GetValueEstimate()` method on the Agent has been removed. + - The `UpdateValueAction()` method on the Agent has been removed. +- The deprecated `RayPerception3D` and `RayPerception2D` classes were removed, + and the `legacyHitFractionBehavior` argument was removed from + `RayPerceptionSensor.PerceiveStatic()`. +- RayPerceptionSensor was inconsistent in how it handle scale on the Agent's + transform. It now scales the ray length and sphere size for casting as the + transform's scale changes. + +### Steps to Migrate + +- Follow the instructions on how to install the `com.unity.ml-agents` package + into your project in the [Installation Guide](Installation.md). +- If your Agent implemented `AgentOnDone` and did not have the checkbox + `Reset On Done` checked in the inspector, you must call the code that was in + `AgentOnDone` manually. +- If you give your Agent a reward or penalty at the end of an episode (e.g. for + reaching a goal or falling off of a platform), make sure you call + `AddReward()` or `SetReward()` _before_ calling `Done()`. Previously, the + order didn't matter. +- If you were not using `On Demand Decision` for your Agent, you **must** add a + `DecisionRequester` component to your Agent GameObject and set its + `Decision Period` field to the old `Decision Period` of the Agent. +- If you have a class that inherits from Academy: + - If the class didn't override any of the virtual methods and didn't store any + additional data, you can just remove the old script from the scene. + - If the class had additional data, create a new MonoBehaviour and store the + data in the new MonoBehaviour instead. + - If the class overrode the virtual methods, create a new MonoBehaviour and + move the logic to it: + - Move the InitializeAcademy code to MonoBehaviour.Awake + - Move the AcademyStep code to MonoBehaviour.FixedUpdate + - Move the OnDestroy code to MonoBehaviour.OnDestroy. + - Move the AcademyReset code to a new method and add it to the + Academy.OnEnvironmentReset action. +- Multiply `max_steps` and `summary_freq` in your `trainer_config.yaml` by the + number of Agents in the scene. +- Combine curriculum configs into a single file. See + [the WallJump curricula](https://github.com/Unity-Technologies/ml-agents/blob/0.14.1/config/curricula/wall_jump.yaml) for an example of + the new curriculum config format. A tool like https://www.json2yaml.com may be + useful to help with the conversion. +- If you have a model trained which uses RayPerceptionSensor and has non-1.0 + scale in the Agent's transform, it must be retrained. + +## Migrating from ML-Agents Toolkit v0.12.0 to v0.13.0 + +### Important changes + +- The low level Python API has changed. You can look at the document + [Low Level Python API documentation](Python-LLAPI.md) for more information. This + should only affect you if you're writing a custom trainer; if you use + `mlagents-learn` for training, this should be a transparent change. + - `reset()` on the Low-Level Python API no longer takes a `train_mode` + argument. To modify the performance/speed of the engine, you must use an + `EngineConfigurationChannel` + - `reset()` on the Low-Level Python API no longer takes a `config` argument. + `UnityEnvironment` no longer has a `reset_parameters` field. To modify float + properties in the environment, you must use a `FloatPropertiesChannel`. For + more information, refer to the + [Low Level Python API documentation](Python-LLAPI.md) +- `CustomResetParameters` are now removed. +- The Academy no longer has a `Training Configuration` nor + `Inference Configuration` field in the inspector. To modify the configuration + from the Low-Level Python API, use an `EngineConfigurationChannel`. To modify + it during training, use the new command line arguments `--width`, `--height`, + `--quality-level`, `--time-scale` and `--target-frame-rate` in + `mlagents-learn`. +- The Academy no longer has a `Default Reset Parameters` field in the inspector. + The Academy class no longer has a `ResetParameters`. To access shared float + properties with Python, use the new `FloatProperties` field on the Academy. +- Offline Behavioral Cloning has been removed. To learn from demonstrations, use + the GAIL and Behavioral Cloning features with either PPO or SAC. +- `mlagents.envs` was renamed to `mlagents_envs`. The previous repo layout + depended on [PEP420](https://www.python.org/dev/peps/pep-0420/), which caused + problems with some of our tooling such as mypy and pylint. +- The official version of Unity ML-Agents supports is now 2018.4 LTS. If you run + into issues, please consider deleting your library folder and reponening your + projects. You will need to install the Barracuda package into your project in + order to ML-Agents to compile correctly. + +### Steps to Migrate + +- If you had a custom `Training Configuration` in the Academy inspector, you + will need to pass your custom configuration at every training run using the + new command line arguments `--width`, `--height`, `--quality-level`, + `--time-scale` and `--target-frame-rate`. +- If you were using `--slow` in `mlagents-learn`, you will need to pass your old + `Inference Configuration` of the Academy inspector with the new command line + arguments `--width`, `--height`, `--quality-level`, `--time-scale` and + `--target-frame-rate` instead. +- Any imports from `mlagents.envs` should be replaced with `mlagents_envs`. + +## Migrating from ML-Agents Toolkit v0.11.0 to v0.12.0 + +### Important Changes + +- Text actions and observations, and custom action and observation protos have + been removed. +- RayPerception3D and RayPerception2D are marked deprecated, and will be removed + in a future release. They can be replaced by RayPerceptionSensorComponent3D + and RayPerceptionSensorComponent2D. +- The `Use Heuristic` checkbox in Behavior Parameters has been replaced with a + `Behavior Type` dropdown menu. This has the following options: + - `Default` corresponds to the previous unchecked behavior, meaning that + Agents will train if they connect to a python trainer, otherwise they will + perform inference. + - `Heuristic Only` means the Agent will always use the `Heuristic()` method. + This corresponds to having "Use Heuristic" selected in 0.11.0. + - `Inference Only` means the Agent will always perform inference. +- Barracuda was upgraded to 0.3.2, and it is now installed via the Unity Package + Manager. + +### Steps to Migrate + +- We [fixed a bug](https://github.com/Unity-Technologies/ml-agents/pull/2823) in + `RayPerception3d.Perceive()` that was causing the `endOffset` to be used + incorrectly. However this may produce different behavior from previous + versions if you use a non-zero `startOffset`. To reproduce the old behavior, + you should increase the value of `endOffset` by `startOffset`. You can + verify your raycasts are performing as expected in scene view using the debug + rays. +- If you use RayPerception3D, replace it with RayPerceptionSensorComponent3D + (and similarly for 2D). The settings, such as ray angles and detectable tags, + are configured on the component now. RayPerception3D would contribute + `(# of rays) * (# of tags + 2)` to the State Size in Behavior Parameters, but + this is no longer necessary, so you should reduce the State Size by this + amount. Making this change will require retraining your model, since the + observations that RayPerceptionSensorComponent3D produces are different from + the old behavior. +- If you see messages such as + `The type or namespace 'Barracuda' could not be found` or + `The type or namespace 'Google' could not be found`, you will need to + [install the Barracuda preview package](Installation.md#package-installation). + +## Migrating from ML-Agents Toolkit v0.10 to v0.11.0 + +### Important Changes + +- The definition of the gRPC service has changed. +- The online BC training feature has been removed. +- The BroadcastHub has been deprecated. If there is a training Python process, + all LearningBrains in the scene will automatically be trained. If there is no + Python process, inference will be used. +- The Brain ScriptableObjects have been deprecated. The Brain Parameters are now + on the Agent and are referred to as Behavior Parameters. Make sure the + Behavior Parameters is attached to the Agent GameObject. +- To use a heuristic behavior, implement the `Heuristic()` method in the Agent + class and check the `use heuristic` checkbox in the Behavior Parameters. +- Several changes were made to the setup for visual observations (i.e. using + Cameras or RenderTextures): + - Camera resolutions are no longer stored in the Brain Parameters. + - AgentParameters no longer stores lists of Cameras and RenderTextures + - To add visual observations to an Agent, you must now attach a + CameraSensorComponent or RenderTextureComponent to the agent. The + corresponding Camera or RenderTexture can be added to these in the editor, + and the resolution and color/grayscale is configured on the component + itself. + +#### Steps to Migrate + +- In order to be able to train, make sure both your ML-Agents Python package and + UnitySDK code come from the v0.11 release. Training will not work, for + example, if you update the ML-Agents Python package, and only update the API + Version in UnitySDK. +- If your Agents used visual observations, you must add a CameraSensorComponent + corresponding to each old Camera in the Agent's camera list (and similarly for + RenderTextures). +- Since Brain ScriptableObjects have been removed, you will need to delete all + the Brain ScriptableObjects from your `Assets` folder. Then, add a + `Behavior Parameters` component to each `Agent` GameObject. You will then need + to complete the fields on the new `Behavior Parameters` component with the + BrainParameters of the old Brain. + +## Migrating from ML-Agents Toolkit v0.9 to v0.10 + +### Important Changes + +- We have updated the C# code in our repository to be in line with Unity Coding + Conventions. This has changed the name of some public facing classes and + enums. +- The example environments have been updated. If you were using these + environments to benchmark your training, please note that the resulting + rewards may be slightly different in v0.10. + +#### Steps to Migrate + +- `UnitySDK/Assets/ML-Agents/Scripts/Communicator.cs` and its class + `Communicator` have been renamed to + `UnitySDK/Assets/ML-Agents/Scripts/ICommunicator.cs` and `ICommunicator` + respectively. +- The `SpaceType` Enums `discrete`, and `continuous` have been renamed to + `Discrete` and `Continuous`. +- We have removed the `Done` call as well as the capacity to set `Max Steps` on + the Academy. Therefore an AcademyReset will never be triggered from C# (only + from Python). If you want to reset the simulation after a fixed number of + steps, or when an event in the simulation occurs, we recommend looking at our + multi-agent example environments (such as FoodCollector). In our examples, + groups of Agents can be reset through an "Area" that can reset groups of + Agents. +- The import for `mlagents.envs.UnityEnvironment` was removed. If you are using + the Python API, change `from mlagents_envs import UnityEnvironment` to + `from mlagents_envs.environment import UnityEnvironment`. + +## Migrating from ML-Agents Toolkit v0.8 to v0.9 + +### Important Changes + +- We have changed the way reward signals (including Curiosity) are defined in + the `trainer_config.yaml`. +- When using multiple environments, every "step" is recorded in TensorBoard. +- The steps in the command line console corresponds to a single step of a single + environment. Previously, each step corresponded to one step for all + environments (i.e., `num_envs` steps). + +#### Steps to Migrate + +- If you were overriding any of these following parameters in your config file, + remove them from the top-level config and follow the steps below: + - `gamma`: Define a new `extrinsic` reward signal and set it's `gamma` to your + new gamma. + - `use_curiosity`, `curiosity_strength`, `curiosity_enc_size`: Define a + `curiosity` reward signal and set its `strength` to `curiosity_strength`, + and `encoding_size` to `curiosity_enc_size`. Give it the same `gamma` as + your `extrinsic` signal to mimic previous behavior. +- TensorBoards generated when running multiple environments in v0.8 are not + comparable to those generated in v0.9 in terms of step count. Multiply your + v0.8 step count by `num_envs` for an approximate comparison. You may need to + change `max_steps` in your config as appropriate as well. + +## Migrating from ML-Agents Toolkit v0.7 to v0.8 + +### Important Changes + +- We have split the Python packages into two separate packages `ml-agents` and + `ml-agents-envs`. +- `--worker-id` option of `learn.py` has been removed, use `--base-port` instead + if you'd like to run multiple instances of `learn.py`. + +#### Steps to Migrate + +- If you are installing via PyPI, there is no change. +- If you intend to make modifications to `ml-agents` or `ml-agents-envs` please + check the Installing for Development in the + [Installation documentation](Installation.md). + +## Migrating from ML-Agents Toolkit v0.6 to v0.7 + +### Important Changes + +- We no longer support TFS and are now using the + [Unity Inference Engine](Unity-Inference-Engine.md) + +#### Steps to Migrate + +- Make sure to remove the `ENABLE_TENSORFLOW` flag in your Unity Project + settings + +## Migrating from ML-Agents Toolkit v0.5 to v0.6 + +### Important Changes + +- Brains are now Scriptable Objects instead of MonoBehaviors. +- You can no longer modify the type of a Brain. If you want to switch between + `PlayerBrain` and `LearningBrain` for multiple agents, you will need to assign + a new Brain to each agent separately. **Note:** You can pass the same Brain to + multiple agents in a scene by leveraging Unity's prefab system or look for all + the agents in a scene using the search bar of the `Hierarchy` window with the + word `Agent`. + +- We replaced the **Internal** and **External** Brain with **Learning Brain**. + When you need to train a model, you need to drag it into the `Broadcast Hub` + inside the `Academy` and check the `Control` checkbox. +- We removed the `Broadcast` checkbox of the Brain, to use the broadcast + functionality, you need to drag the Brain into the `Broadcast Hub`. +- When training multiple Brains at the same time, each model is now stored into + a separate model file rather than in the same file under different graph + scopes. +- The **Learning Brain** graph scope, placeholder names, output names and custom + placeholders can no longer be modified. + +#### Steps to Migrate + +- To update a scene from v0.5 to v0.6, you must: + - Remove the `Brain` GameObjects in the scene. (Delete all of the Brain + GameObjects under Academy in the scene.) + - Create new `Brain` Scriptable Objects using `Assets -> Create -> ML-Agents` + for each type of the Brain you plan to use, and put the created files under + a folder called Brains within your project. + - Edit their `Brain Parameters` to be the same as the parameters used in the + `Brain` GameObjects. + - Agents have a `Brain` field in the Inspector, you need to drag the + appropriate Brain ScriptableObject in it. + - The Academy has a `Broadcast Hub` field in the inspector, which is list of + brains used in the scene. To train or control your Brain from the + `mlagents-learn` Python script, you need to drag the relevant + `LearningBrain` ScriptableObjects used in your scene into entries into this + list. + +## Migrating from ML-Agents Toolkit v0.4 to v0.5 + +### Important + +- The Unity project `unity-environment` has been renamed `UnitySDK`. +- The `python` folder has been renamed to `ml-agents`. It now contains two + packages, `mlagents.env` and `mlagents.trainers`. `mlagents.env` can be used + to interact directly with a Unity environment, while `mlagents.trainers` + contains the classes for training agents. +- The supported Unity version has changed from `2017.1 or later` to + `2017.4 or later`. 2017.4 is an LTS (Long Term Support) version that helps us + maintain good quality and support. Earlier versions of Unity might still work, + but you may encounter an + [error](FAQ.md#instance-of-corebraininternal-couldnt-be-created) listed here. + +### Unity API + +- Discrete Actions now use [branches](https://arxiv.org/abs/1711.08946). You can + now specify concurrent discrete actions. You will need to update the Brain + Parameters in the Brain Inspector in all your environments that use discrete + actions. Refer to the + [discrete action documentation](Learning-Environment-Design-Agents.md#discrete-action-space) + for more information. + +### Python API + +- In order to run a training session, you can now use the command + `mlagents-learn` instead of `python3 learn.py` after installing the `mlagents` + packages. This change is documented + [here](Training-ML-Agents.md#training-with-mlagents-learn). For example, if we + previously ran + + ```sh + python3 learn.py 3DBall --train + ``` + + from the `python` subdirectory (which is changed to `ml-agents` subdirectory + in v0.5), we now run + + ```sh + mlagents-learn config/trainer_config.yaml --env=3DBall --train + ``` + + from the root directory where we installed the ML-Agents Toolkit. + +- It is now required to specify the path to the yaml trainer configuration file + when running `mlagents-learn`. For an example trainer configuration file, see + [trainer_config.yaml](https://github.com/Unity-Technologies/ml-agents/blob/0.5.0a/config/trainer_config.yaml). An example of passing a + trainer configuration to `mlagents-learn` is shown above. +- The environment name is now passed through the `--env` option. +- Curriculum learning has been changed. In summary: + - Curriculum files for the same environment must now be placed into a folder. + Each curriculum file should be named after the Brain whose curriculum it + specifies. + - `min_lesson_length` now specifies the minimum number of episodes in a lesson + and affects reward thresholding. + - It is no longer necessary to specify the `Max Steps` of the Academy to use + curriculum learning. + +## Migrating from ML-Agents Toolkit v0.3 to v0.4 + +### Unity API + +- `using MLAgents;` needs to be added in all of the C# scripts that use + ML-Agents. + +### Python API + +- We've changed some of the Python packages dependencies in requirement.txt + file. Make sure to run `pip3 install -e .` within your `ml-agents/python` + folder to update your Python packages. + +## Migrating from ML-Agents Toolkit v0.2 to v0.3 + +There are a large number of new features and improvements in the ML-Agents +toolkit v0.3 which change both the training process and Unity API in ways which +will cause incompatibilities with environments made using older versions. This +page is designed to highlight those changes for users familiar with v0.1 or v0.2 +in order to ensure a smooth transition. + +### Important + +- The ML-Agents Toolkit is no longer compatible with Python 2. + +### Python Training + +- The training script `ppo.py` and `PPO.ipynb` Python notebook have been + replaced with a single `learn.py` script as the launching point for training + with ML-Agents. For more information on using `learn.py`, see + [here](Training-ML-Agents.md#training-with-mlagents-learn). +- Hyperparameters for training Brains are now stored in the + `trainer_config.yaml` file. For more information on using this file, see + [here](Training-ML-Agents.md#training-configurations). + +### Unity API + +- Modifications to an Agent's rewards must now be done using either + `AddReward()` or `SetReward()`. +- Setting an Agent to done now requires the use of the `Done()` method. +- `CollectStates()` has been replaced by `CollectObservations()`, which now no + longer returns a list of floats. +- To collect observations, call `AddVectorObs()` within `CollectObservations()`. + Note that you can call `AddVectorObs()` with floats, integers, lists and + arrays of floats, Vector3 and Quaternions. +- `AgentStep()` has been replaced by `AgentAction()`. +- `WaitTime()` has been removed. +- The `Frame Skip` field of the Academy is replaced by the Agent's + `Decision Frequency` field, enabling the Agent to make decisions at different + frequencies. +- The names of the inputs in the Internal Brain have been changed. You must + replace `state` with `vector_observation` and `observation` with + `visual_observation`. In addition, you must remove the `epsilon` placeholder. + +### Semantics + +In order to more closely align with the terminology used in the Reinforcement +Learning field, and to be more descriptive, we have changed the names of some of +the concepts used in ML-Agents. The changes are highlighted in the table below. + +| Old - v0.2 and earlier | New - v0.3 and later | +| ---------------------- | -------------------- | +| State | Vector Observation | +| Observation | Visual Observation | +| Action | Vector Action | +| N/A | Text Observation | +| N/A | Text Action | diff --git a/docs/Package-Settings.md b/docs/Package-Settings.md new file mode 100644 index 0000000000000000000000000000000000000000..4bc00973c42efa0bc4217fc61e471dc78dc1e208 --- /dev/null +++ b/docs/Package-Settings.md @@ -0,0 +1,33 @@ +# ML-Agents Package Settings + +ML-Agents Package Settings contains settings that apply to the whole project. +It allows you to configure ML-Agents-specific settings in the Editor. These settings are available for use in both the Editor and Player. + +You can find them at `Edit` > `Project Settings...` > `ML-Agents`. It lists out all the available settings and their default values. + + +## Create Custom Settings +In order to to use your own settings for your project, you'll need to create a settings asset. + +You can do this by clicking the `Create Settings Asset` buttom or clicking the gear on the top right and select `New Settings Asset...`. +The asset file can be placed anywhere in the `Asset/` folder in your project. +After Creating the settings asset, you'll be able to modify the settings for your project and your settings will be saved in the asset. + +![Package Settings](images/package-settings.png) + + +## Multiple Custom Settings for Different Scenarios +You can create multiple settings assets in one project. + +By clicking the gear on the top right you'll see all available settings listed in the drop-down menu to choose from. + +This allows you to create different settings for different scenatios. For example, you can create two +separate settings for training and inference, and specify which one you want to use according to what you're currently running. + +![Multiple Settings](images/multiple-settings.png) + + + + + + diff --git a/docs/Profiling-Python.md b/docs/Profiling-Python.md new file mode 100644 index 0000000000000000000000000000000000000000..0e69aefcd05dad2eff7476949baf6c5782dbbc15 --- /dev/null +++ b/docs/Profiling-Python.md @@ -0,0 +1,72 @@ +# Profiling in Python + +As part of the ML-Agents Tookit, we provide a lightweight profiling system, in +order to identity hotspots in the training process and help spot regressions +from changes. + +Timers are hierarchical, meaning that the time tracked in a block of code can be +further split into other blocks if desired. This also means that a function that +is called from multiple places in the code will appear in multiple places in the +timing output. + +All timers operate using a "global" instance by default, but this can be +overridden if necessary (mainly for testing). + +## Adding Profiling + +There are two ways to indicate code should be included in profiling. The +simplest way is to add the `@timed` decorator to a function or method of +interested. + +```python +class TrainerController: + # .... + @timed + def advance(self, env: EnvManager) -> int: + # do stuff +``` + +You can also used the `hierarchical_timer` context manager. + +```python +with hierarchical_timer("communicator.exchange"): + outputs = self.communicator.exchange(step_input) +``` + +The context manager may be easier than the `@timed` decorator for profiling +different parts of a large function, or profiling calls to abstract methods that +might not use decorator. + +## Output + +By default, at the end of training, timers are collected and written in json +format to `{summaries_dir}/{run_id}_timers.json`. The output consists of node +objects with the following keys: + +- total (float): The total time in seconds spent in the block, including child + calls. +- count (int): The number of times the block was called. +- self (float): The total time in seconds spent in the block, excluding child + calls. +- children (dictionary): A dictionary of child nodes, keyed by the node name. +- is_parallel (bool): Indicates that the block of code was executed in multiple + threads or processes (see below). This is optional and defaults to false. + +### Parallel execution + +#### Subprocesses + +For code that executes in multiple processes (for example, +SubprocessEnvManager), we periodically send the timer information back to the +"main" process, aggregate the timers there, and flush them in the subprocess. +Note that (depending on the number of processes) this can result in timers where +the total time may exceed the parent's total time. This is analogous to the +difference between "real" and "user" values reported from the unix `time` +command. In the timer output, blocks that were run in parallel are indicated by +the `is_parallel` flag. + +#### Threads + +Timers currently use `time.perf_counter()` to track time spent, which may not +give accurate results for multiple threads. If this is problematic, set +`threaded: false` in your trainer configuration. diff --git a/docs/Python-Custom-Trainer-Plugin.md b/docs/Python-Custom-Trainer-Plugin.md new file mode 100644 index 0000000000000000000000000000000000000000..2881d7d506a445945df2898f59e7a1289d819ed5 --- /dev/null +++ b/docs/Python-Custom-Trainer-Plugin.md @@ -0,0 +1,51 @@ +# Unity Ml-Agents Custom trainers Plugin + +As an attempt to bring a wider variety of reinforcement learning algorithms to our users, we have added custom trainers +capabilities. we introduce an extensible plugin system to define new trainers based on the High level trainer API +in `Ml-agents` Package. This will allow rerouting `mlagents-learn` CLI to custom trainers and extending the config files +with hyper-parameters specific to your new trainers. We will expose a high-level extensible trainer (both on-policy, +and off-policy trainers) optimizer and hyperparameter classes with documentation for the use of this plugin. For more +infromation on how python plugin system works see [Plugin interfaces](Training-Plugins.md). +## Overview +Model-free RL algorithms generally fall into two broad categories: on-policy and off-policy. On-policy algorithms perform updates based on data gathered from the current policy. Off-policy algorithms learn a Q function from a buffer of previous data, then use this Q function to make decisions. Off-policy algorithms have three key benefits in the context of ML-Agents: They tend to use fewer samples than on-policy as they can pull and re-use data from the buffer many times. They allow player demonstrations to be inserted in-line with RL data into the buffer, enabling new ways of doing imitation learning by streaming player data. + +To add new custom trainers to ML-agents, you would need to create a new python package. +To give you an idea of how to structure your package, we have created a [mlagents_trainer_plugin](../ml-agents-trainer-plugin) package ourselves as an +example, with implementation of `A2c` and `DQN` algorithms. You would need a `setup.py` file to list extra requirements and +register the new RL algorithm in ml-agents ecosystem and be able to call `mlagents-learn` CLI with your customized +configuration. + + +```shell +├── mlagents_trainer_plugin +│ ├── __init__.py +│ ├── a2c +│ │ ├── __init__.py +│ │ ├── a2c_3DBall.yaml +│ │ ├── a2c_optimizer.py +│ │ └── a2c_trainer.py +│ └── dqn +│ ├── __init__.py +│ ├── dqn_basic.yaml +│ ├── dqn_optimizer.py +│ └── dqn_trainer.py +└── setup.py +``` +## Installation and Execution +If you haven't already, follow the [installation instructions](Installation.md). Once you have the `ml-agents-env` and `ml-agents` packages you can install the plugin package. From the repository's root directory install `ml-agents-trainer-plugin` (or replace with the name of your plugin folder). + +```sh +pip3 install -e <./ml-agents-trainer-plugin> +``` + +Following the previous installations your package is added as an entrypoint and you can use a config file with new +trainers: +```sh +mlagents-learn ml-agents-trainer-plugin/mlagents_trainer_plugin/a2c/a2c_3DBall.yaml --run-id +--env +``` + +## Tutorial +Here’s a step-by-step [tutorial](Tutorial-Custom-Trainer-Plugin.md) on how to write a setup file and extend ml-agents trainers, optimizers, and +hyperparameter settings.To extend ML-agents classes see references on +[trainers](Python-On-Off-Policy-Trainer-Documentation.md) and [Optimizer](Python-Optimizer-Documentation.md). diff --git a/docs/Python-Gym-API-Documentation.md b/docs/Python-Gym-API-Documentation.md new file mode 100644 index 0000000000000000000000000000000000000000..b35771fc46c0e870e86a946edb9a2e327ed34291 --- /dev/null +++ b/docs/Python-Gym-API-Documentation.md @@ -0,0 +1,161 @@ +# Table of Contents + +* [mlagents\_envs.envs.unity\_gym\_env](#mlagents_envs.envs.unity_gym_env) + * [UnityGymException](#mlagents_envs.envs.unity_gym_env.UnityGymException) + * [UnityToGymWrapper](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper) + * [\_\_init\_\_](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper.__init__) + * [reset](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper.reset) + * [step](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper.step) + * [render](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper.render) + * [close](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper.close) + * [seed](#mlagents_envs.envs.unity_gym_env.UnityToGymWrapper.seed) + * [ActionFlattener](#mlagents_envs.envs.unity_gym_env.ActionFlattener) + * [\_\_init\_\_](#mlagents_envs.envs.unity_gym_env.ActionFlattener.__init__) + * [lookup\_action](#mlagents_envs.envs.unity_gym_env.ActionFlattener.lookup_action) + + +# mlagents\_envs.envs.unity\_gym\_env + + +## UnityGymException Objects + +```python +class UnityGymException(error.Error) +``` + +Any error related to the gym wrapper of ml-agents. + + +## UnityToGymWrapper Objects + +```python +class UnityToGymWrapper(gym.Env) +``` + +Provides Gym wrapper for Unity Learning Environments. + + +#### \_\_init\_\_ + +```python + | __init__(unity_env: BaseEnv, uint8_visual: bool = False, flatten_branched: bool = False, allow_multiple_obs: bool = False, action_space_seed: Optional[int] = None) +``` + +Environment initialization + +**Arguments**: + +- `unity_env`: The Unity BaseEnv to be wrapped in the gym. Will be closed when the UnityToGymWrapper closes. +- `uint8_visual`: Return visual observations as uint8 (0-255) matrices instead of float (0.0-1.0). +- `flatten_branched`: If True, turn branched discrete action spaces into a Discrete space rather than + MultiDiscrete. +- `allow_multiple_obs`: If True, return a list of np.ndarrays as observations with the first elements + containing the visual observations and the last element containing the array of vector observations. + If False, returns a single np.ndarray containing either only a single visual observation or the array of + vector observations. +- `action_space_seed`: If non-None, will be used to set the random seed on created gym.Space instances. + + +#### reset + +```python + | reset() -> Union[List[np.ndarray], np.ndarray] +``` + +Resets the state of the environment and returns an initial observation. +Returns: observation (object/list): the initial observation of the +space. + + +#### step + +```python + | step(action: List[Any]) -> GymStepResult +``` + +Run one timestep of the environment's dynamics. When end of +episode is reached, you are responsible for calling `reset()` +to reset this environment's state. +Accepts an action and returns a tuple (observation, reward, done, info). + +**Arguments**: + +- `action` _object/list_ - an action provided by the environment + +**Returns**: + +- `observation` _object/list_ - agent's observation of the current environment + reward (float/list) : amount of reward returned after previous action +- `done` _boolean/list_ - whether the episode has ended. +- `info` _dict_ - contains auxiliary diagnostic information. + + +#### render + +```python + | render(mode="rgb_array") +``` + +Return the latest visual observations. +Note that it will not render a new frame of the environment. + + +#### close + +```python + | close() -> None +``` + +Override _close in your subclass to perform any necessary cleanup. +Environments will automatically close() themselves when +garbage collected or when the program exits. + + +#### seed + +```python + | seed(seed: Any = None) -> None +``` + +Sets the seed for this env's random number generator(s). +Currently not implemented. + + +## ActionFlattener Objects + +```python +class ActionFlattener() +``` + +Flattens branched discrete action spaces into single-branch discrete action spaces. + + +#### \_\_init\_\_ + +```python + | __init__(branched_action_space) +``` + +Initialize the flattener. + +**Arguments**: + +- `branched_action_space`: A List containing the sizes of each branch of the action +space, e.g. [2,3,3] for three branches with size 2, 3, and 3 respectively. + + +#### lookup\_action + +```python + | lookup_action(action) +``` + +Convert a scalar discrete action into a unique set of branched actions. + +**Arguments**: + +- `action`: A scalar value representing one of the discrete actions. + +**Returns**: + +The List containing the branched actions. diff --git a/docs/Python-Gym-API.md b/docs/Python-Gym-API.md new file mode 100644 index 0000000000000000000000000000000000000000..50051195ed73f2ea0e67311ebf16e82d6efb397f --- /dev/null +++ b/docs/Python-Gym-API.md @@ -0,0 +1,357 @@ +# Unity ML-Agents Gym Wrapper + +A common way in which machine learning researchers interact with simulation +environments is via a wrapper provided by OpenAI called `gym`. For more +information on the gym interface, see [here](https://github.com/openai/gym). + +We provide a gym wrapper and instructions for using it with existing machine +learning algorithms which utilize gym. Our wrapper provides interfaces on top of +our `UnityEnvironment` class, which is the default way of interfacing with a +Unity environment via Python. + +## Installation + +The gym wrapper is part of the `mlgents_envs` package. Please refer to the +[mlagents_envs installation instructions](ML-Agents-Envs-README.md). + + +## Using the Gym Wrapper + +The gym interface is available from `gym_unity.envs`. To launch an environment +from the root of the project repository use: + +```python +from mlagents_envs.envs.unity_gym_env import UnityToGymWrapper + +env = UnityToGymWrapper(unity_env, uint8_visual, flatten_branched, allow_multiple_obs) +``` + +- `unity_env` refers to the Unity environment to be wrapped. + +- `uint8_visual` refers to whether to output visual observations as `uint8` + values (0-255). Many common Gym environments (e.g. Atari) do this. By default + they will be floats (0.0-1.0). Defaults to `False`. + +- `flatten_branched` will flatten a branched discrete action space into a Gym + Discrete. Otherwise, it will be converted into a MultiDiscrete. Defaults to + `False`. + +- `allow_multiple_obs` will return a list of observations. The first elements + contain the visual observations and the last element contains the array of + vector observations. If False the environment returns a single array (containing + a single visual observations, if present, otherwise the vector observation). + Defaults to `False`. + +- `action_space_seed` is the optional seed for action sampling. If non-None, will + be used to set the random seed on created gym.Space instances. + +The returned environment `env` will function as a gym. + +## Limitations + +- It is only possible to use an environment with a **single** Agent. +- By default, the first visual observation is provided as the `observation`, if + present. Otherwise, vector observations are provided. You can receive all + visual and vector observations by using the `allow_multiple_obs=True` option in + the gym parameters. If set to `True`, you will receive a list of `observation` + instead of only one. +- The `TerminalSteps` or `DecisionSteps` output from the environment can still + be accessed from the `info` provided by `env.step(action)`. +- Stacked vector observations are not supported. +- Environment registration for use with `gym.make()` is currently not supported. +- Calling env.render() will not render a new frame of the environment. It will + return the latest visual observation if using visual observations. + +## Running OpenAI Baselines Algorithms + +OpenAI provides a set of open-source maintained and tested Reinforcement +Learning algorithms called the [Baselines](https://github.com/openai/baselines). + +Using the provided Gym wrapper, it is possible to train ML-Agents environments +using these algorithms. This requires the creation of custom training scripts to +launch each algorithm. In most cases these scripts can be created by making +slight modifications to the ones provided for Atari and Mujoco environments. + +These examples were tested with baselines version 0.1.6. + +### Example - DQN Baseline + +In order to train an agent to play the `GridWorld` environment using the +Baselines DQN algorithm, you first need to install the baselines package using +pip: + +``` +pip install git+git://github.com/openai/baselines +``` + +Next, create a file called `train_unity.py`. Then create an `/envs/` directory +and build the environment to that directory. For more information on +building Unity environments, see +[here](../docs/Learning-Environment-Executable.md). Note that because of +limitations of the DQN baseline, the environment must have a single visual +observation, a single discrete action and a single Agent in the scene. +Add the following code to the `train_unity.py` file: + +```python +import gym + +from baselines import deepq +from baselines import logger + +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.envs.unity_gym_env import UnityToGymWrapper + + +def main(): + unity_env = UnityEnvironment( < path - to - environment >) + env = UnityToGymWrapper(unity_env, uint8_visual=True) + logger.configure('./logs') # Change to log in a different directory + act = deepq.learn( + env, + "cnn", # For visual inputs + lr=2.5e-4, + total_timesteps=1000000, + buffer_size=50000, + exploration_fraction=0.05, + exploration_final_eps=0.1, + print_freq=20, + train_freq=5, + learning_starts=20000, + target_network_update_freq=50, + gamma=0.99, + prioritized_replay=False, + checkpoint_freq=1000, + checkpoint_path='./logs', # Change to save model in a different directory + dueling=True + ) + print("Saving model to unity_model.pkl") + act.save("unity_model.pkl") + + +if __name__ == '__main__': + main() +``` + +To start the training process, run the following from the directory containing +`train_unity.py`: + +```sh +python -m train_unity +``` + +### Other Algorithms + +Other algorithms in the Baselines repository can be run using scripts similar to +the examples from the baselines package. In most cases, the primary changes +needed to use a Unity environment are to import `UnityToGymWrapper`, and to +replace the environment creation code, typically `gym.make()`, with a call to +`UnityToGymWrapper(unity_environment)` passing the environment as input. + +A typical rule of thumb is that for vision-based environments, modification +should be done to Atari training scripts, and for vector observation +environments, modification should be done to Mujoco scripts. + +Some algorithms will make use of `make_env()` or `make_mujoco_env()` functions. +You can define a similar function for Unity environments. An example of such a +method using the PPO2 baseline: + +```python +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.envs import UnityToGymWrapper +from baselines.common.vec_env.subproc_vec_env import SubprocVecEnv +from baselines.common.vec_env.dummy_vec_env import DummyVecEnv +from baselines.bench import Monitor +from baselines import logger +import baselines.ppo2.ppo2 as ppo2 + +import os + +try: + from mpi4py import MPI +except ImportError: + MPI = None + + +def make_unity_env(env_directory, num_env, visual, start_index=0): + """ + Create a wrapped, monitored Unity environment. + """ + + def make_env(rank, use_visual=True): # pylint: disable=C0111 + def _thunk(): + unity_env = UnityEnvironment(env_directory, base_port=5000 + rank) + env = UnityToGymWrapper(unity_env, uint8_visual=True) + env = Monitor(env, logger.get_dir() and os.path.join(logger.get_dir(), str(rank))) + return env + + return _thunk + + if visual: + return SubprocVecEnv([make_env(i + start_index) for i in range(num_env)]) + else: + rank = MPI.COMM_WORLD.Get_rank() if MPI else 0 + return DummyVecEnv([make_env(rank, use_visual=False)]) + + +def main(): + env = make_unity_env( < path - to - environment >, 4, True) + ppo2.learn( + network="mlp", + env=env, + total_timesteps=100000, + lr=1e-3, + ) + + +if __name__ == '__main__': + main() +``` + +## Run Google Dopamine Algorithms + +Google provides a framework [Dopamine](https://github.com/google/dopamine), and +implementations of algorithms, e.g. DQN, Rainbow, and the C51 variant of +Rainbow. Using the Gym wrapper, we can run Unity environments using Dopamine. + +First, after installing the Gym wrapper, clone the Dopamine repository. + +``` +git clone https://github.com/google/dopamine +``` + +Then, follow the appropriate install instructions as specified on +[Dopamine's homepage](https://github.com/google/dopamine). Note that the +Dopamine guide specifies using a virtualenv. If you choose to do so, make sure +your unity_env package is also installed within the same virtualenv as Dopamine. + +### Adapting Dopamine's Scripts + +First, open `dopamine/atari/run_experiment.py`. Alternatively, copy the entire +`atari` folder, and name it something else (e.g. `unity`). If you choose the +copy approach, be sure to change the package names in the import statements in +`train.py` to your new directory. + +Within `run_experiment.py`, we will need to make changes to which environment is +instantiated, just as in the Baselines example. At the top of the file, insert + +```python +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.envs import UnityToGymWrapper +``` + +to import the Gym Wrapper. Navigate to the `create_atari_environment` method in +the same file, and switch to instantiating a Unity environment by replacing the +method with the following code. + +```python + game_version = 'v0' if sticky_actions else 'v4' + full_game_name = '{}NoFrameskip-{}'.format(game_name, game_version) + unity_env = UnityEnvironment() + env = UnityToGymWrapper(unity_env, uint8_visual=True) + return env +``` + +`` is the path to your built Unity executable. For more +information on building Unity environments, see +[here](../docs/Learning-Environment-Executable.md), and note the Limitations +section below. + +Note that we are not using the preprocessor from Dopamine, as it uses many +Atari-specific calls. Furthermore, frame-skipping can be done from within Unity, +rather than on the Python side. + +### Limitations + +Since Dopamine is designed around variants of DQN, it is only compatible with +discrete action spaces, and specifically the Discrete Gym space. For +environments that use branched discrete action spaces, you can enable the +`flatten_branched` parameter in `UnityToGymWrapper`, which treats each +combination of branched actions as separate actions. + +Furthermore, when building your environments, ensure that your Agent is using +visual observations with greyscale enabled, and that the dimensions of the +visual observations is 84 by 84 (matches the parameter found in `dqn_agent.py` +and `rainbow_agent.py`). Dopamine's agents currently do not automatically adapt +to the observation dimensions or number of channels. + +### Hyperparameters + +The hyperparameters provided by Dopamine are tailored to the Atari games, and +you will likely need to adjust them for ML-Agents environments. Here is a sample +`dopamine/agents/rainbow/configs/rainbow.gin` file that is known to work with +a simple GridWorld. + +```python +import dopamine.agents.rainbow.rainbow_agent +import dopamine.unity.run_experiment +import dopamine.replay_memory.prioritized_replay_buffer +import gin.tf.external_configurables + +RainbowAgent.num_atoms = 51 +RainbowAgent.stack_size = 1 +RainbowAgent.vmax = 10. +RainbowAgent.gamma = 0.99 +RainbowAgent.update_horizon = 3 +RainbowAgent.min_replay_history = 20000 # agent steps +RainbowAgent.update_period = 5 +RainbowAgent.target_update_period = 50 # agent steps +RainbowAgent.epsilon_train = 0.1 +RainbowAgent.epsilon_eval = 0.01 +RainbowAgent.epsilon_decay_period = 50000 # agent steps +RainbowAgent.replay_scheme = 'prioritized' +RainbowAgent.tf_device = '/cpu:0' # use '/cpu:*' for non-GPU version +RainbowAgent.optimizer = @tf.train.AdamOptimizer() + +tf.train.AdamOptimizer.learning_rate = 0.00025 +tf.train.AdamOptimizer.epsilon = 0.0003125 + +Runner.game_name = "Unity" # any name can be used here +Runner.sticky_actions = False +Runner.num_iterations = 200 +Runner.training_steps = 10000 # agent steps +Runner.evaluation_steps = 500 # agent steps +Runner.max_steps_per_episode = 27000 # agent steps + +WrappedPrioritizedReplayBuffer.replay_capacity = 1000000 +WrappedPrioritizedReplayBuffer.batch_size = 32 +``` + +This example assumed you copied `atari` to a separate folder named `unity`. +Replace `unity` in `import dopamine.unity.run_experiment` with the folder you +copied your `run_experiment.py` and `trainer.py` files to. If you directly +modified the existing files, then use `atari` here. + +### Starting a Run + +You can now run Dopamine as you would normally: + +``` +python -um dopamine.unity.train \ + --agent_name=rainbow \ + --base_dir=/tmp/dopamine \ + --gin_files='dopamine/agents/rainbow/configs/rainbow.gin' +``` + +Again, we assume that you've copied `atari` into a separate folder. Remember to +replace `unity` with the directory you copied your files into. If you edited the +Atari files directly, this should be `atari`. + +### Example: GridWorld + +As a baseline, here are rewards over time for the three algorithms provided with +Dopamine as run on the GridWorld example environment. All Dopamine (DQN, +Rainbow, C51) runs were done with the same epsilon, epsilon decay, replay +history, training steps, and buffer settings as specified above. Note that the +first 20000 steps are used to pre-fill the training buffer, and no learning +happens. + +We provide results from our PPO implementation and the DQN from Baselines as +reference. Note that all runs used the same greyscale GridWorld as Dopamine. For +PPO, `num_layers` was set to 2, and all other hyperparameters are the default +for GridWorld in `config/ppo/GridWorld.yaml`. For Baselines DQN, the provided +hyperparameters in the previous section are used. Note that Baselines implements +certain features (e.g. dueling-Q) that are not enabled in Dopamine DQN. + + +![Dopamine on GridWorld](images/dopamine_gridworld_plot.png) + diff --git a/docs/Python-LLAPI-Documentation.md b/docs/Python-LLAPI-Documentation.md new file mode 100644 index 0000000000000000000000000000000000000000..54012acaccd9c120946de7970e8587b40247b670 --- /dev/null +++ b/docs/Python-LLAPI-Documentation.md @@ -0,0 +1,1352 @@ +# Table of Contents + +* [mlagents\_envs.base\_env](#mlagents_envs.base_env) + * [DecisionStep](#mlagents_envs.base_env.DecisionStep) + * [DecisionSteps](#mlagents_envs.base_env.DecisionSteps) + * [agent\_id\_to\_index](#mlagents_envs.base_env.DecisionSteps.agent_id_to_index) + * [\_\_getitem\_\_](#mlagents_envs.base_env.DecisionSteps.__getitem__) + * [empty](#mlagents_envs.base_env.DecisionSteps.empty) + * [TerminalStep](#mlagents_envs.base_env.TerminalStep) + * [TerminalSteps](#mlagents_envs.base_env.TerminalSteps) + * [agent\_id\_to\_index](#mlagents_envs.base_env.TerminalSteps.agent_id_to_index) + * [\_\_getitem\_\_](#mlagents_envs.base_env.TerminalSteps.__getitem__) + * [empty](#mlagents_envs.base_env.TerminalSteps.empty) + * [ActionTuple](#mlagents_envs.base_env.ActionTuple) + * [discrete\_dtype](#mlagents_envs.base_env.ActionTuple.discrete_dtype) + * [ActionSpec](#mlagents_envs.base_env.ActionSpec) + * [is\_discrete](#mlagents_envs.base_env.ActionSpec.is_discrete) + * [is\_continuous](#mlagents_envs.base_env.ActionSpec.is_continuous) + * [discrete\_size](#mlagents_envs.base_env.ActionSpec.discrete_size) + * [empty\_action](#mlagents_envs.base_env.ActionSpec.empty_action) + * [random\_action](#mlagents_envs.base_env.ActionSpec.random_action) + * [create\_continuous](#mlagents_envs.base_env.ActionSpec.create_continuous) + * [create\_discrete](#mlagents_envs.base_env.ActionSpec.create_discrete) + * [DimensionProperty](#mlagents_envs.base_env.DimensionProperty) + * [UNSPECIFIED](#mlagents_envs.base_env.DimensionProperty.UNSPECIFIED) + * [NONE](#mlagents_envs.base_env.DimensionProperty.NONE) + * [TRANSLATIONAL\_EQUIVARIANCE](#mlagents_envs.base_env.DimensionProperty.TRANSLATIONAL_EQUIVARIANCE) + * [VARIABLE\_SIZE](#mlagents_envs.base_env.DimensionProperty.VARIABLE_SIZE) + * [ObservationType](#mlagents_envs.base_env.ObservationType) + * [DEFAULT](#mlagents_envs.base_env.ObservationType.DEFAULT) + * [GOAL\_SIGNAL](#mlagents_envs.base_env.ObservationType.GOAL_SIGNAL) + * [ObservationSpec](#mlagents_envs.base_env.ObservationSpec) + * [BehaviorSpec](#mlagents_envs.base_env.BehaviorSpec) + * [BaseEnv](#mlagents_envs.base_env.BaseEnv) + * [step](#mlagents_envs.base_env.BaseEnv.step) + * [reset](#mlagents_envs.base_env.BaseEnv.reset) + * [close](#mlagents_envs.base_env.BaseEnv.close) + * [behavior\_specs](#mlagents_envs.base_env.BaseEnv.behavior_specs) + * [set\_actions](#mlagents_envs.base_env.BaseEnv.set_actions) + * [set\_action\_for\_agent](#mlagents_envs.base_env.BaseEnv.set_action_for_agent) + * [get\_steps](#mlagents_envs.base_env.BaseEnv.get_steps) +* [mlagents\_envs.environment](#mlagents_envs.environment) + * [UnityEnvironment](#mlagents_envs.environment.UnityEnvironment) + * [\_\_init\_\_](#mlagents_envs.environment.UnityEnvironment.__init__) + * [close](#mlagents_envs.environment.UnityEnvironment.close) +* [mlagents\_envs.registry](#mlagents_envs.registry) +* [mlagents\_envs.registry.unity\_env\_registry](#mlagents_envs.registry.unity_env_registry) + * [UnityEnvRegistry](#mlagents_envs.registry.unity_env_registry.UnityEnvRegistry) + * [register](#mlagents_envs.registry.unity_env_registry.UnityEnvRegistry.register) + * [register\_from\_yaml](#mlagents_envs.registry.unity_env_registry.UnityEnvRegistry.register_from_yaml) + * [clear](#mlagents_envs.registry.unity_env_registry.UnityEnvRegistry.clear) + * [\_\_getitem\_\_](#mlagents_envs.registry.unity_env_registry.UnityEnvRegistry.__getitem__) +* [mlagents\_envs.side\_channel](#mlagents_envs.side_channel) +* [mlagents\_envs.side\_channel.raw\_bytes\_channel](#mlagents_envs.side_channel.raw_bytes_channel) + * [RawBytesChannel](#mlagents_envs.side_channel.raw_bytes_channel.RawBytesChannel) + * [on\_message\_received](#mlagents_envs.side_channel.raw_bytes_channel.RawBytesChannel.on_message_received) + * [get\_and\_clear\_received\_messages](#mlagents_envs.side_channel.raw_bytes_channel.RawBytesChannel.get_and_clear_received_messages) + * [send\_raw\_data](#mlagents_envs.side_channel.raw_bytes_channel.RawBytesChannel.send_raw_data) +* [mlagents\_envs.side\_channel.outgoing\_message](#mlagents_envs.side_channel.outgoing_message) + * [OutgoingMessage](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage) + * [\_\_init\_\_](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.__init__) + * [write\_bool](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.write_bool) + * [write\_int32](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.write_int32) + * [write\_float32](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.write_float32) + * [write\_float32\_list](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.write_float32_list) + * [write\_string](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.write_string) + * [set\_raw\_bytes](#mlagents_envs.side_channel.outgoing_message.OutgoingMessage.set_raw_bytes) +* [mlagents\_envs.side\_channel.engine\_configuration\_channel](#mlagents_envs.side_channel.engine_configuration_channel) + * [EngineConfigurationChannel](#mlagents_envs.side_channel.engine_configuration_channel.EngineConfigurationChannel) + * [on\_message\_received](#mlagents_envs.side_channel.engine_configuration_channel.EngineConfigurationChannel.on_message_received) + * [set\_configuration\_parameters](#mlagents_envs.side_channel.engine_configuration_channel.EngineConfigurationChannel.set_configuration_parameters) + * [set\_configuration](#mlagents_envs.side_channel.engine_configuration_channel.EngineConfigurationChannel.set_configuration) +* [mlagents\_envs.side\_channel.side\_channel\_manager](#mlagents_envs.side_channel.side_channel_manager) + * [SideChannelManager](#mlagents_envs.side_channel.side_channel_manager.SideChannelManager) + * [process\_side\_channel\_message](#mlagents_envs.side_channel.side_channel_manager.SideChannelManager.process_side_channel_message) + * [generate\_side\_channel\_messages](#mlagents_envs.side_channel.side_channel_manager.SideChannelManager.generate_side_channel_messages) +* [mlagents\_envs.side\_channel.stats\_side\_channel](#mlagents_envs.side_channel.stats_side_channel) + * [StatsSideChannel](#mlagents_envs.side_channel.stats_side_channel.StatsSideChannel) + * [on\_message\_received](#mlagents_envs.side_channel.stats_side_channel.StatsSideChannel.on_message_received) + * [get\_and\_reset\_stats](#mlagents_envs.side_channel.stats_side_channel.StatsSideChannel.get_and_reset_stats) +* [mlagents\_envs.side\_channel.incoming\_message](#mlagents_envs.side_channel.incoming_message) + * [IncomingMessage](#mlagents_envs.side_channel.incoming_message.IncomingMessage) + * [\_\_init\_\_](#mlagents_envs.side_channel.incoming_message.IncomingMessage.__init__) + * [read\_bool](#mlagents_envs.side_channel.incoming_message.IncomingMessage.read_bool) + * [read\_int32](#mlagents_envs.side_channel.incoming_message.IncomingMessage.read_int32) + * [read\_float32](#mlagents_envs.side_channel.incoming_message.IncomingMessage.read_float32) + * [read\_float32\_list](#mlagents_envs.side_channel.incoming_message.IncomingMessage.read_float32_list) + * [read\_string](#mlagents_envs.side_channel.incoming_message.IncomingMessage.read_string) + * [get\_raw\_bytes](#mlagents_envs.side_channel.incoming_message.IncomingMessage.get_raw_bytes) +* [mlagents\_envs.side\_channel.float\_properties\_channel](#mlagents_envs.side_channel.float_properties_channel) + * [FloatPropertiesChannel](#mlagents_envs.side_channel.float_properties_channel.FloatPropertiesChannel) + * [on\_message\_received](#mlagents_envs.side_channel.float_properties_channel.FloatPropertiesChannel.on_message_received) + * [set\_property](#mlagents_envs.side_channel.float_properties_channel.FloatPropertiesChannel.set_property) + * [get\_property](#mlagents_envs.side_channel.float_properties_channel.FloatPropertiesChannel.get_property) + * [list\_properties](#mlagents_envs.side_channel.float_properties_channel.FloatPropertiesChannel.list_properties) + * [get\_property\_dict\_copy](#mlagents_envs.side_channel.float_properties_channel.FloatPropertiesChannel.get_property_dict_copy) +* [mlagents\_envs.side\_channel.environment\_parameters\_channel](#mlagents_envs.side_channel.environment_parameters_channel) + * [EnvironmentParametersChannel](#mlagents_envs.side_channel.environment_parameters_channel.EnvironmentParametersChannel) + * [set\_float\_parameter](#mlagents_envs.side_channel.environment_parameters_channel.EnvironmentParametersChannel.set_float_parameter) + * [set\_uniform\_sampler\_parameters](#mlagents_envs.side_channel.environment_parameters_channel.EnvironmentParametersChannel.set_uniform_sampler_parameters) + * [set\_gaussian\_sampler\_parameters](#mlagents_envs.side_channel.environment_parameters_channel.EnvironmentParametersChannel.set_gaussian_sampler_parameters) + * [set\_multirangeuniform\_sampler\_parameters](#mlagents_envs.side_channel.environment_parameters_channel.EnvironmentParametersChannel.set_multirangeuniform_sampler_parameters) +* [mlagents\_envs.side\_channel.side\_channel](#mlagents_envs.side_channel.side_channel) + * [SideChannel](#mlagents_envs.side_channel.side_channel.SideChannel) + * [queue\_message\_to\_send](#mlagents_envs.side_channel.side_channel.SideChannel.queue_message_to_send) + * [on\_message\_received](#mlagents_envs.side_channel.side_channel.SideChannel.on_message_received) + * [channel\_id](#mlagents_envs.side_channel.side_channel.SideChannel.channel_id) + + +# mlagents\_envs.base\_env + +Python Environment API for the ML-Agents Toolkit +The aim of this API is to expose Agents evolving in a simulation +to perform reinforcement learning on. +This API supports multi-agent scenarios and groups similar Agents (same +observations, actions spaces and behavior) together. These groups of Agents are +identified by their BehaviorName. +For performance reasons, the data of each group of agents is processed in a +batched manner. Agents are identified by a unique AgentId identifier that +allows tracking of Agents across simulation steps. Note that there is no +guarantee that the number or order of the Agents in the state will be +consistent across simulation steps. +A simulation steps corresponds to moving the simulation forward until at least +one agent in the simulation sends its observations to Python again. Since +Agents can request decisions at different frequencies, a simulation step does +not necessarily correspond to a fixed simulation time increment. + + +## DecisionStep Objects + +```python +class DecisionStep(NamedTuple) +``` + +Contains the data a single Agent collected since the last +simulation step. + - obs is a list of numpy arrays observations collected by the agent. + - reward is a float. Corresponds to the rewards collected by the agent + since the last simulation step. + - agent_id is an int and an unique identifier for the corresponding Agent. + - action_mask is an optional list of one dimensional array of booleans. + Only available when using multi-discrete actions. + Each array corresponds to an action branch. Each array contains a mask + for each action of the branch. If true, the action is not available for + the agent during this simulation step. + + +## DecisionSteps Objects + +```python +class DecisionSteps(Mapping) +``` + +Contains the data a batch of similar Agents collected since the last +simulation step. Note that all Agents do not necessarily have new +information to send at each simulation step. Therefore, the ordering of +agents and the batch size of the DecisionSteps are not fixed across +simulation steps. + - obs is a list of numpy arrays observations collected by the batch of + agent. Each obs has one extra dimension compared to DecisionStep: the + first dimension of the array corresponds to the batch size of the batch. + - reward is a float vector of length batch size. Corresponds to the + rewards collected by each agent since the last simulation step. + - agent_id is an int vector of length batch size containing unique + identifier for the corresponding Agent. This is used to track Agents + across simulation steps. + - action_mask is an optional list of two dimensional array of booleans. + Only available when using multi-discrete actions. + Each array corresponds to an action branch. The first dimension of each + array is the batch size and the second contains a mask for each action of + the branch. If true, the action is not available for the agent during + this simulation step. + + +#### agent\_id\_to\_index + +```python + | @property + | agent_id_to_index() -> Dict[AgentId, int] +``` + +**Returns**: + +A Dict that maps agent_id to the index of those agents in +this DecisionSteps. + + +#### \_\_getitem\_\_ + +```python + | __getitem__(agent_id: AgentId) -> DecisionStep +``` + +returns the DecisionStep for a specific agent. + +**Arguments**: + +- `agent_id`: The id of the agent + +**Returns**: + +The DecisionStep + + +#### empty + +```python + | @staticmethod + | empty(spec: "BehaviorSpec") -> "DecisionSteps" +``` + +Returns an empty DecisionSteps. + +**Arguments**: + +- `spec`: The BehaviorSpec for the DecisionSteps + + +## TerminalStep Objects + +```python +class TerminalStep(NamedTuple) +``` + +Contains the data a single Agent collected when its episode ended. + - obs is a list of numpy arrays observations collected by the agent. + - reward is a float. Corresponds to the rewards collected by the agent + since the last simulation step. + - interrupted is a bool. Is true if the Agent was interrupted since the last + decision step. For example, if the Agent reached the maximum number of steps for + the episode. + - agent_id is an int and an unique identifier for the corresponding Agent. + + +## TerminalSteps Objects + +```python +class TerminalSteps(Mapping) +``` + +Contains the data a batch of Agents collected when their episode +terminated. All Agents present in the TerminalSteps have ended their +episode. + - obs is a list of numpy arrays observations collected by the batch of + agent. Each obs has one extra dimension compared to DecisionStep: the + first dimension of the array corresponds to the batch size of the batch. + - reward is a float vector of length batch size. Corresponds to the + rewards collected by each agent since the last simulation step. + - interrupted is an array of booleans of length batch size. Is true if the + associated Agent was interrupted since the last decision step. For example, if the + Agent reached the maximum number of steps for the episode. + - agent_id is an int vector of length batch size containing unique + identifier for the corresponding Agent. This is used to track Agents + across simulation steps. + + +#### agent\_id\_to\_index + +```python + | @property + | agent_id_to_index() -> Dict[AgentId, int] +``` + +**Returns**: + +A Dict that maps agent_id to the index of those agents in +this TerminalSteps. + + +#### \_\_getitem\_\_ + +```python + | __getitem__(agent_id: AgentId) -> TerminalStep +``` + +returns the TerminalStep for a specific agent. + +**Arguments**: + +- `agent_id`: The id of the agent + +**Returns**: + +obs, reward, done, agent_id and optional action mask for a +specific agent + + +#### empty + +```python + | @staticmethod + | empty(spec: "BehaviorSpec") -> "TerminalSteps" +``` + +Returns an empty TerminalSteps. + +**Arguments**: + +- `spec`: The BehaviorSpec for the TerminalSteps + + +## ActionTuple Objects + +```python +class ActionTuple(_ActionTupleBase) +``` + +An object whose fields correspond to actions of different types. +Continuous and discrete actions are numpy arrays of type float32 and +int32, respectively and are type checked on construction. +Dimensions are of (n_agents, continuous_size) and (n_agents, discrete_size), +respectively. Note, this also holds when continuous or discrete size is +zero. + + +#### discrete\_dtype + +```python + | @property + | discrete_dtype() -> np.dtype +``` + +The dtype of a discrete action. + + +## ActionSpec Objects + +```python +class ActionSpec(NamedTuple) +``` + +A NamedTuple containing utility functions and information about the action spaces +for a group of Agents under the same behavior. +- num_continuous_actions is an int corresponding to the number of floats which +constitute the action. +- discrete_branch_sizes is a Tuple of int where each int corresponds to +the number of discrete actions available to the agent on an independent action branch. + + +#### is\_discrete + +```python + | is_discrete() -> bool +``` + +Returns true if this Behavior uses discrete actions + + +#### is\_continuous + +```python + | is_continuous() -> bool +``` + +Returns true if this Behavior uses continuous actions + + +#### discrete\_size + +```python + | @property + | discrete_size() -> int +``` + +Returns a an int corresponding to the number of discrete branches. + + +#### empty\_action + +```python + | empty_action(n_agents: int) -> ActionTuple +``` + +Generates ActionTuple corresponding to an empty action (all zeros) +for a number of agents. + +**Arguments**: + +- `n_agents`: The number of agents that will have actions generated + + +#### random\_action + +```python + | random_action(n_agents: int) -> ActionTuple +``` + +Generates ActionTuple corresponding to a random action (either discrete +or continuous) for a number of agents. + +**Arguments**: + +- `n_agents`: The number of agents that will have actions generated + + +#### create\_continuous + +```python + | @staticmethod + | create_continuous(continuous_size: int) -> "ActionSpec" +``` + +Creates an ActionSpec that is homogenously continuous + + +#### create\_discrete + +```python + | @staticmethod + | create_discrete(discrete_branches: Tuple[int]) -> "ActionSpec" +``` + +Creates an ActionSpec that is homogenously discrete + + +## DimensionProperty Objects + +```python +class DimensionProperty(IntFlag) +``` + +The dimension property of a dimension of an observation. + + +#### UNSPECIFIED + +No properties specified. + + +#### NONE + +No Property of the observation in that dimension. Observation can be processed with +Fully connected networks. + + +#### TRANSLATIONAL\_EQUIVARIANCE + +Means it is suitable to do a convolution in this dimension. + + +#### VARIABLE\_SIZE + +Means that there can be a variable number of observations in this dimension. +The observations are unordered. + + +## ObservationType Objects + +```python +class ObservationType(Enum) +``` + +An Enum which defines the type of information carried in the observation +of the agent. + + +#### DEFAULT + +Observation information is generic. + + +#### GOAL\_SIGNAL + +Observation contains goal information for current task. + + +## ObservationSpec Objects + +```python +class ObservationSpec(NamedTuple) +``` + +A NamedTuple containing information about the observation of Agents. +- shape is a Tuple of int : It corresponds to the shape of +an observation's dimensions. +- dimension_property is a Tuple of DimensionProperties flag, one flag for each +dimension. +- observation_type is an enum of ObservationType. + + +## BehaviorSpec Objects + +```python +class BehaviorSpec(NamedTuple) +``` + +A NamedTuple containing information about the observation and action +spaces for a group of Agents under the same behavior. +- observation_specs is a List of ObservationSpec NamedTuple containing +information about the information of the Agent's observations such as their shapes. +The order of the ObservationSpec is the same as the order of the observations of an +agent. +- action_spec is an ActionSpec NamedTuple. + + +## BaseEnv Objects + +```python +class BaseEnv(ABC) +``` + + +#### step + +```python + | @abstractmethod + | step() -> None +``` + +Signals the environment that it must move the simulation forward +by one step. + + +#### reset + +```python + | @abstractmethod + | reset() -> None +``` + +Signals the environment that it must reset the simulation. + + +#### close + +```python + | @abstractmethod + | close() -> None +``` + +Signals the environment that it must close. + + +#### behavior\_specs + +```python + | @property + | @abstractmethod + | behavior_specs() -> MappingType[str, BehaviorSpec] +``` + +Returns a Mapping from behavior names to behavior specs. +Agents grouped under the same behavior name have the same action and +observation specs, and are expected to behave similarly in the +environment. +Note that new keys can be added to this mapping as new policies are instantiated. + + +#### set\_actions + +```python + | @abstractmethod + | set_actions(behavior_name: BehaviorName, action: ActionTuple) -> None +``` + +Sets the action for all of the agents in the simulation for the next +step. The Actions must be in the same order as the order received in +the DecisionSteps. + +**Arguments**: + +- `behavior_name`: The name of the behavior the agents are part of +- `action`: ActionTuple tuple of continuous and/or discrete action. +Actions are np.arrays with dimensions (n_agents, continuous_size) and +(n_agents, discrete_size), respectively. + + +#### set\_action\_for\_agent + +```python + | @abstractmethod + | set_action_for_agent(behavior_name: BehaviorName, agent_id: AgentId, action: ActionTuple) -> None +``` + +Sets the action for one of the agents in the simulation for the next +step. + +**Arguments**: + +- `behavior_name`: The name of the behavior the agent is part of +- `agent_id`: The id of the agent the action is set for +- `action`: ActionTuple tuple of continuous and/or discrete action +Actions are np.arrays with dimensions (1, continuous_size) and +(1, discrete_size), respectively. Note, this initial dimensions of 1 is because +this action is meant for a single agent. + + +#### get\_steps + +```python + | @abstractmethod + | get_steps(behavior_name: BehaviorName) -> Tuple[DecisionSteps, TerminalSteps] +``` + +Retrieves the steps of the agents that requested a step in the +simulation. + +**Arguments**: + +- `behavior_name`: The name of the behavior the agents are part of + +**Returns**: + +A tuple containing : +- A DecisionSteps NamedTuple containing the observations, +the rewards, the agent ids and the action masks for the Agents +of the specified behavior. These Agents need an action this step. +- A TerminalSteps NamedTuple containing the observations, +rewards, agent ids and interrupted flags of the agents that had their +episode terminated last step. + + +# mlagents\_envs.environment + + +## UnityEnvironment Objects + +```python +class UnityEnvironment(BaseEnv) +``` + + +#### \_\_init\_\_ + +```python + | __init__(file_name: Optional[str] = None, worker_id: int = 0, base_port: Optional[int] = None, seed: int = 0, no_graphics: bool = False, timeout_wait: int = 60, additional_args: Optional[List[str]] = None, side_channels: Optional[List[SideChannel]] = None, log_folder: Optional[str] = None, num_areas: int = 1) +``` + +Starts a new unity environment and establishes a connection with the environment. +Notice: Currently communication between Unity and Python takes place over an open socket without authentication. +Ensure that the network where training takes place is secure. + +:string file_name: Name of Unity environment binary. +:int base_port: Baseline port number to connect to Unity environment over. worker_id increments over this. +If no environment is specified (i.e. file_name is None), the DEFAULT_EDITOR_PORT will be used. +:int worker_id: Offset from base_port. Used for training multiple environments simultaneously. +:bool no_graphics: Whether to run the Unity simulator in no-graphics mode +:int timeout_wait: Time (in seconds) to wait for connection from environment. +:list args: Addition Unity command line arguments +:list side_channels: Additional side channel for no-rl communication with Unity +:str log_folder: Optional folder to write the Unity Player log file into. Requires absolute path. + + +#### close + +```python + | close() +``` + +Sends a shutdown signal to the unity environment, and closes the socket connection. + + +# mlagents\_envs.registry + + +# mlagents\_envs.registry.unity\_env\_registry + + +## UnityEnvRegistry Objects + +```python +class UnityEnvRegistry(Mapping) +``` + +### UnityEnvRegistry +Provides a library of Unity environments that can be launched without the need +of downloading the Unity Editor. +The UnityEnvRegistry implements a Map, to access an entry of the Registry, use: +```python +registry = UnityEnvRegistry() +entry = registry[] +``` +An entry has the following properties : + * `identifier` : Uniquely identifies this environment + * `expected_reward` : Corresponds to the reward an agent must obtained for the task + to be considered completed. + * `description` : A human readable description of the environment. + +To launch a Unity environment from a registry entry, use the `make` method: +```python +registry = UnityEnvRegistry() +env = registry[].make() +``` + + +#### register + +```python + | register(new_entry: BaseRegistryEntry) -> None +``` + +Registers a new BaseRegistryEntry to the registry. The +BaseRegistryEntry.identifier value will be used as indexing key. +If two are more environments are registered under the same key, the most +recentry added will replace the others. + + +#### register\_from\_yaml + +```python + | register_from_yaml(path_to_yaml: str) -> None +``` + +Registers the environments listed in a yaml file (either local or remote). Note +that the entries are registered lazily: the registration will only happen when +an environment is accessed. +The yaml file must have the following format : +```yaml +environments: +- : + expected_reward: + description: | + + linux_url: + darwin_url: + win_url: + +- : + expected_reward: + description: | + + linux_url: + darwin_url: + win_url: + +- ... +``` + +**Arguments**: + +- `path_to_yaml`: A local path or url to the yaml file + + +#### clear + +```python + | clear() -> None +``` + +Deletes all entries in the registry. + + +#### \_\_getitem\_\_ + +```python + | __getitem__(identifier: str) -> BaseRegistryEntry +``` + +Returns the BaseRegistryEntry with the provided identifier. BaseRegistryEntry +can then be used to make a Unity Environment. + +**Arguments**: + +- `identifier`: The identifier of the BaseRegistryEntry + +**Returns**: + +The associated BaseRegistryEntry + + +# mlagents\_envs.side\_channel + + +# mlagents\_envs.side\_channel.raw\_bytes\_channel + + +## RawBytesChannel Objects + +```python +class RawBytesChannel(SideChannel) +``` + +This is an example of what the SideChannel for raw bytes exchange would +look like. Is meant to be used for general research purpose. + + +#### on\_message\_received + +```python + | on_message_received(msg: IncomingMessage) -> None +``` + +Is called by the environment to the side channel. Can be called +multiple times per step if multiple messages are meant for that +SideChannel. + + +#### get\_and\_clear\_received\_messages + +```python + | get_and_clear_received_messages() -> List[bytes] +``` + +returns a list of bytearray received from the environment. + + +#### send\_raw\_data + +```python + | send_raw_data(data: bytearray) -> None +``` + +Queues a message to be sent by the environment at the next call to +step. + + +# mlagents\_envs.side\_channel.outgoing\_message + + +## OutgoingMessage Objects + +```python +class OutgoingMessage() +``` + +Utility class for forming the message that is written to a SideChannel. +All data is written in little-endian format using the struct module. + + +#### \_\_init\_\_ + +```python + | __init__() +``` + +Create an OutgoingMessage with an empty buffer. + + +#### write\_bool + +```python + | write_bool(b: bool) -> None +``` + +Append a boolean value. + + +#### write\_int32 + +```python + | write_int32(i: int) -> None +``` + +Append an integer value. + + +#### write\_float32 + +```python + | write_float32(f: float) -> None +``` + +Append a float value. It will be truncated to 32-bit precision. + + +#### write\_float32\_list + +```python + | write_float32_list(float_list: List[float]) -> None +``` + +Append a list of float values. They will be truncated to 32-bit precision. + + +#### write\_string + +```python + | write_string(s: str) -> None +``` + +Append a string value. Internally, it will be encoded to ascii, and the +encoded length will also be written to the message. + + +#### set\_raw\_bytes + +```python + | set_raw_bytes(buffer: bytearray) -> None +``` + +Set the internal buffer to a new bytearray. This will overwrite any existing data. + +**Arguments**: + +- `buffer`: + +**Returns**: + + + + +# mlagents\_envs.side\_channel.engine\_configuration\_channel + + +## EngineConfigurationChannel Objects + +```python +class EngineConfigurationChannel(SideChannel) +``` + +This is the SideChannel for engine configuration exchange. The data in the +engine configuration is as follows : + - int width; + - int height; + - int qualityLevel; + - float timeScale; + - int targetFrameRate; + - int captureFrameRate; + + +#### on\_message\_received + +```python + | on_message_received(msg: IncomingMessage) -> None +``` + +Is called by the environment to the side channel. Can be called +multiple times per step if multiple messages are meant for that +SideChannel. +Note that Python should never receive an engine configuration from +Unity + + +#### set\_configuration\_parameters + +```python + | set_configuration_parameters(width: Optional[int] = None, height: Optional[int] = None, quality_level: Optional[int] = None, time_scale: Optional[float] = None, target_frame_rate: Optional[int] = None, capture_frame_rate: Optional[int] = None) -> None +``` + +Sets the engine configuration. Takes as input the configurations of the +engine. + +**Arguments**: + +- `width`: Defines the width of the display. (Must be set alongside height) +- `height`: Defines the height of the display. (Must be set alongside width) +- `quality_level`: Defines the quality level of the simulation. +- `time_scale`: Defines the multiplier for the deltatime in the +simulation. If set to a higher value, time will pass faster in the +simulation but the physics might break. +- `target_frame_rate`: Instructs simulation to try to render at a +specified frame rate. +- `capture_frame_rate`: Instructs the simulation to consider time between +updates to always be constant, regardless of the actual frame rate. + + +#### set\_configuration + +```python + | set_configuration(config: EngineConfig) -> None +``` + +Sets the engine configuration. Takes as input an EngineConfig. + + +# mlagents\_envs.side\_channel.side\_channel\_manager + + +## SideChannelManager Objects + +```python +class SideChannelManager() +``` + + +#### process\_side\_channel\_message + +```python + | process_side_channel_message(data: bytes) -> None +``` + +Separates the data received from Python into individual messages for each +registered side channel and calls on_message_received on them. + +**Arguments**: + +- `data`: The packed message sent by Unity + + +#### generate\_side\_channel\_messages + +```python + | generate_side_channel_messages() -> bytearray +``` + +Gathers the messages that the registered side channels will send to Unity +and combines them into a single message ready to be sent. + + +# mlagents\_envs.side\_channel.stats\_side\_channel + + +## StatsSideChannel Objects + +```python +class StatsSideChannel(SideChannel) +``` + +Side channel that receives (string, float) pairs from the environment, so that they can eventually +be passed to a StatsReporter. + + +#### on\_message\_received + +```python + | on_message_received(msg: IncomingMessage) -> None +``` + +Receive the message from the environment, and save it for later retrieval. + +**Arguments**: + +- `msg`: + +**Returns**: + + + + +#### get\_and\_reset\_stats + +```python + | get_and_reset_stats() -> EnvironmentStats +``` + +Returns the current stats, and resets the internal storage of the stats. + +**Returns**: + + + + +# mlagents\_envs.side\_channel.incoming\_message + + +## IncomingMessage Objects + +```python +class IncomingMessage() +``` + +Utility class for reading the message written to a SideChannel. +Values must be read in the order they were written. + + +#### \_\_init\_\_ + +```python + | __init__(buffer: bytes, offset: int = 0) +``` + +Create a new IncomingMessage from the bytes. + + +#### read\_bool + +```python + | read_bool(default_value: bool = False) -> bool +``` + +Read a boolean value from the message buffer. + +**Arguments**: + +- `default_value`: Default value to use if the end of the message is reached. + +**Returns**: + +The value read from the message, or the default value if the end was reached. + + +#### read\_int32 + +```python + | read_int32(default_value: int = 0) -> int +``` + +Read an integer value from the message buffer. + +**Arguments**: + +- `default_value`: Default value to use if the end of the message is reached. + +**Returns**: + +The value read from the message, or the default value if the end was reached. + + +#### read\_float32 + +```python + | read_float32(default_value: float = 0.0) -> float +``` + +Read a float value from the message buffer. + +**Arguments**: + +- `default_value`: Default value to use if the end of the message is reached. + +**Returns**: + +The value read from the message, or the default value if the end was reached. + + +#### read\_float32\_list + +```python + | read_float32_list(default_value: List[float] = None) -> List[float] +``` + +Read a list of float values from the message buffer. + +**Arguments**: + +- `default_value`: Default value to use if the end of the message is reached. + +**Returns**: + +The value read from the message, or the default value if the end was reached. + + +#### read\_string + +```python + | read_string(default_value: str = "") -> str +``` + +Read a string value from the message buffer. + +**Arguments**: + +- `default_value`: Default value to use if the end of the message is reached. + +**Returns**: + +The value read from the message, or the default value if the end was reached. + + +#### get\_raw\_bytes + +```python + | get_raw_bytes() -> bytes +``` + +Get a copy of the internal bytes used by the message. + + +# mlagents\_envs.side\_channel.float\_properties\_channel + + +## FloatPropertiesChannel Objects + +```python +class FloatPropertiesChannel(SideChannel) +``` + +This is the SideChannel for float properties shared with Unity. +You can modify the float properties of an environment with the commands +set_property, get_property and list_properties. + + +#### on\_message\_received + +```python + | on_message_received(msg: IncomingMessage) -> None +``` + +Is called by the environment to the side channel. Can be called +multiple times per step if multiple messages are meant for that +SideChannel. + + +#### set\_property + +```python + | set_property(key: str, value: float) -> None +``` + +Sets a property in the Unity Environment. + +**Arguments**: + +- `key`: The string identifier of the property. +- `value`: The float value of the property. + + +#### get\_property + +```python + | get_property(key: str) -> Optional[float] +``` + +Gets a property in the Unity Environment. If the property was not +found, will return None. + +**Arguments**: + +- `key`: The string identifier of the property. + +**Returns**: + +The float value of the property or None. + + +#### list\_properties + +```python + | list_properties() -> List[str] +``` + +Returns a list of all the string identifiers of the properties +currently present in the Unity Environment. + + +#### get\_property\_dict\_copy + +```python + | get_property_dict_copy() -> Dict[str, float] +``` + +Returns a copy of the float properties. + +**Returns**: + + + + +# mlagents\_envs.side\_channel.environment\_parameters\_channel + + +## EnvironmentParametersChannel Objects + +```python +class EnvironmentParametersChannel(SideChannel) +``` + +This is the SideChannel for sending environment parameters to Unity. +You can send parameters to an environment with the command +set_float_parameter. + + +#### set\_float\_parameter + +```python + | set_float_parameter(key: str, value: float) -> None +``` + +Sets a float environment parameter in the Unity Environment. + +**Arguments**: + +- `key`: The string identifier of the parameter. +- `value`: The float value of the parameter. + + +#### set\_uniform\_sampler\_parameters + +```python + | set_uniform_sampler_parameters(key: str, min_value: float, max_value: float, seed: int) -> None +``` + +Sets a uniform environment parameter sampler. + +**Arguments**: + +- `key`: The string identifier of the parameter. +- `min_value`: The minimum of the sampling distribution. +- `max_value`: The maximum of the sampling distribution. +- `seed`: The random seed to initialize the sampler. + + +#### set\_gaussian\_sampler\_parameters + +```python + | set_gaussian_sampler_parameters(key: str, mean: float, st_dev: float, seed: int) -> None +``` + +Sets a gaussian environment parameter sampler. + +**Arguments**: + +- `key`: The string identifier of the parameter. +- `mean`: The mean of the sampling distribution. +- `st_dev`: The standard deviation of the sampling distribution. +- `seed`: The random seed to initialize the sampler. + + +#### set\_multirangeuniform\_sampler\_parameters + +```python + | set_multirangeuniform_sampler_parameters(key: str, intervals: List[Tuple[float, float]], seed: int) -> None +``` + +Sets a multirangeuniform environment parameter sampler. + +**Arguments**: + +- `key`: The string identifier of the parameter. +- `intervals`: The lists of min and max that define each uniform distribution. +- `seed`: The random seed to initialize the sampler. + + +# mlagents\_envs.side\_channel.side\_channel + + +## SideChannel Objects + +```python +class SideChannel(ABC) +``` + +The side channel just get access to a bytes buffer that will be shared +between C# and Python. For example, We will create a specific side channel +for properties that will be a list of string (fixed size) to float number, +that can be modified by both C# and Python. All side channels are passed +to the Env object at construction. + + +#### queue\_message\_to\_send + +```python + | queue_message_to_send(msg: OutgoingMessage) -> None +``` + +Queues a message to be sent by the environment at the next call to +step. + + +#### on\_message\_received + +```python + | @abstractmethod + | on_message_received(msg: IncomingMessage) -> None +``` + +Is called by the environment to the side channel. Can be called +multiple times per step if multiple messages are meant for that +SideChannel. + + +#### channel\_id + +```python + | @property + | channel_id() -> uuid.UUID +``` + +**Returns**: + +The type of side channel used. Will influence how the data is +processed in the environment. diff --git a/docs/Python-LLAPI.md b/docs/Python-LLAPI.md new file mode 100644 index 0000000000000000000000000000000000000000..ace4a9a15d005a0c578f9e08c623c1575a759bee --- /dev/null +++ b/docs/Python-LLAPI.md @@ -0,0 +1,354 @@ +# Unity ML-Agents Python Low Level API + +The `mlagents` Python package contains two components: a low level API which +allows you to interact directly with a Unity Environment (`mlagents_envs`) and +an entry point to train (`mlagents-learn`) which allows you to train agents in +Unity Environments using our implementations of reinforcement learning or +imitation learning. This document describes how to use the `mlagents_envs` API. +For information on using `mlagents-learn`, see [here](Training-ML-Agents.md). +For Python Low Level API documentation, see [here](Python-LLAPI-Documentation.md). + +The Python Low Level API can be used to interact directly with your Unity +learning environment. As such, it can serve as the basis for developing and +evaluating new learning algorithms. + +## mlagents_envs + +The ML-Agents Toolkit Low Level API is a Python API for controlling the +simulation loop of an environment or game built with Unity. This API is used by +the training algorithms inside the ML-Agent Toolkit, but you can also write your +own Python programs using this API. + +The key objects in the Python API include: + +- **UnityEnvironment** — the main interface between the Unity application and + your code. Use UnityEnvironment to start and control a simulation or training + session. +- **BehaviorName** - is a string that identifies a behavior in the simulation. +- **AgentId** - is an `int` that serves as unique identifier for Agents in the + simulation. +- **DecisionSteps** — contains the data from Agents belonging to the same + "Behavior" in the simulation, such as observations and rewards. Only Agents + that requested a decision since the last call to `env.step()` are in the + DecisionSteps object. +- **TerminalSteps** — contains the data from Agents belonging to the same + "Behavior" in the simulation, such as observations and rewards. Only Agents + whose episode ended since the last call to `env.step()` are in the + TerminalSteps object. +- **BehaviorSpec** — describes the shape of the observation data inside + DecisionSteps and TerminalSteps as well as the expected action shapes. + +These classes are all defined in the +[base_env](../ml-agents-envs/mlagents_envs/base_env.py) script. + +An Agent "Behavior" is a group of Agents identified by a `BehaviorName` that +share the same observations and action types (described in their +`BehaviorSpec`). You can think about Agent Behavior as a group of agents that +will share the same policy. All Agents with the same behavior have the same goal +and reward signals. + +To communicate with an Agent in a Unity environment from a Python program, the +Agent in the simulation must have `Behavior Parameters` set to communicate. You +must set the `Behavior Type` to `Default` and give it a `Behavior Name`. + +_Notice: Currently communication between Unity and Python takes place over an +open socket without authentication. As such, please make sure that the network +where training takes place is secure. This will be addressed in a future +release._ + +## Loading a Unity Environment + +Python-side communication happens through `UnityEnvironment` which is located in +[`environment.py`](../ml-agents-envs/mlagents_envs/environment.py). To load a +Unity environment from a built binary file, put the file in the same directory +as `envs`. For example, if the filename of your Unity environment is `3DBall`, +in python, run: + +```python +from mlagents_envs.environment import UnityEnvironment +# This is a non-blocking call that only loads the environment. +env = UnityEnvironment(file_name="3DBall", seed=1, side_channels=[]) +# Start interacting with the environment. +env.reset() +behavior_names = env.behavior_specs.keys() +... +``` +**NOTE:** Please read [Interacting with a Unity Environment](#interacting-with-a-unity-environment) +to read more about how you can interact with the Unity environment from Python. + +- `file_name` is the name of the environment binary (located in the root + directory of the python project). +- `worker_id` indicates which port to use for communication with the + environment. For use in parallel training regimes such as A3C. +- `seed` indicates the seed to use when generating random numbers during the + training process. In environments which are stochastic, setting the seed + enables reproducible experimentation by ensuring that the environment and + trainers utilize the same random seed. +- `side_channels` provides a way to exchange data with the Unity simulation that + is not related to the reinforcement learning loop. For example: configurations + or properties. More on them in the [Side Channels](Custom-SideChannels.md) doc. + +If you want to directly interact with the Editor, you need to use +`file_name=None`, then press the **Play** button in the Editor when the message +_"Start training by pressing the Play button in the Unity Editor"_ is displayed +on the screen + +### Interacting with a Unity Environment + +#### The BaseEnv interface + +A `BaseEnv` has the following methods: + +- **Reset : `env.reset()`** Sends a signal to reset the environment. Returns + None. +- **Step : `env.step()`** Sends a signal to step the environment. Returns None. + Note that a "step" for Python does not correspond to either Unity `Update` nor + `FixedUpdate`. When `step()` or `reset()` is called, the Unity simulation will + move forward until an Agent in the simulation needs a input from Python to + act. +- **Close : `env.close()`** Sends a shutdown signal to the environment and + terminates the communication. +- **Behavior Specs : `env.behavior_specs`** Returns a Mapping of + `BehaviorName` to `BehaviorSpec` objects (read only). + A `BehaviorSpec` contains the observation shapes and the + `ActionSpec` (which defines the action shape). Note that + the `BehaviorSpec` for a specific group is fixed throughout the simulation. + The number of entries in the Mapping can change over time in the simulation + if new Agent behaviors are created in the simulation. +- **Get Steps : `env.get_steps(behavior_name: str)`** Returns a tuple + `DecisionSteps, TerminalSteps` corresponding to the behavior_name given as + input. The `DecisionSteps` contains information about the state of the agents + **that need an action this step** and have the behavior behavior_name. The + `TerminalSteps` contains information about the state of the agents **whose + episode ended** and have the behavior behavior_name. Both `DecisionSteps` and + `TerminalSteps` contain information such as the observations, the rewards and + the agent identifiers. `DecisionSteps` also contains action masks for the next + action while `TerminalSteps` contains the reason for termination (did the + Agent reach its maximum step and was interrupted). The data is in `np.array` + of which the first dimension is always the number of agents note that the + number of agents is not guaranteed to remain constant during the simulation + and it is not unusual to have either `DecisionSteps` or `TerminalSteps` + contain no Agents at all. +- **Set Actions :`env.set_actions(behavior_name: str, action: ActionTuple)`** Sets + the actions for a whole agent group. `action` is an `ActionTuple`, which + is made up of a 2D `np.array` of `dtype=np.int32` for discrete actions, and + `dtype=np.float32` for continuous actions. The first dimension of `np.array` + in the tuple is the number of agents that requested a decision since the + last call to `env.step()`. The second dimension is the number of discrete or + continuous actions for the corresponding array. +- **Set Action for Agent : + `env.set_action_for_agent(agent_group: str, agent_id: int, action: ActionTuple)`** + Sets the action for a specific Agent in an agent group. `agent_group` is the + name of the group the Agent belongs to and `agent_id` is the integer + identifier of the Agent. `action` is an `ActionTuple` as described above. +**Note:** If no action is provided for an agent group between two calls to +`env.step()` then the default action will be all zeros. + +#### DecisionSteps and DecisionStep + +`DecisionSteps` (with `s`) contains information about a whole batch of Agents +while `DecisionStep` (no `s`) only contains information about a single Agent. + +A `DecisionSteps` has the following fields : + +- `obs` is a list of numpy arrays observations collected by the group of agent. + The first dimension of the array corresponds to the batch size of the group + (number of agents requesting a decision since the last call to `env.step()`). +- `reward` is a float vector of length batch size. Corresponds to the rewards + collected by each agent since the last simulation step. +- `agent_id` is an int vector of length batch size containing unique identifier + for the corresponding Agent. This is used to track Agents across simulation + steps. +- `action_mask` is an optional list of two dimensional arrays of booleans which is only + available when using multi-discrete actions. Each array corresponds to an + action branch. The first dimension of each array is the batch size and the + second contains a mask for each action of the branch. If true, the action is + not available for the agent during this simulation step. + +It also has the two following methods: + +- `len(DecisionSteps)` Returns the number of agents requesting a decision since + the last call to `env.step()`. +- `DecisionSteps[agent_id]` Returns a `DecisionStep` for the Agent with the + `agent_id` unique identifier. + +A `DecisionStep` has the following fields: + +- `obs` is a list of numpy arrays observations collected by the agent. (Each + array has one less dimension than the arrays in `DecisionSteps`) +- `reward` is a float. Corresponds to the rewards collected by the agent since + the last simulation step. +- `agent_id` is an int and an unique identifier for the corresponding Agent. +- `action_mask` is an optional list of one dimensional arrays of booleans which is only + available when using multi-discrete actions. Each array corresponds to an + action branch. Each array contains a mask for each action of the branch. If + true, the action is not available for the agent during this simulation step. + +#### TerminalSteps and TerminalStep + +Similarly to `DecisionSteps` and `DecisionStep`, `TerminalSteps` (with `s`) +contains information about a whole batch of Agents while `TerminalStep` (no `s`) +only contains information about a single Agent. + +A `TerminalSteps` has the following fields : + +- `obs` is a list of numpy arrays observations collected by the group of agent. + The first dimension of the array corresponds to the batch size of the group + (number of agents requesting a decision since the last call to `env.step()`). +- `reward` is a float vector of length batch size. Corresponds to the rewards + collected by each agent since the last simulation step. +- `agent_id` is an int vector of length batch size containing unique identifier + for the corresponding Agent. This is used to track Agents across simulation + steps. + - `interrupted` is an array of booleans of length batch size. Is true if the + associated Agent was interrupted since the last decision step. For example, + if the Agent reached the maximum number of steps for the episode. + +It also has the two following methods: + +- `len(TerminalSteps)` Returns the number of agents requesting a decision since + the last call to `env.step()`. +- `TerminalSteps[agent_id]` Returns a `TerminalStep` for the Agent with the + `agent_id` unique identifier. + +A `TerminalStep` has the following fields: + +- `obs` is a list of numpy arrays observations collected by the agent. (Each + array has one less dimension than the arrays in `TerminalSteps`) +- `reward` is a float. Corresponds to the rewards collected by the agent since + the last simulation step. +- `agent_id` is an int and an unique identifier for the corresponding Agent. + - `interrupted` is a bool. Is true if the Agent was interrupted since the last + decision step. For example, if the Agent reached the maximum number of steps for + the episode. + +#### BehaviorSpec + +A `BehaviorSpec` has the following fields : + +- `observation_specs` is a List of `ObservationSpec` objects : Each `ObservationSpec` + corresponds to an observation's properties: `shape` is a tuple of ints that + corresponds to the shape of the observation (without the number of agents dimension). + `dimension_property` is a tuple of flags containing extra information about how the + data should be processed in the corresponding dimension. `observation_type` is an enum + corresponding to what type of observation is generating the data (i.e., default, goal, + etc). Note that the `ObservationSpec` have the same ordering as the ordering of observations + in the DecisionSteps, DecisionStep, TerminalSteps and TerminalStep. +- `action_spec` is an `ActionSpec` namedtuple that defines the number and types + of actions for the Agent. + +An `ActionSpec` has the following fields and properties: +- `continuous_size` is the number of floats that constitute the continuous actions. +- `discrete_size` is the number of branches (the number of independent actions) that + constitute the multi-discrete actions. +- `discrete_branches` is a Tuple of ints. Each int corresponds to the number of + different options for each branch of the action. For example: + In a game direction input (no movement, left, right) and + jump input (no jump, jump) there will be two branches (direction and jump), + the first one with 3 options and the second with 2 options. (`discrete_size = 2` + and `discrete_action_branches = (3,2,)`) + + +### Communicating additional information with the Environment + +In addition to the means of communicating between Unity and python described +above, we also provide methods for sharing agent-agnostic information. These +additional methods are referred to as side channels. ML-Agents includes two +ready-made side channels, described below. It is also possible to create custom +side channels to communicate any additional data between a Unity environment and +Python. Instructions for creating custom side channels can be found +[here](Custom-SideChannels.md). + +Side channels exist as separate classes which are instantiated, and then passed +as list to the `side_channels` argument of the constructor of the +`UnityEnvironment` class. + +```python +channel = MyChannel() + +env = UnityEnvironment(side_channels = [channel]) +``` + +**Note** : A side channel will only send/receive messages when `env.step` or +`env.reset()` is called. + +#### EngineConfigurationChannel + +The `EngineConfiguration` side channel allows you to modify the time-scale, +resolution, and graphics quality of the environment. This can be useful for +adjusting the environment to perform better during training, or be more +interpretable during inference. + +`EngineConfigurationChannel` has two methods : + +- `set_configuration_parameters` which takes the following arguments: + - `width`: Defines the width of the display. (Must be set alongside height) + - `height`: Defines the height of the display. (Must be set alongside width) + - `quality_level`: Defines the quality level of the simulation. + - `time_scale`: Defines the multiplier for the deltatime in the simulation. If + set to a higher value, time will pass faster in the simulation but the + physics may perform unpredictably. + - `target_frame_rate`: Instructs simulation to try to render at a specified + frame rate. + - `capture_frame_rate` Instructs the simulation to consider time between + updates to always be constant, regardless of the actual frame rate. +- `set_configuration` with argument config which is an `EngineConfig` NamedTuple + object. + +For example, the following code would adjust the time-scale of the simulation to +be 2x realtime. + +```python +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.side_channel.engine_configuration_channel import EngineConfigurationChannel + +channel = EngineConfigurationChannel() + +env = UnityEnvironment(side_channels=[channel]) + +channel.set_configuration_parameters(time_scale = 2.0) + +i = env.reset() +... +``` + +#### EnvironmentParameters + +The `EnvironmentParameters` will allow you to get and set pre-defined numerical +values in the environment. This can be useful for adjusting environment-specific +settings, or for reading non-agent related information from the environment. You +can call `get_property` and `set_property` on the side channel to read and write +properties. + +`EnvironmentParametersChannel` has one methods: + +- `set_float_parameter` Sets a float parameter in the Unity Environment. + - key: The string identifier of the property. + - value: The float value of the property. + +```python +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.side_channel.environment_parameters_channel import EnvironmentParametersChannel + +channel = EnvironmentParametersChannel() + +env = UnityEnvironment(side_channels=[channel]) + +channel.set_float_parameter("parameter_1", 2.0) + +i = env.reset() +... +``` + +Once a property has been modified in Python, you can access it in C# after the +next call to `step` as follows: + +```csharp +var envParameters = Academy.Instance.EnvironmentParameters; +float property1 = envParameters.GetWithDefault("parameter_1", 0.0f); +``` + +#### Custom side channels + +For information on how to make custom side channels for sending additional data +types, see the documentation [here](Custom-SideChannels.md). diff --git a/docs/Python-On-Off-Policy-Trainer-Documentation.md b/docs/Python-On-Off-Policy-Trainer-Documentation.md new file mode 100644 index 0000000000000000000000000000000000000000..4f13bdf72ebc14dd92707b843875006f0183dfec --- /dev/null +++ b/docs/Python-On-Off-Policy-Trainer-Documentation.md @@ -0,0 +1,787 @@ +# Table of Contents + +* [mlagents.trainers.trainer.on\_policy\_trainer](#mlagents.trainers.trainer.on_policy_trainer) + * [OnPolicyTrainer](#mlagents.trainers.trainer.on_policy_trainer.OnPolicyTrainer) + * [\_\_init\_\_](#mlagents.trainers.trainer.on_policy_trainer.OnPolicyTrainer.__init__) + * [add\_policy](#mlagents.trainers.trainer.on_policy_trainer.OnPolicyTrainer.add_policy) +* [mlagents.trainers.trainer.off\_policy\_trainer](#mlagents.trainers.trainer.off_policy_trainer) + * [OffPolicyTrainer](#mlagents.trainers.trainer.off_policy_trainer.OffPolicyTrainer) + * [\_\_init\_\_](#mlagents.trainers.trainer.off_policy_trainer.OffPolicyTrainer.__init__) + * [save\_model](#mlagents.trainers.trainer.off_policy_trainer.OffPolicyTrainer.save_model) + * [save\_replay\_buffer](#mlagents.trainers.trainer.off_policy_trainer.OffPolicyTrainer.save_replay_buffer) + * [load\_replay\_buffer](#mlagents.trainers.trainer.off_policy_trainer.OffPolicyTrainer.load_replay_buffer) + * [add\_policy](#mlagents.trainers.trainer.off_policy_trainer.OffPolicyTrainer.add_policy) +* [mlagents.trainers.trainer.rl\_trainer](#mlagents.trainers.trainer.rl_trainer) + * [RLTrainer](#mlagents.trainers.trainer.rl_trainer.RLTrainer) + * [end\_episode](#mlagents.trainers.trainer.rl_trainer.RLTrainer.end_episode) + * [create\_optimizer](#mlagents.trainers.trainer.rl_trainer.RLTrainer.create_optimizer) + * [save\_model](#mlagents.trainers.trainer.rl_trainer.RLTrainer.save_model) + * [advance](#mlagents.trainers.trainer.rl_trainer.RLTrainer.advance) +* [mlagents.trainers.trainer.trainer](#mlagents.trainers.trainer.trainer) + * [Trainer](#mlagents.trainers.trainer.trainer.Trainer) + * [\_\_init\_\_](#mlagents.trainers.trainer.trainer.Trainer.__init__) + * [stats\_reporter](#mlagents.trainers.trainer.trainer.Trainer.stats_reporter) + * [parameters](#mlagents.trainers.trainer.trainer.Trainer.parameters) + * [get\_max\_steps](#mlagents.trainers.trainer.trainer.Trainer.get_max_steps) + * [get\_step](#mlagents.trainers.trainer.trainer.Trainer.get_step) + * [threaded](#mlagents.trainers.trainer.trainer.Trainer.threaded) + * [should\_still\_train](#mlagents.trainers.trainer.trainer.Trainer.should_still_train) + * [reward\_buffer](#mlagents.trainers.trainer.trainer.Trainer.reward_buffer) + * [save\_model](#mlagents.trainers.trainer.trainer.Trainer.save_model) + * [end\_episode](#mlagents.trainers.trainer.trainer.Trainer.end_episode) + * [create\_policy](#mlagents.trainers.trainer.trainer.Trainer.create_policy) + * [add\_policy](#mlagents.trainers.trainer.trainer.Trainer.add_policy) + * [get\_policy](#mlagents.trainers.trainer.trainer.Trainer.get_policy) + * [advance](#mlagents.trainers.trainer.trainer.Trainer.advance) + * [publish\_policy\_queue](#mlagents.trainers.trainer.trainer.Trainer.publish_policy_queue) + * [subscribe\_trajectory\_queue](#mlagents.trainers.trainer.trainer.Trainer.subscribe_trajectory_queue) +* [mlagents.trainers.settings](#mlagents.trainers.settings) + * [deep\_update\_dict](#mlagents.trainers.settings.deep_update_dict) + * [RewardSignalSettings](#mlagents.trainers.settings.RewardSignalSettings) + * [structure](#mlagents.trainers.settings.RewardSignalSettings.structure) + * [ParameterRandomizationSettings](#mlagents.trainers.settings.ParameterRandomizationSettings) + * [\_\_str\_\_](#mlagents.trainers.settings.ParameterRandomizationSettings.__str__) + * [structure](#mlagents.trainers.settings.ParameterRandomizationSettings.structure) + * [unstructure](#mlagents.trainers.settings.ParameterRandomizationSettings.unstructure) + * [apply](#mlagents.trainers.settings.ParameterRandomizationSettings.apply) + * [ConstantSettings](#mlagents.trainers.settings.ConstantSettings) + * [\_\_str\_\_](#mlagents.trainers.settings.ConstantSettings.__str__) + * [apply](#mlagents.trainers.settings.ConstantSettings.apply) + * [UniformSettings](#mlagents.trainers.settings.UniformSettings) + * [\_\_str\_\_](#mlagents.trainers.settings.UniformSettings.__str__) + * [apply](#mlagents.trainers.settings.UniformSettings.apply) + * [GaussianSettings](#mlagents.trainers.settings.GaussianSettings) + * [\_\_str\_\_](#mlagents.trainers.settings.GaussianSettings.__str__) + * [apply](#mlagents.trainers.settings.GaussianSettings.apply) + * [MultiRangeUniformSettings](#mlagents.trainers.settings.MultiRangeUniformSettings) + * [\_\_str\_\_](#mlagents.trainers.settings.MultiRangeUniformSettings.__str__) + * [apply](#mlagents.trainers.settings.MultiRangeUniformSettings.apply) + * [CompletionCriteriaSettings](#mlagents.trainers.settings.CompletionCriteriaSettings) + * [need\_increment](#mlagents.trainers.settings.CompletionCriteriaSettings.need_increment) + * [Lesson](#mlagents.trainers.settings.Lesson) + * [EnvironmentParameterSettings](#mlagents.trainers.settings.EnvironmentParameterSettings) + * [structure](#mlagents.trainers.settings.EnvironmentParameterSettings.structure) + * [TrainerSettings](#mlagents.trainers.settings.TrainerSettings) + * [structure](#mlagents.trainers.settings.TrainerSettings.structure) + * [CheckpointSettings](#mlagents.trainers.settings.CheckpointSettings) + * [prioritize\_resume\_init](#mlagents.trainers.settings.CheckpointSettings.prioritize_resume_init) + * [RunOptions](#mlagents.trainers.settings.RunOptions) + * [from\_argparse](#mlagents.trainers.settings.RunOptions.from_argparse) + + +# mlagents.trainers.trainer.on\_policy\_trainer + + +## OnPolicyTrainer Objects + +```python +class OnPolicyTrainer(RLTrainer) +``` + +The PPOTrainer is an implementation of the PPO algorithm. + + +#### \_\_init\_\_ + +```python + | __init__(behavior_name: str, reward_buff_cap: int, trainer_settings: TrainerSettings, training: bool, load: bool, seed: int, artifact_path: str) +``` + +Responsible for collecting experiences and training an on-policy model. + +**Arguments**: + +- `behavior_name`: The name of the behavior associated with trainer config +- `reward_buff_cap`: Max reward history to track in the reward buffer +- `trainer_settings`: The parameters for the trainer. +- `training`: Whether the trainer is set for training. +- `load`: Whether the model should be loaded. +- `seed`: The seed the model will be initialized with +- `artifact_path`: The directory within which to store artifacts from this trainer. + + +#### add\_policy + +```python + | add_policy(parsed_behavior_id: BehaviorIdentifiers, policy: Policy) -> None +``` + +Adds policy to trainer. + +**Arguments**: + +- `parsed_behavior_id`: Behavior identifiers that the policy should belong to. +- `policy`: Policy to associate with name_behavior_id. + + +# mlagents.trainers.trainer.off\_policy\_trainer + + +## OffPolicyTrainer Objects + +```python +class OffPolicyTrainer(RLTrainer) +``` + +The SACTrainer is an implementation of the SAC algorithm, with support +for discrete actions and recurrent networks. + + +#### \_\_init\_\_ + +```python + | __init__(behavior_name: str, reward_buff_cap: int, trainer_settings: TrainerSettings, training: bool, load: bool, seed: int, artifact_path: str) +``` + +Responsible for collecting experiences and training an off-policy model. + +**Arguments**: + +- `behavior_name`: The name of the behavior associated with trainer config +- `reward_buff_cap`: Max reward history to track in the reward buffer +- `trainer_settings`: The parameters for the trainer. +- `training`: Whether the trainer is set for training. +- `load`: Whether the model should be loaded. +- `seed`: The seed the model will be initialized with +- `artifact_path`: The directory within which to store artifacts from this trainer. + + +#### save\_model + +```python + | save_model() -> None +``` + +Saves the final training model to memory +Overrides the default to save the replay buffer. + + +#### save\_replay\_buffer + +```python + | save_replay_buffer() -> None +``` + +Save the training buffer's update buffer to a pickle file. + + +#### load\_replay\_buffer + +```python + | load_replay_buffer() -> None +``` + +Loads the last saved replay buffer from a file. + + +#### add\_policy + +```python + | add_policy(parsed_behavior_id: BehaviorIdentifiers, policy: Policy) -> None +``` + +Adds policy to trainer. + + +# mlagents.trainers.trainer.rl\_trainer + + +## RLTrainer Objects + +```python +class RLTrainer(Trainer) +``` + +This class is the base class for trainers that use Reward Signals. + + +#### end\_episode + +```python + | end_episode() -> None +``` + +A signal that the Episode has ended. The buffer must be reset. +Get only called when the academy resets. + + +#### create\_optimizer + +```python + | @abc.abstractmethod + | create_optimizer() -> TorchOptimizer +``` + +Creates an Optimizer object + + +#### save\_model + +```python + | save_model() -> None +``` + +Saves the policy associated with this trainer. + + +#### advance + +```python + | advance() -> None +``` + +Steps the trainer, taking in trajectories and updates if ready. +Will block and wait briefly if there are no trajectories. + + +# mlagents.trainers.trainer.trainer + + +## Trainer Objects + +```python +class Trainer(abc.ABC) +``` + +This class is the base class for the mlagents_envs.trainers + + +#### \_\_init\_\_ + +```python + | __init__(brain_name: str, trainer_settings: TrainerSettings, training: bool, load: bool, artifact_path: str, reward_buff_cap: int = 1) +``` + +Responsible for collecting experiences and training a neural network model. + +**Arguments**: + +- `brain_name`: Brain name of brain to be trained. +- `trainer_settings`: The parameters for the trainer (dictionary). +- `training`: Whether the trainer is set for training. +- `artifact_path`: The directory within which to store artifacts from this trainer +- `reward_buff_cap`: + + +#### stats\_reporter + +```python + | @property + | stats_reporter() +``` + +Returns the stats reporter associated with this Trainer. + + +#### parameters + +```python + | @property + | parameters() -> TrainerSettings +``` + +Returns the trainer parameters of the trainer. + + +#### get\_max\_steps + +```python + | @property + | get_max_steps() -> int +``` + +Returns the maximum number of steps. Is used to know when the trainer should be stopped. + +**Returns**: + +The maximum number of steps of the trainer + + +#### get\_step + +```python + | @property + | get_step() -> int +``` + +Returns the number of steps the trainer has performed + +**Returns**: + +the step count of the trainer + + +#### threaded + +```python + | @property + | threaded() -> bool +``` + +Whether or not to run the trainer in a thread. True allows the trainer to +update the policy while the environment is taking steps. Set to False to +enforce strict on-policy updates (i.e. don't update the policy when taking steps.) + + +#### should\_still\_train + +```python + | @property + | should_still_train() -> bool +``` + +Returns whether or not the trainer should train. A Trainer could +stop training if it wasn't training to begin with, or if max_steps +is reached. + + +#### reward\_buffer + +```python + | @property + | reward_buffer() -> Deque[float] +``` + +Returns the reward buffer. The reward buffer contains the cumulative +rewards of the most recent episodes completed by agents using this +trainer. + +**Returns**: + +the reward buffer. + + +#### save\_model + +```python + | @abc.abstractmethod + | save_model() -> None +``` + +Saves model file(s) for the policy or policies associated with this trainer. + + +#### end\_episode + +```python + | @abc.abstractmethod + | end_episode() +``` + +A signal that the Episode has ended. The buffer must be reset. +Get only called when the academy resets. + + +#### create\_policy + +```python + | @abc.abstractmethod + | create_policy(parsed_behavior_id: BehaviorIdentifiers, behavior_spec: BehaviorSpec) -> Policy +``` + +Creates a Policy object + + +#### add\_policy + +```python + | @abc.abstractmethod + | add_policy(parsed_behavior_id: BehaviorIdentifiers, policy: Policy) -> None +``` + +Adds policy to trainer. + + +#### get\_policy + +```python + | get_policy(name_behavior_id: str) -> Policy +``` + +Gets policy associated with name_behavior_id + +**Arguments**: + +- `name_behavior_id`: Fully qualified behavior name + +**Returns**: + +Policy associated with name_behavior_id + + +#### advance + +```python + | @abc.abstractmethod + | advance() -> None +``` + +Advances the trainer. Typically, this means grabbing trajectories +from all subscribed trajectory queues (self.trajectory_queues), and updating +a policy using the steps in them, and if needed pushing a new policy onto the right +policy queues (self.policy_queues). + + +#### publish\_policy\_queue + +```python + | publish_policy_queue(policy_queue: AgentManagerQueue[Policy]) -> None +``` + +Adds a policy queue to the list of queues to publish to when this Trainer +makes a policy update + +**Arguments**: + +- `policy_queue`: Policy queue to publish to. + + +#### subscribe\_trajectory\_queue + +```python + | subscribe_trajectory_queue(trajectory_queue: AgentManagerQueue[Trajectory]) -> None +``` + +Adds a trajectory queue to the list of queues for the trainer to ingest Trajectories from. + +**Arguments**: + +- `trajectory_queue`: Trajectory queue to read from. + + +# mlagents.trainers.settings + + +#### deep\_update\_dict + +```python +deep_update_dict(d: Dict, update_d: Mapping) -> None +``` + +Similar to dict.update(), but works for nested dicts of dicts as well. + + +## RewardSignalSettings Objects + +```python +@attr.s(auto_attribs=True) +class RewardSignalSettings() +``` + + +#### structure + +```python + | @staticmethod + | structure(d: Mapping, t: type) -> Any +``` + +Helper method to structure a Dict of RewardSignalSettings class. Meant to be registered with +cattr.register_structure_hook() and called with cattr.structure(). This is needed to handle +the special Enum selection of RewardSignalSettings classes. + + +## ParameterRandomizationSettings Objects + +```python +@attr.s(auto_attribs=True) +class ParameterRandomizationSettings(abc.ABC) +``` + + +#### \_\_str\_\_ + +```python + | __str__() -> str +``` + +Helper method to output sampler stats to console. + + +#### structure + +```python + | @staticmethod + | structure(d: Union[Mapping, float], t: type) -> "ParameterRandomizationSettings" +``` + +Helper method to a ParameterRandomizationSettings class. Meant to be registered with +cattr.register_structure_hook() and called with cattr.structure(). This is needed to handle +the special Enum selection of ParameterRandomizationSettings classes. + + +#### unstructure + +```python + | @staticmethod + | unstructure(d: "ParameterRandomizationSettings") -> Mapping +``` + +Helper method to a ParameterRandomizationSettings class. Meant to be registered with +cattr.register_unstructure_hook() and called with cattr.unstructure(). + + +#### apply + +```python + | @abc.abstractmethod + | apply(key: str, env_channel: EnvironmentParametersChannel) -> None +``` + +Helper method to send sampler settings over EnvironmentParametersChannel +Calls the appropriate sampler type set method. + +**Arguments**: + +- `key`: environment parameter to be sampled +- `env_channel`: The EnvironmentParametersChannel to communicate sampler settings to environment + + +## ConstantSettings Objects + +```python +@attr.s(auto_attribs=True) +class ConstantSettings(ParameterRandomizationSettings) +``` + + +#### \_\_str\_\_ + +```python + | __str__() -> str +``` + +Helper method to output sampler stats to console. + + +#### apply + +```python + | apply(key: str, env_channel: EnvironmentParametersChannel) -> None +``` + +Helper method to send sampler settings over EnvironmentParametersChannel +Calls the constant sampler type set method. + +**Arguments**: + +- `key`: environment parameter to be sampled +- `env_channel`: The EnvironmentParametersChannel to communicate sampler settings to environment + + +## UniformSettings Objects + +```python +@attr.s(auto_attribs=True) +class UniformSettings(ParameterRandomizationSettings) +``` + + +#### \_\_str\_\_ + +```python + | __str__() -> str +``` + +Helper method to output sampler stats to console. + + +#### apply + +```python + | apply(key: str, env_channel: EnvironmentParametersChannel) -> None +``` + +Helper method to send sampler settings over EnvironmentParametersChannel +Calls the uniform sampler type set method. + +**Arguments**: + +- `key`: environment parameter to be sampled +- `env_channel`: The EnvironmentParametersChannel to communicate sampler settings to environment + + +## GaussianSettings Objects + +```python +@attr.s(auto_attribs=True) +class GaussianSettings(ParameterRandomizationSettings) +``` + + +#### \_\_str\_\_ + +```python + | __str__() -> str +``` + +Helper method to output sampler stats to console. + + +#### apply + +```python + | apply(key: str, env_channel: EnvironmentParametersChannel) -> None +``` + +Helper method to send sampler settings over EnvironmentParametersChannel +Calls the gaussian sampler type set method. + +**Arguments**: + +- `key`: environment parameter to be sampled +- `env_channel`: The EnvironmentParametersChannel to communicate sampler settings to environment + + +## MultiRangeUniformSettings Objects + +```python +@attr.s(auto_attribs=True) +class MultiRangeUniformSettings(ParameterRandomizationSettings) +``` + + +#### \_\_str\_\_ + +```python + | __str__() -> str +``` + +Helper method to output sampler stats to console. + + +#### apply + +```python + | apply(key: str, env_channel: EnvironmentParametersChannel) -> None +``` + +Helper method to send sampler settings over EnvironmentParametersChannel +Calls the multirangeuniform sampler type set method. + +**Arguments**: + +- `key`: environment parameter to be sampled +- `env_channel`: The EnvironmentParametersChannel to communicate sampler settings to environment + + +## CompletionCriteriaSettings Objects + +```python +@attr.s(auto_attribs=True) +class CompletionCriteriaSettings() +``` + +CompletionCriteriaSettings contains the information needed to figure out if the next +lesson must start. + + +#### need\_increment + +```python + | need_increment(progress: float, reward_buffer: List[float], smoothing: float) -> Tuple[bool, float] +``` + +Given measures, this method returns a boolean indicating if the lesson +needs to change now, and a float corresponding to the new smoothed value. + + +## Lesson Objects + +```python +@attr.s(auto_attribs=True) +class Lesson() +``` + +Gathers the data of one lesson for one environment parameter including its name, +the condition that must be fullfiled for the lesson to be completed and a sampler +for the environment parameter. If the completion_criteria is None, then this is +the last lesson in the curriculum. + + +## EnvironmentParameterSettings Objects + +```python +@attr.s(auto_attribs=True) +class EnvironmentParameterSettings() +``` + +EnvironmentParameterSettings is an ordered list of lessons for one environment +parameter. + + +#### structure + +```python + | @staticmethod + | structure(d: Mapping, t: type) -> Dict[str, "EnvironmentParameterSettings"] +``` + +Helper method to structure a Dict of EnvironmentParameterSettings class. Meant +to be registered with cattr.register_structure_hook() and called with +cattr.structure(). + + +## TrainerSettings Objects + +```python +@attr.s(auto_attribs=True) +class TrainerSettings(ExportableSettings) +``` + + +#### structure + +```python + | @staticmethod + | structure(d: Mapping, t: type) -> Any +``` + +Helper method to structure a TrainerSettings class. Meant to be registered with +cattr.register_structure_hook() and called with cattr.structure(). + + +## CheckpointSettings Objects + +```python +@attr.s(auto_attribs=True) +class CheckpointSettings() +``` + + +#### prioritize\_resume\_init + +```python + | prioritize_resume_init() -> None +``` + +Prioritize explicit command line resume/init over conflicting yaml options. +if both resume/init are set at one place use resume + + +## RunOptions Objects + +```python +@attr.s(auto_attribs=True) +class RunOptions(ExportableSettings) +``` + + +#### from\_argparse + +```python + | @staticmethod + | from_argparse(args: argparse.Namespace) -> "RunOptions" +``` + +Takes an argparse.Namespace as specified in `parse_command_line`, loads input configuration files +from file paths, and converts to a RunOptions instance. + +**Arguments**: + +- `args`: collection of command-line parameters passed to mlagents-learn + +**Returns**: + +RunOptions representing the passed in arguments, with trainer config, curriculum and sampler +configs loaded from files. diff --git a/docs/Python-Optimizer-Documentation.md b/docs/Python-Optimizer-Documentation.md new file mode 100644 index 0000000000000000000000000000000000000000..9b7e1b993c6d8d55f3f19e45c4b6d96bccc487d7 --- /dev/null +++ b/docs/Python-Optimizer-Documentation.md @@ -0,0 +1,87 @@ +# Table of Contents + +* [mlagents.trainers.optimizer.torch\_optimizer](#mlagents.trainers.optimizer.torch_optimizer) + * [TorchOptimizer](#mlagents.trainers.optimizer.torch_optimizer.TorchOptimizer) + * [create\_reward\_signals](#mlagents.trainers.optimizer.torch_optimizer.TorchOptimizer.create_reward_signals) + * [get\_trajectory\_value\_estimates](#mlagents.trainers.optimizer.torch_optimizer.TorchOptimizer.get_trajectory_value_estimates) +* [mlagents.trainers.optimizer.optimizer](#mlagents.trainers.optimizer.optimizer) + * [Optimizer](#mlagents.trainers.optimizer.optimizer.Optimizer) + * [update](#mlagents.trainers.optimizer.optimizer.Optimizer.update) + + +# mlagents.trainers.optimizer.torch\_optimizer + + +## TorchOptimizer Objects + +```python +class TorchOptimizer(Optimizer) +``` + + +#### create\_reward\_signals + +```python + | create_reward_signals(reward_signal_configs: Dict[RewardSignalType, RewardSignalSettings]) -> None +``` + +Create reward signals + +**Arguments**: + +- `reward_signal_configs`: Reward signal config. + + +#### get\_trajectory\_value\_estimates + +```python + | get_trajectory_value_estimates(batch: AgentBuffer, next_obs: List[np.ndarray], done: bool, agent_id: str = "") -> Tuple[Dict[str, np.ndarray], Dict[str, float], Optional[AgentBufferField]] +``` + +Get value estimates and memories for a trajectory, in batch form. + +**Arguments**: + +- `batch`: An AgentBuffer that consists of a trajectory. +- `next_obs`: the next observation (after the trajectory). Used for boostrapping + if this is not a termiinal trajectory. +- `done`: Set true if this is a terminal trajectory. +- `agent_id`: Agent ID of the agent that this trajectory belongs to. + +**Returns**: + +A Tuple of the Value Estimates as a Dict of [name, np.ndarray(trajectory_len)], + the final value estimate as a Dict of [name, float], and optionally (if using memories) + an AgentBufferField of initial critic memories to be used during update. + + +# mlagents.trainers.optimizer.optimizer + + +## Optimizer Objects + +```python +class Optimizer(abc.ABC) +``` + +Creates loss functions and auxillary networks (e.g. Q or Value) needed for training. +Provides methods to update the Policy. + + +#### update + +```python + | @abc.abstractmethod + | update(batch: AgentBuffer, num_sequences: int) -> Dict[str, float] +``` + +Update the Policy based on the batch that was passed in. + +**Arguments**: + +- `batch`: AgentBuffer that contains the minibatch of data used for this update. +- `num_sequences`: Number of recurrent sequences found in the minibatch. + +**Returns**: + +A Dict containing statistics (name, value) from the update (e.g. loss) diff --git a/docs/Python-PettingZoo-API-Documentation.md b/docs/Python-PettingZoo-API-Documentation.md new file mode 100644 index 0000000000000000000000000000000000000000..233e45e805c675234dacefa44307db05eeff724a --- /dev/null +++ b/docs/Python-PettingZoo-API-Documentation.md @@ -0,0 +1,246 @@ +# Table of Contents + +* [mlagents\_envs.envs.pettingzoo\_env\_factory](#mlagents_envs.envs.pettingzoo_env_factory) + * [PettingZooEnvFactory](#mlagents_envs.envs.pettingzoo_env_factory.PettingZooEnvFactory) + * [env](#mlagents_envs.envs.pettingzoo_env_factory.PettingZooEnvFactory.env) +* [mlagents\_envs.envs.unity\_aec\_env](#mlagents_envs.envs.unity_aec_env) + * [UnityAECEnv](#mlagents_envs.envs.unity_aec_env.UnityAECEnv) + * [\_\_init\_\_](#mlagents_envs.envs.unity_aec_env.UnityAECEnv.__init__) + * [step](#mlagents_envs.envs.unity_aec_env.UnityAECEnv.step) + * [observe](#mlagents_envs.envs.unity_aec_env.UnityAECEnv.observe) + * [last](#mlagents_envs.envs.unity_aec_env.UnityAECEnv.last) +* [mlagents\_envs.envs.unity\_parallel\_env](#mlagents_envs.envs.unity_parallel_env) + * [UnityParallelEnv](#mlagents_envs.envs.unity_parallel_env.UnityParallelEnv) + * [\_\_init\_\_](#mlagents_envs.envs.unity_parallel_env.UnityParallelEnv.__init__) + * [reset](#mlagents_envs.envs.unity_parallel_env.UnityParallelEnv.reset) +* [mlagents\_envs.envs.unity\_pettingzoo\_base\_env](#mlagents_envs.envs.unity_pettingzoo_base_env) + * [UnityPettingzooBaseEnv](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv) + * [observation\_spaces](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.observation_spaces) + * [observation\_space](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.observation_space) + * [action\_spaces](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.action_spaces) + * [action\_space](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.action_space) + * [side\_channel](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.side_channel) + * [reset](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.reset) + * [seed](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.seed) + * [render](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.render) + * [close](#mlagents_envs.envs.unity_pettingzoo_base_env.UnityPettingzooBaseEnv.close) + + +# mlagents\_envs.envs.pettingzoo\_env\_factory + + +## PettingZooEnvFactory Objects + +```python +class PettingZooEnvFactory() +``` + + +#### env + +```python + | env(seed: Optional[int] = None, **kwargs: Union[List, int, bool, None]) -> UnityAECEnv +``` + +Creates the environment with env_id from unity's default_registry and wraps it in a UnityToPettingZooWrapper + +**Arguments**: + +- `seed`: The seed for the action spaces of the agents. +- `kwargs`: Any argument accepted by `UnityEnvironment`class except file_name + + +# mlagents\_envs.envs.unity\_aec\_env + + +## UnityAECEnv Objects + +```python +class UnityAECEnv(UnityPettingzooBaseEnv, AECEnv) +``` + +Unity AEC (PettingZoo) environment wrapper. + + +#### \_\_init\_\_ + +```python + | __init__(env: BaseEnv, seed: Optional[int] = None) +``` + +Initializes a Unity AEC environment wrapper. + +**Arguments**: + +- `env`: The UnityEnvironment that is being wrapped. +- `seed`: The seed for the action spaces of the agents. + + +#### step + +```python + | step(action: Any) -> None +``` + +Sets the action of the active agent and get the observation, reward, done +and info of the next agent. + +**Arguments**: + +- `action`: The action for the active agent + + +#### observe + +```python + | observe(agent_id) +``` + +Returns the observation an agent currently can make. `last()` calls this function. + + +#### last + +```python + | last(observe=True) +``` + +returns observation, cumulative reward, done, info for the current agent (specified by self.agent_selection) + + +# mlagents\_envs.envs.unity\_parallel\_env + + +## UnityParallelEnv Objects + +```python +class UnityParallelEnv(UnityPettingzooBaseEnv, ParallelEnv) +``` + +Unity Parallel (PettingZoo) environment wrapper. + + +#### \_\_init\_\_ + +```python + | __init__(env: BaseEnv, seed: Optional[int] = None) +``` + +Initializes a Unity Parallel environment wrapper. + +**Arguments**: + +- `env`: The UnityEnvironment that is being wrapped. +- `seed`: The seed for the action spaces of the agents. + + +#### reset + +```python + | reset() -> Dict[str, Any] +``` + +Resets the environment. + + +# mlagents\_envs.envs.unity\_pettingzoo\_base\_env + + +## UnityPettingzooBaseEnv Objects + +```python +class UnityPettingzooBaseEnv() +``` + +Unity Petting Zoo base environment. + + +#### observation\_spaces + +```python + | @property + | observation_spaces() -> Dict[str, spaces.Space] +``` + +Return the observation spaces of all the agents. + + +#### observation\_space + +```python + | observation_space(agent: str) -> Optional[spaces.Space] +``` + +The observation space of the current agent. + + +#### action\_spaces + +```python + | @property + | action_spaces() -> Dict[str, spaces.Space] +``` + +Return the action spaces of all the agents. + + +#### action\_space + +```python + | action_space(agent: str) -> Optional[spaces.Space] +``` + +The action space of the current agent. + + +#### side\_channel + +```python + | @property + | side_channel() -> Dict[str, Any] +``` + +The side channels of the environment. You can access the side channels +of an environment with `env.side_channel[]`. + + +#### reset + +```python + | reset() +``` + +Resets the environment. + + +#### seed + +```python + | seed(seed=None) +``` + +Reseeds the environment (making the resulting environment deterministic). +`reset()` must be called after `seed()`, and before `step()`. + + +#### render + +```python + | render(mode="human") +``` + +NOT SUPPORTED. + +Displays a rendered frame from the environment, if supported. +Alternate render modes in the default environments are `'rgb_array'` +which returns a numpy array and is supported by all environments outside of classic, +and `'ansi'` which returns the strings printed (specific to classic environments). + + +#### close + +```python + | close() -> None +``` + +Close the environment. diff --git a/docs/Python-PettingZoo-API.md b/docs/Python-PettingZoo-API.md new file mode 100644 index 0000000000000000000000000000000000000000..9af94d2dbb8d7579d57058cf0884f3252b677e76 --- /dev/null +++ b/docs/Python-PettingZoo-API.md @@ -0,0 +1,57 @@ +# Unity ML-Agents PettingZoo Wrapper + +With the increasing interest in multi-agent training with a gym-like API, we provide a +PettingZoo Wrapper around the [Petting Zoo API](https://www.pettingzoo.ml/). Our wrapper +provides interfaces on top of our `UnityEnvironment` class, which is the default way of +interfacing with a Unity environment via Python. + +## Installation and Examples + +The PettingZoo wrapper is part of the `mlgents_envs` package. Please refer to the +[mlagents_envs installation instructions](ML-Agents-Envs-README.md). + +[[Colab] PettingZoo Wrapper Example](https://colab.research.google.com/github/Unity-Technologies/ml-agents/blob/develop-python-api-ga/ml-agents-envs/colabs/Colab_PettingZoo.ipynb) + +This colab notebook demonstrates the example usage of the wrapper, including installation, +basic usages, and an example with our +[Striker vs Goalie environment](https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Learning-Environment-Examples.md#strikers-vs-goalie) +which is a multi-agents environment with multiple different behavior names. + +## API interface + +This wrapper is compatible with PettingZoo API. Please check out +[PettingZoo API page](https://www.pettingzoo.ml/api) for more details. +Here's an example of interacting with wrapped environment: + +```python +from mlagents_envs.environment import UnityEnvironment +from mlagents_envs.envs import UnityToPettingZooWrapper + +unity_env = UnityEnvironment("StrikersVsGoalie") +env = UnityToPettingZooWrapper(unity_env) +env.reset() +for agent in env.agent_iter(): + observation, reward, done, info = env.last() + action = policy(observation, agent) + env.step(action) +``` + +## Notes +- There is support for both [AEC](https://www.pettingzoo.ml/api#interacting-with-environments) + and [Parallel](https://www.pettingzoo.ml/api#parallel-api) PettingZoo APIs. +- The AEC wrapper is compatible with PettingZoo (PZ) API interface but works in a slightly + different way under the hood. For the AEC API, Instead of stepping the environment in every `env.step(action)`, + the PZ wrapper will store the action, and will only perform environment stepping when all the + agents requesting for actions in the current step have been assigned an action. This is for + performance, considering that the communication between Unity and python is more efficient + when data are sent in batches. +- Since the actions for the AEC wrapper are stored without applying them to the environment until + all the actions are queued, some components of the API might behave in unexpected way. For example, a call + to `env.reward` should return the instantaneous reward for that particular step, but the true + reward would only be available when an actual environment step is performed. It's recommended that + you follow the API definition for training (access rewards from `env.last()` instead of + `env.reward`) and the underlying mechanism shouldn't affect training results. +- The environments will automatically reset when it's done, so `env.agent_iter(max_step)` will + keep going on until the specified max step is reached (default: `2**63`). There is no need to + call `env.reset()` except for the very beginning of instantiating an environment. + diff --git a/docs/Readme.md b/docs/Readme.md new file mode 100644 index 0000000000000000000000000000000000000000..a7d6fb0dca23e4d46a379bebfb57518ce7a20903 --- /dev/null +++ b/docs/Readme.md @@ -0,0 +1,202 @@ +# Unity ML-Agents Toolkit + +[![docs badge](https://img.shields.io/badge/docs-reference-blue.svg)](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/) + +[![license badge](https://img.shields.io/badge/license-Apache--2.0-green.svg)](../LICENSE.md) + +([latest release](https://github.com/Unity-Technologies/ml-agents/releases/tag/latest_release)) +([all releases](https://github.com/Unity-Technologies/ml-agents/releases)) + +**The Unity Machine Learning Agents Toolkit** (ML-Agents) is an open-source +project that enables games and simulations to serve as environments for +training intelligent agents. We provide implementations (based on PyTorch) +of state-of-the-art algorithms to enable game developers and hobbyists to easily +train intelligent agents for 2D, 3D and VR/AR games. Researchers can also use the +provided simple-to-use Python API to train Agents using reinforcement learning, +imitation learning, neuroevolution, or any other methods. These trained agents can be +used for multiple purposes, including controlling NPC behavior (in a variety of +settings such as multi-agent and adversarial), automated testing of game builds +and evaluating different game design decisions pre-release. The ML-Agents +Toolkit is mutually beneficial for both game developers and AI researchers as it +provides a central platform where advances in AI can be evaluated on Unity’s +rich environments and then made accessible to the wider research and game +developer communities. + +## Features +- 17+ [example Unity environments](Learning-Environment-Examples.md) +- Support for multiple environment configurations and training scenarios +- Flexible Unity SDK that can be integrated into your game or custom Unity scene +- Support for training single-agent, multi-agent cooperative, and multi-agent + competitive scenarios via several Deep Reinforcement Learning algorithms (PPO, SAC, MA-POCA, self-play). +- Support for learning from demonstrations through two Imitation Learning algorithms (BC and GAIL). +- Quickly and easily add your own [custom training algorithm](Python-Custom-Trainer-Plugin.md) and/or components. +- Easily definable Curriculum Learning scenarios for complex tasks +- Train robust agents using environment randomization +- Flexible agent control with On Demand Decision Making +- Train using multiple concurrent Unity environment instances +- Utilizes the [Unity Inference Engine](Unity-Inference-Engine.md) to + provide native cross-platform support +- Unity environment [control from Python](Python-LLAPI.md) +- Wrap Unity learning environments as a [gym](Python-Gym-API.md) environment +- Wrap Unity learning environments as a [PettingZoo](Python-PettingZoo-API.md) environment + +See our [ML-Agents Overview](ML-Agents-Overview.md) page for detailed +descriptions of all these features. Or go straight to our [web docs](https://unity-technologies.github.io/ml-agents/). +## Releases & Documentation + +**Our latest, stable release is `Release 20`. Click +[here](Getting-Started.md) +to get started with the latest release of ML-Agents.** + +**You can also check out our new [web docs](https://unity-technologies.github.io/ml-agents/)!** + +The table below lists all our releases, including our `main` branch which is +under active development and may be unstable. A few helpful guidelines: +- The [Versioning page](Versioning.md) overviews how we manage our GitHub + releases and the versioning process for each of the ML-Agents components. +- The [Releases page](https://github.com/Unity-Technologies/ml-agents/releases) + contains details of the changes between releases. +- The [Migration page](Migrating.md) contains details on how to upgrade + from earlier releases of the ML-Agents Toolkit. +- The **Documentation** links in the table below include installation and usage + instructions specific to each release. Remember to always use the + documentation that corresponds to the release version you're using. +- The `com.unity.ml-agents` package is [verified](https://docs.unity3d.com/2020.1/Documentation/Manual/pack-safe.html) + for Unity 2020.1 and later. Verified packages releases are numbered 1.0.x. + +| **Version** | **Release Date** | **Source** | **Documentation** | **Download** | **Python Package** | **Unity Package** | +|:-------:|:------:|:-------------:|:-------:|:------------:|:------------:|:------------:| +| **Release 20** | **November 21, 2022** | **[source](https://github.com/Unity-Technologies/ml-agents/tree/release_20)** | **[docs](https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs/Readme.md)** | **[download](https://github.com/Unity-Technologies/ml-agents/archive/release_20.zip)** | **[0.30.0](https://pypi.org/project/mlagents/0.30.0/)** | **[2.3.0](https://docs.unity3d.com/Packages/com.unity.ml-agents@2.3/manual/index.html)** | +| **main (unstable)** | -- | [source](https://github.com/Unity-Technologies/ml-agents/tree/main) | [docs](https://github.com/Unity-Technologies/ml-agents/tree/main/docs/Readme.md) | [download](https://github.com/Unity-Technologies/ml-agents/archive/main.zip) | -- | -- | +| **Verified Package 1.0.8** | **May 26, 2021** | **[source](https://github.com/Unity-Technologies/ml-agents/tree/com.unity.ml-agents_1.0.8)** | **[docs](https://github.com/Unity-Technologies/ml-agents/blob/release_20_verified_docs/docs/Readme.md)** | **[download](https://github.com/Unity-Technologies/ml-agents/archive/com.unity.ml-agents_1.0.8.zip)** | **[0.16.1](https://pypi.org/project/mlagents/0.16.1/)** | **[1.0.8](https://docs.unity3d.com/Packages/com.unity.ml-agents@1.0/manual/index.html)** | + +If you are a researcher interested in a discussion of Unity as an AI platform, +see a pre-print of our +[reference paper on Unity and the ML-Agents Toolkit](https://arxiv.org/abs/1809.02627). + +If you use Unity or the ML-Agents Toolkit to conduct research, we ask that you +cite the following paper as a reference: + +``` +@article{juliani2020, + title={Unity: A general platform for intelligent agents}, + author={Juliani, Arthur and Berges, Vincent-Pierre and Teng, Ervin and Cohen, Andrew and Harper, Jonathan and Elion, Chris and Goy, Chris and Gao, Yuan and Henry, Hunter and Mattar, Marwan and Lange, Danny}, + journal={arXiv preprint arXiv:1809.02627}, + url={https://arxiv.org/pdf/1809.02627.pdf}, + year={2020} +} +``` + +Additionally, if you use the MA-POCA trainer in your research, we ask that you +cite the following paper as a reference: + +``` +@article{cohen2022, + title={On the Use and Misuse of Absorbing States in Multi-agent Reinforcement Learning}, + author={Cohen, Andrew and Teng, Ervin and Berges, Vincent-Pierre and Dong, Ruo-Ping and Henry, Hunter and Mattar, Marwan and Zook, Alexander and Ganguly, Sujoy}, + journal={RL in Games Workshop AAAI 2022}, + url={http://aaai-rlg.mlanctot.info/papers/AAAI22-RLG_paper_32.pdf}, + year={2022} +} +``` + + + +## Additional Resources + +We have a Unity Learn course, +[ML-Agents: Hummingbirds](https://learn.unity.com/course/ml-agents-hummingbirds), +that provides a gentle introduction to Unity and the ML-Agents Toolkit. + +We've also partnered with +[CodeMonkeyUnity](https://www.youtube.com/c/CodeMonkeyUnity) to create a +[series of tutorial videos](https://www.youtube.com/playlist?list=PLzDRvYVwl53vehwiN_odYJkPBzcqFw110) +on how to implement and use the ML-Agents Toolkit. + +We have also published a series of blog posts that are relevant for ML-Agents: + +- (July 12, 2021) + [ML-Agents plays Dodgeball](https://blog.unity.com/technology/ml-agents-plays-dodgeball) +- (May 5, 2021) + [ML-Agents v2.0 release: Now supports training complex cooperative behaviors](https://blogs.unity3d.com/2021/05/05/ml-agents-v2-0-release-now-supports-training-complex-cooperative-behaviors/) +- (December 28, 2020) + [Happy holidays from the Unity ML-Agents team!](https://blogs.unity3d.com/2020/12/28/happy-holidays-from-the-unity-ml-agents-team/) +- (November 20, 2020) + [How Eidos-Montréal created Grid Sensors to improve observations for training agents](https://blogs.unity3d.com/2020/11/20/how-eidos-montreal-created-grid-sensors-to-improve-observations-for-training-agents/) +- (November 11, 2020) + [2020 AI@Unity interns shoutout](https://blogs.unity3d.com/2020/11/11/2020-aiunity-interns-shoutout/) +- (May 12, 2020) + [Announcing ML-Agents Unity Package v1.0!](https://blogs.unity3d.com/2020/05/12/announcing-ml-agents-unity-package-v1-0/) +- (February 28, 2020) + [Training intelligent adversaries using self-play with ML-Agents](https://blogs.unity3d.com/2020/02/28/training-intelligent-adversaries-using-self-play-with-ml-agents/) +- (November 11, 2019) + [Training your agents 7 times faster with ML-Agents](https://blogs.unity3d.com/2019/11/11/training-your-agents-7-times-faster-with-ml-agents/) +- (October 21, 2019) + [The AI@Unity interns help shape the world](https://blogs.unity3d.com/2019/10/21/the-aiunity-interns-help-shape-the-world/) +- (April 15, 2019) + [Unity ML-Agents Toolkit v0.8: Faster training on real games](https://blogs.unity3d.com/2019/04/15/unity-ml-agents-toolkit-v0-8-faster-training-on-real-games/) +- (March 1, 2019) + [Unity ML-Agents Toolkit v0.7: A leap towards cross-platform inference](https://blogs.unity3d.com/2019/03/01/unity-ml-agents-toolkit-v0-7-a-leap-towards-cross-platform-inference/) +- (December 17, 2018) + [ML-Agents Toolkit v0.6: Improved usability of Brains and Imitation Learning](https://blogs.unity3d.com/2018/12/17/ml-agents-toolkit-v0-6-improved-usability-of-brains-and-imitation-learning/) +- (October 2, 2018) + [Puppo, The Corgi: Cuteness Overload with the Unity ML-Agents Toolkit](https://blogs.unity3d.com/2018/10/02/puppo-the-corgi-cuteness-overload-with-the-unity-ml-agents-toolkit/) +- (September 11, 2018) + [ML-Agents Toolkit v0.5, new resources for AI researchers available now](https://blogs.unity3d.com/2018/09/11/ml-agents-toolkit-v0-5-new-resources-for-ai-researchers-available-now/) +- (June 26, 2018) + [Solving sparse-reward tasks with Curiosity](https://blogs.unity3d.com/2018/06/26/solving-sparse-reward-tasks-with-curiosity/) +- (June 19, 2018) + [Unity ML-Agents Toolkit v0.4 and Udacity Deep Reinforcement Learning Nanodegree](https://blogs.unity3d.com/2018/06/19/unity-ml-agents-toolkit-v0-4-and-udacity-deep-reinforcement-learning-nanodegree/) +- (May 24, 2018) + [Imitation Learning in Unity: The Workflow](https://blogs.unity3d.com/2018/05/24/imitation-learning-in-unity-the-workflow/) +- (March 15, 2018) + [ML-Agents Toolkit v0.3 Beta released: Imitation Learning, feedback-driven features, and more](https://blogs.unity3d.com/2018/03/15/ml-agents-v0-3-beta-released-imitation-learning-feedback-driven-features-and-more/) +- (December 11, 2017) + [Using Machine Learning Agents in a real game: a beginner’s guide](https://blogs.unity3d.com/2017/12/11/using-machine-learning-agents-in-a-real-game-a-beginners-guide/) +- (December 8, 2017) + [Introducing ML-Agents Toolkit v0.2: Curriculum Learning, new environments, and more](https://blogs.unity3d.com/2017/12/08/introducing-ml-agents-v0-2-curriculum-learning-new-environments-and-more/) +- (September 19, 2017) + [Introducing: Unity Machine Learning Agents Toolkit](https://blogs.unity3d.com/2017/09/19/introducing-unity-machine-learning-agents/) +- Overviewing reinforcement learning concepts + ([multi-armed bandit](https://blogs.unity3d.com/2017/06/26/unity-ai-themed-blog-entries/) + and + [Q-learning](https://blogs.unity3d.com/2017/08/22/unity-ai-reinforcement-learning-with-q-learning/)) + +### More from Unity + +- [Unity Robotics](https://github.com/Unity-Technologies/Unity-Robotics-Hub) +- [Unity Computer Vision](https://github.com/Unity-Technologies/com.unity.perception) + +## Community and Feedback + +The ML-Agents Toolkit is an open-source project and we encourage and welcome +contributions. If you wish to contribute, be sure to review our +[contribution guidelines](CONTRIBUTING.md) and +[code of conduct](../CODE_OF_CONDUCT.md). + +For problems with the installation and setup of the ML-Agents Toolkit, or +discussions about how to best setup or train your agents, please create a new +thread on the +[Unity ML-Agents forum](https://forum.unity.com/forums/ml-agents.453/) and make +sure to include as much detail as possible. If you run into any other problems +using the ML-Agents Toolkit or have a specific feature request, please +[submit a GitHub issue](https://github.com/Unity-Technologies/ml-agents/issues). + +Please tell us which samples you would like to see shipped with the ML-Agents Unity +package by replying to +[this forum thread](https://forum.unity.com/threads/feedback-wanted-shipping-sample-s-with-the-ml-agents-package.1073468/). + + +Your opinion matters a great deal to us. Only by hearing your thoughts on the +Unity ML-Agents Toolkit can we continue to improve and grow. Please take a few +minutes to +[let us know about it](https://unitysoftware.co1.qualtrics.com/jfe/form/SV_55pQKCZ578t0kbc). + +For any other questions or feedback, connect directly with the ML-Agents team at +ml-agents@unity3d.com. + +## Privacy + +In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics. +Please refer to "Information that is passively collected by Unity" in the +[Unity Privacy Policy](https://unity3d.com/legal/privacy-policy). diff --git a/docs/Training-Configuration-File.md b/docs/Training-Configuration-File.md new file mode 100644 index 0000000000000000000000000000000000000000..d47b6ab103cfe1d25aead7ae9e712a6e175310cc --- /dev/null +++ b/docs/Training-Configuration-File.md @@ -0,0 +1,231 @@ +# Training Configuration File + +**Table of Contents** + +- [Common Trainer Configurations](#common-trainer-configurations) +- [Trainer-specific Configurations](#trainer-specific-configurations) + - [PPO-specific Configurations](#ppo-specific-configurations) + - [SAC-specific Configurations](#sac-specific-configurations) +- [Reward Signals](#reward-signals) + - [Extrinsic Rewards](#extrinsic-rewards) + - [Curiosity Intrinsic Reward](#curiosity-intrinsic-reward) + - [GAIL Intrinsic Reward](#gail-intrinsic-reward) + - [RND Intrinsic Reward](#rnd-intrinsic-reward) + - [Reward Signal Settings for SAC](#reward-signal-settings-for-sac) +- [Behavioral Cloning](#behavioral-cloning) +- [Memory-enhanced Agents using Recurrent Neural Networks](#memory-enhanced-agents-using-recurrent-neural-networks) +- [Self-Play](#self-play) + - [Note on Reward Signals](#note-on-reward-signals) + - [Note on Swap Steps](#note-on-swap-steps) + +## Common Trainer Configurations + +One of the first decisions you need to make regarding your training run is which +trainer to use: PPO, SAC, or POCA. There are some training configurations that are +common to both trainers (which we review now) and others that depend on the +choice of the trainer (which we review on subsequent sections). + +| **Setting** | **Description** | +| :----------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `trainer_type` | (default = `ppo`) The type of trainer to use: `ppo`, `sac`, or `poca`. | +| `summary_freq` | (default = `50000`) Number of experiences that needs to be collected before generating and displaying training statistics. This determines the granularity of the graphs in Tensorboard. | +| `time_horizon` | (default = `64`) How many steps of experience to collect per-agent before adding it to the experience buffer. When this limit is reached before the end of an episode, a value estimate is used to predict the overall expected reward from the agent's current state. As such, this parameter trades off between a less biased, but higher variance estimate (long time horizon) and more biased, but less varied estimate (short time horizon). In cases where there are frequent rewards within an episode, or episodes are prohibitively large, a smaller number can be more ideal. This number should be large enough to capture all the important behavior within a sequence of an agent's actions.

Typical range: `32` - `2048` | +| `max_steps` | (default = `500000`) Total number of steps (i.e., observation collected and action taken) that must be taken in the environment (or across all environments if using multiple in parallel) before ending the training process. If you have multiple agents with the same behavior name within your environment, all steps taken by those agents will contribute to the same `max_steps` count.

Typical range: `5e5` - `1e7` | +| `keep_checkpoints` | (default = `5`) The maximum number of model checkpoints to keep. Checkpoints are saved after the number of steps specified by the checkpoint_interval option. Once the maximum number of checkpoints has been reached, the oldest checkpoint is deleted when saving a new checkpoint. | +| `even_checkpoints` | (default = `false`) If set to true, ignores `checkpoint_interval` and evenly distributes checkpoints throughout training based on `keep_checkpoints`and `max_steps`, i.e. `checkpoint_interval = max_steps / keep_checkpoints`. Useful for cataloging agent behavior throughout training. | +| `checkpoint_interval` | (default = `500000`) The number of experiences collected between each checkpoint by the trainer. A maximum of `keep_checkpoints` checkpoints are saved before old ones are deleted. Each checkpoint saves the `.onnx` files in `results/` folder.| +| `init_path` | (default = None) Initialize trainer from a previously saved model. Note that the prior run should have used the same trainer configurations as the current run, and have been saved with the same version of ML-Agents.

You can provide either the file name or the full path to the checkpoint, e.g. `{checkpoint_name.pt}` or `./models/{run-id}/{behavior_name}/{checkpoint_name.pt}`. This option is provided in case you want to initialize different behaviors from different runs or initialize from an older checkpoint; in most cases, it is sufficient to use the `--initialize-from` CLI parameter to initialize all models from the same run. | +| `threaded` | (default = `false`) Allow environments to step while updating the model. This might result in a training speedup, especially when using SAC. For best performance, leave setting to `false` when using self-play. | +| `hyperparameters -> learning_rate` | (default = `3e-4`) Initial learning rate for gradient descent. Corresponds to the strength of each gradient descent update step. This should typically be decreased if training is unstable, and the reward does not consistently increase.

Typical range: `1e-5` - `1e-3` | +| `hyperparameters -> batch_size` | Number of experiences in each iteration of gradient descent. **This should always be multiple times smaller than `buffer_size`**. If you are using continuous actions, this value should be large (on the order of 1000s). If you are using only discrete actions, this value should be smaller (on the order of 10s).

Typical range: (Continuous - PPO): `512` - `5120`; (Continuous - SAC): `128` - `1024`; (Discrete, PPO & SAC): `32` - `512`. | +| `hyperparameters -> buffer_size` | (default = `10240` for PPO and `50000` for SAC)
**PPO:** Number of experiences to collect before updating the policy model. Corresponds to how many experiences should be collected before we do any learning or updating of the model. **This should be multiple times larger than `batch_size`**. Typically a larger `buffer_size` corresponds to more stable training updates.
**SAC:** The max size of the experience buffer - on the order of thousands of times longer than your episodes, so that SAC can learn from old as well as new experiences.

Typical range: PPO: `2048` - `409600`; SAC: `50000` - `1000000` | +| `hyperparameters -> learning_rate_schedule` | (default = `linear` for PPO and `constant` for SAC) Determines how learning rate changes over time. For PPO, we recommend decaying learning rate until max_steps so learning converges more stably. However, for some cases (e.g. training for an unknown amount of time) this feature can be disabled. For SAC, we recommend holding learning rate constant so that the agent can continue to learn until its Q function converges naturally.

`linear` decays the learning_rate linearly, reaching 0 at max_steps, while `constant` keeps the learning rate constant for the entire training run. | +| `network_settings -> hidden_units` | (default = `128`) Number of units in the hidden layers of the neural network. Correspond to how many units are in each fully connected layer of the neural network. For simple problems where the correct action is a straightforward combination of the observation inputs, this should be small. For problems where the action is a very complex interaction between the observation variables, this should be larger.

Typical range: `32` - `512` | +| `network_settings -> num_layers` | (default = `2`) The number of hidden layers in the neural network. Corresponds to how many hidden layers are present after the observation input, or after the CNN encoding of the visual observation. For simple problems, fewer layers are likely to train faster and more efficiently. More layers may be necessary for more complex control problems.

Typical range: `1` - `3` | +| `network_settings -> normalize` | (default = `false`) Whether normalization is applied to the vector observation inputs. This normalization is based on the running average and variance of the vector observation. Normalization can be helpful in cases with complex continuous control problems, but may be harmful with simpler discrete control problems. | +| `network_settings -> vis_encode_type` | (default = `simple`) Encoder type for encoding visual observations.

`simple` (default) uses a simple encoder which consists of two convolutional layers, `nature_cnn` uses the CNN implementation proposed by [Mnih et al.](https://www.nature.com/articles/nature14236), consisting of three convolutional layers, and `resnet` uses the [IMPALA Resnet](https://arxiv.org/abs/1802.01561) consisting of three stacked layers, each with two residual blocks, making a much larger network than the other two. `match3` is a smaller CNN ([Gudmundsoon et al.](https://www.researchgate.net/publication/328307928_Human-Like_Playtesting_with_Deep_Learning)) that can capture more granular spatial relationships and is optimized for board games. `fully_connected` uses a single fully connected dense layer as encoder without any convolutional layers.

Due to the size of convolution kernel, there is a minimum observation size limitation that each encoder type can handle - `simple`: 20x20, `nature_cnn`: 36x36, `resnet`: 15 x 15, `match3`: 5x5. `fully_connected` doesn't have convolutional layers and thus no size limits, but since it has less representation power it should be reserved for very small inputs. Note that using the `match3` CNN with very large visual input might result in a huge observation encoding and thus potentially slow down training or cause memory issues. | +| `network_settings -> conditioning_type` | (default = `hyper`) Conditioning type for the policy using goal observations.

`none` treats the goal observations as regular observations, `hyper` (default) uses a HyperNetwork with goal observations as input to generate some of the weights of the policy. Note that when using `hyper` the number of parameters of the network increases greatly. Therefore, it is recommended to reduce the number of `hidden_units` when using this `conditioning_type` + + +## Trainer-specific Configurations + +Depending on your choice of a trainer, there are additional trainer-specific +configurations. We present them below in two separate tables, but keep in mind +that you only need to include the configurations for the trainer selected (i.e. +the `trainer` setting above). + +### PPO-specific Configurations + +| **Setting** | **Description** | +| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `hyperparameters -> beta` | (default = `5.0e-3`) Strength of the entropy regularization, which makes the policy "more random." This ensures that agents properly explore the action space during training. Increasing this will ensure more random actions are taken. This should be adjusted such that the entropy (measurable from TensorBoard) slowly decreases alongside increases in reward. If entropy drops too quickly, increase beta. If entropy drops too slowly, decrease `beta`.

Typical range: `1e-4` - `1e-2` | +| `hyperparameters -> epsilon` | (default = `0.2`) Influences how rapidly the policy can evolve during training. Corresponds to the acceptable threshold of divergence between the old and new policies during gradient descent updating. Setting this value small will result in more stable updates, but will also slow the training process.

Typical range: `0.1` - `0.3` | +| `hyperparameters -> beta_schedule` | (default = `learning_rate_schedule`) Determines how beta changes over time.

`linear` decays beta linearly, reaching 0 at max_steps, while `constant` keeps beta constant for the entire training run. If not explicitly set, the default beta schedule will be set to `hyperparameters -> learning_rate_schedule`. | +| `hyperparameters -> epsilon_schedule` | (default = `learning_rate_schedule `) Determines how epsilon changes over time (PPO only).

`linear` decays epsilon linearly, reaching 0 at max_steps, while `constant` keeps the epsilon constant for the entire training run. If not explicitly set, the default epsilon schedule will be set to `hyperparameters -> learning_rate_schedule`. +| `hyperparameters -> lambd` | (default = `0.95`) Regularization parameter (lambda) used when calculating the Generalized Advantage Estimate ([GAE](https://arxiv.org/abs/1506.02438)). This can be thought of as how much the agent relies on its current value estimate when calculating an updated value estimate. Low values correspond to relying more on the current value estimate (which can be high bias), and high values correspond to relying more on the actual rewards received in the environment (which can be high variance). The parameter provides a trade-off between the two, and the right value can lead to a more stable training process.

Typical range: `0.9` - `0.95` | +| `hyperparameters -> num_epoch` | (default = `3`) Number of passes to make through the experience buffer when performing gradient descent optimization.The larger the batch_size, the larger it is acceptable to make this. Decreasing this will ensure more stable updates, at the cost of slower learning.

Typical range: `3` - `10` | +| `hyperparameters -> shared_critic` | (default = `False`) Whether or not the policy and value function networks share a backbone. It may be useful to use a shared backbone when learning from image observations. + +### SAC-specific Configurations + +| **Setting** | **Description** | +| :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `hyperparameters -> buffer_init_steps` | (default = `0`) Number of experiences to collect into the buffer before updating the policy model. As the untrained policy is fairly random, pre-filling the buffer with random actions is useful for exploration. Typically, at least several episodes of experiences should be pre-filled.

Typical range: `1000` - `10000` | +| `hyperparameters -> init_entcoef` | (default = `1.0`) How much the agent should explore in the beginning of training. Corresponds to the initial entropy coefficient set at the beginning of training. In SAC, the agent is incentivized to make its actions entropic to facilitate better exploration. The entropy coefficient weighs the true reward with a bonus entropy reward. The entropy coefficient is [automatically adjusted](https://arxiv.org/abs/1812.05905) to a preset target entropy, so the `init_entcoef` only corresponds to the starting value of the entropy bonus. Increase init_entcoef to explore more in the beginning, decrease to converge to a solution faster.

Typical range: (Continuous): `0.5` - `1.0`; (Discrete): `0.05` - `0.5` | +| `hyperparameters -> save_replay_buffer` | (default = `false`) Whether to save and load the experience replay buffer as well as the model when quitting and re-starting training. This may help resumes go more smoothly, as the experiences collected won't be wiped. Note that replay buffers can be very large, and will take up a considerable amount of disk space. For that reason, we disable this feature by default. | +| `hyperparameters -> tau` | (default = `0.005`) How aggressively to update the target network used for bootstrapping value estimation in SAC. Corresponds to the magnitude of the target Q update during the SAC model update. In SAC, there are two neural networks: the target and the policy. The target network is used to bootstrap the policy's estimate of the future rewards at a given state, and is fixed while the policy is being updated. This target is then slowly updated according to tau. Typically, this value should be left at 0.005. For simple problems, increasing tau to 0.01 might reduce the time it takes to learn, at the cost of stability.

Typical range: `0.005` - `0.01` | +| `hyperparameters -> steps_per_update` | (default = `1`) Average ratio of agent steps (actions) taken to updates made of the agent's policy. In SAC, a single "update" corresponds to grabbing a batch of size `batch_size` from the experience replay buffer, and using this mini batch to update the models. Note that it is not guaranteed that after exactly `steps_per_update` steps an update will be made, only that the ratio will hold true over many steps. Typically, `steps_per_update` should be greater than or equal to 1. Note that setting `steps_per_update` lower will improve sample efficiency (reduce the number of steps required to train) but increase the CPU time spent performing updates. For most environments where steps are fairly fast (e.g. our example environments) `steps_per_update` equal to the number of agents in the scene is a good balance. For slow environments (steps take 0.1 seconds or more) reducing `steps_per_update` may improve training speed. We can also change `steps_per_update` to lower than 1 to update more often than once per step, though this will usually result in a slowdown unless the environment is very slow.

Typical range: `1` - `20` | +| `hyperparameters -> reward_signal_num_update` | (default = `steps_per_update`) Number of steps per mini batch sampled and used for updating the reward signals. By default, we update the reward signals once every time the main policy is updated. However, to imitate the training procedure in certain imitation learning papers (e.g. [Kostrikov et. al](http://arxiv.org/abs/1809.02925), [Blondé et. al](http://arxiv.org/abs/1809.02064)), we may want to update the reward signal (GAIL) M times for every update of the policy. We can change `steps_per_update` of SAC to N, as well as `reward_signal_steps_per_update` under `reward_signals` to N / M to accomplish this. By default, `reward_signal_steps_per_update` is set to `steps_per_update`. | + +### MA-POCA-specific Configurations +MA-POCA uses the same configurations as PPO, and there are no additional POCA-specific parameters. + +**NOTE**: Reward signals other than Extrinsic Rewards have not been extensively tested with MA-POCA, +though they can still be added and used for training on a your-mileage-may-vary basis. + +## Reward Signals + +The `reward_signals` section enables the specification of settings for both +extrinsic (i.e. environment-based) and intrinsic reward signals (e.g. curiosity +and GAIL). Each reward signal should define at least two parameters, `strength` +and `gamma`, in addition to any class-specific hyperparameters. Note that to +remove a reward signal, you should delete its entry entirely from +`reward_signals`. At least one reward signal should be left defined at all +times. Provide the following configurations to design the reward signal for your +training run. + +### Extrinsic Rewards + +Enable these settings to ensure that your training run incorporates your +environment-based reward signal: + +| **Setting** | **Description** | +| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `extrinsic -> strength` | (default = `1.0`) Factor by which to multiply the reward given by the environment. Typical ranges will vary depending on the reward signal.

Typical range: `1.00` | +| `extrinsic -> gamma` | (default = `0.99`) Discount factor for future rewards coming from the environment. This can be thought of as how far into the future the agent should care about possible rewards. In situations when the agent should be acting in the present in order to prepare for rewards in the distant future, this value should be large. In cases when rewards are more immediate, it can be smaller. Must be strictly smaller than 1.

Typical range: `0.8` - `0.995` | + +### Curiosity Intrinsic Reward + +To enable curiosity, provide these settings: + +| **Setting** | **Description** | +| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `curiosity -> strength` | (default = `1.0`) Magnitude of the curiosity reward generated by the intrinsic curiosity module. This should be scaled in order to ensure it is large enough to not be overwhelmed by extrinsic reward signals in the environment. Likewise it should not be too large to overwhelm the extrinsic reward signal.

Typical range: `0.001` - `0.1` | +| `curiosity -> gamma` | (default = `0.99`) Discount factor for future rewards.

Typical range: `0.8` - `0.995` | +| `curiosity -> network_settings` | Please see the documentation for `network_settings` under [Common Trainer Configurations](#common-trainer-configurations). The network specs used by the intrinsic curiosity model. The value should of `hidden_units` should be small enough to encourage the ICM to compress the original observation, but also not too small to prevent it from learning to differentiate between expected and actual observations.

Typical range: `64` - `256` | +| `curiosity -> learning_rate` | (default = `3e-4`) Learning rate used to update the intrinsic curiosity module. This should typically be decreased if training is unstable, and the curiosity loss is unstable.

Typical range: `1e-5` - `1e-3` | + +### GAIL Intrinsic Reward + +To enable GAIL (assuming you have recorded demonstrations), provide these +settings: + +| **Setting** | **Description** | +| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `gail -> strength` | (default = `1.0`) Factor by which to multiply the raw reward. Note that when using GAIL with an Extrinsic Signal, this value should be set lower if your demonstrations are suboptimal (e.g. from a human), so that a trained agent will focus on receiving extrinsic rewards instead of exactly copying the demonstrations. Keep the strength below about 0.1 in those cases.

Typical range: `0.01` - `1.0` | +| `gail -> gamma` | (default = `0.99`) Discount factor for future rewards.

Typical range: `0.8` - `0.9` | +| `gail -> demo_path` | (Required, no default) The path to your .demo file or directory of .demo files. | +| `gail -> network_settings` | Please see the documentation for `network_settings` under [Common Trainer Configurations](#common-trainer-configurations). The network specs for the GAIL discriminator. The value of `hidden_units` should be small enough to encourage the discriminator to compress the original observation, but also not too small to prevent it from learning to differentiate between demonstrated and actual behavior. Dramatically increasing this size will also negatively affect training times.

Typical range: `64` - `256` | +| `gail -> learning_rate` | (Optional, default = `3e-4`) Learning rate used to update the discriminator. This should typically be decreased if training is unstable, and the GAIL loss is unstable.

Typical range: `1e-5` - `1e-3` | +| `gail -> use_actions` | (default = `false`) Determines whether the discriminator should discriminate based on both observations and actions, or just observations. Set to True if you want the agent to mimic the actions from the demonstrations, and False if you'd rather have the agent visit the same states as in the demonstrations but with possibly different actions. Setting to False is more likely to be stable, especially with imperfect demonstrations, but may learn slower. | +| `gail -> use_vail` | (default = `false`) Enables a variational bottleneck within the GAIL discriminator. This forces the discriminator to learn a more general representation and reduces its tendency to be "too good" at discriminating, making learning more stable. However, it does increase training time. Enable this if you notice your imitation learning is unstable, or unable to learn the task at hand. | + +### RND Intrinsic Reward + +Random Network Distillation (RND) is only available for the PyTorch trainers. +To enable RND, provide these settings: + +| **Setting** | **Description** | +| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `rnd -> strength` | (default = `1.0`) Magnitude of the curiosity reward generated by the intrinsic rnd module. This should be scaled in order to ensure it is large enough to not be overwhelmed by extrinsic reward signals in the environment. Likewise it should not be too large to overwhelm the extrinsic reward signal.

Typical range: `0.001` - `0.01` | +| `rnd -> gamma` | (default = `0.99`) Discount factor for future rewards.

Typical range: `0.8` - `0.995` | +| `rnd -> network_settings` | Please see the documentation for `network_settings` under [Common Trainer Configurations](#common-trainer-configurations). The network specs for the RND model. | +| `curiosity -> learning_rate` | (default = `3e-4`) Learning rate used to update the RND module. This should be large enough for the RND module to quickly learn the state representation, but small enough to allow for stable learning.

Typical range: `1e-5` - `1e-3` + + +## Behavioral Cloning + +To enable Behavioral Cloning as a pre-training option (assuming you have +recorded demonstrations), provide the following configurations under the +`behavioral_cloning` section: + +| **Setting** | **Description** | +| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `demo_path` | (Required, no default) The path to your .demo file or directory of .demo files. | +| `strength` | (default = `1.0`) Learning rate of the imitation relative to the learning rate of PPO, and roughly corresponds to how strongly we allow BC to influence the policy.

Typical range: `0.1` - `0.5` | +| `steps` | (default = `0`) During BC, it is often desirable to stop using demonstrations after the agent has "seen" rewards, and allow it to optimize past the available demonstrations and/or generalize outside of the provided demonstrations. steps corresponds to the training steps over which BC is active. The learning rate of BC will anneal over the steps. Set the steps to 0 for constant imitation over the entire training run. | +| `batch_size` | (default = `batch_size` of trainer) Number of demonstration experiences used for one iteration of a gradient descent update. If not specified, it will default to the `batch_size` of the trainer.

Typical range: (Continuous): `512` - `5120`; (Discrete): `32` - `512` | +| `num_epoch` | (default = `num_epoch` of trainer) Number of passes through the experience buffer during gradient descent. If not specified, it will default to the number of epochs set for PPO.

Typical range: `3` - `10` | +| `samples_per_update` | (default = `0`) Maximum number of samples to use during each imitation update. You may want to lower this if your demonstration dataset is very large to avoid overfitting the policy on demonstrations. Set to 0 to train over all of the demonstrations at each update step.

Typical range: `buffer_size` + +## Memory-enhanced Agents using Recurrent Neural Networks + +You can enable your agents to use memory by adding a `memory` section under `network_settings`, +and setting `memory_size` and `sequence_length`: + +| **Setting** | **Description** | +| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `network_settings -> memory -> memory_size` | (default = `128`) Size of the memory an agent must keep. In order to use a LSTM, training requires a sequence of experiences instead of single experiences. Corresponds to the size of the array of floating point numbers used to store the hidden state of the recurrent neural network of the policy. This value must be a multiple of 2, and should scale with the amount of information you expect the agent will need to remember in order to successfully complete the task.

Typical range: `32` - `256` | +| `network_settings -> memory -> sequence_length` | (default = `64`) Defines how long the sequences of experiences must be while training. Note that if this number is too small, the agent will not be able to remember things over longer periods of time. If this number is too large, the neural network will take longer to train.

Typical range: `4` - `128` | + +A few considerations when deciding to use memory: + +- LSTM does not work well with continuous actions. Please use + discrete actions for better results. +- Adding a recurrent layer increases the complexity of the neural network, it is + recommended to decrease `num_layers` when using recurrent. +- It is required that `memory_size` be divisible by 2. + +## Self-Play + +Training with self-play adds additional confounding factors to the usual issues +faced by reinforcement learning. In general, the tradeoff is between the skill +level and generality of the final policy and the stability of learning. Training +against a set of slowly or unchanging adversaries with low diversity results in +a more stable learning process than training against a set of quickly changing +adversaries with high diversity. With this context, this guide discusses the +exposed self-play hyperparameters and intuitions for tuning them. + +If your environment contains multiple agents that are divided into teams, you +can leverage our self-play training option by providing these configurations for +each Behavior: + +| **Setting** | **Description** | +| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `save_steps` | (default = `20000`) Number of _trainer steps_ between snapshots. For example, if `save_steps=10000` then a snapshot of the current policy will be saved every `10000` trainer steps. Note, trainer steps are counted per agent. For more information, please see the [migration doc](Migrating.md) after v0.13.

A larger value of `save_steps` will yield a set of opponents that cover a wider range of skill levels and possibly play styles since the policy receives more training. As a result, the agent trains against a wider variety of opponents. Learning a policy to defeat more diverse opponents is a harder problem and so may require more overall training steps but also may lead to more general and robust policy at the end of training. This value is also dependent on how intrinsically difficult the environment is for the agent.

Typical range: `10000` - `100000` | +| `team_change` | (default = `5 * save_steps`) Number of _trainer_steps_ between switching the learning team. This is the number of trainer steps the teams associated with a specific ghost trainer will train before a different team becomes the new learning team. It is possible that, in asymmetric games, opposing teams require fewer trainer steps to make similar performance gains. This enables users to train a more complicated team of agents for more trainer steps than a simpler team of agents per team switch.

A larger value of `team-change` will allow the agent to train longer against it's opponents. The longer an agent trains against the same set of opponents the more able it will be to defeat them. However, training against them for too long may result in overfitting to the particular opponent strategies and so the agent may fail against the next batch of opponents.

The value of `team-change` will determine how many snapshots of the agent's policy are saved to be used as opponents for the other team. So, we recommend setting this value as a function of the `save_steps` parameter discussed previously.

Typical range: 4x-10x where x=`save_steps` | +| `swap_steps` | (default = `10000`) Number of _ghost steps_ (not trainer steps) between swapping the opponents policy with a different snapshot. A 'ghost step' refers to a step taken by an agent _that is following a fixed policy and not learning_. The reason for this distinction is that in asymmetric games, we may have teams with an unequal number of agents e.g. a 2v1 scenario like our Strikers Vs Goalie example environment. The team with two agents collects twice as many agent steps per environment step as the team with one agent. Thus, these two values will need to be distinct to ensure that the same number of trainer steps corresponds to the same number of opponent swaps for each team. The formula for `swap_steps` if a user desires `x` swaps of a team with `num_agents` agents against an opponent team with `num_opponent_agents` agents during `team-change` total steps is: `(num_agents / num_opponent_agents) * (team_change / x)`

Typical range: `10000` - `100000` | +| `play_against_latest_model_ratio` | (default = `0.5`) Probability an agent will play against the latest opponent policy. With probability 1 - `play_against_latest_model_ratio`, the agent will play against a snapshot of its opponent from a past iteration.

A larger value of `play_against_latest_model_ratio` indicates that an agent will be playing against the current opponent more often. Since the agent is updating it's policy, the opponent will be different from iteration to iteration. This can lead to an unstable learning environment, but poses the agent with an [auto-curricula](https://openai.com/blog/emergent-tool-use/) of more increasingly challenging situations which may lead to a stronger final policy.

Typical range: `0.0` - `1.0` | +| `window` | (default = `10`) Size of the sliding window of past snapshots from which the agent's opponents are sampled. For example, a `window` size of 5 will save the last 5 snapshots taken. Each time a new snapshot is taken, the oldest is discarded. A larger value of `window` means that an agent's pool of opponents will contain a larger diversity of behaviors since it will contain policies from earlier in the training run. Like in the `save_steps` hyperparameter, the agent trains against a wider variety of opponents. Learning a policy to defeat more diverse opponents is a harder problem and so may require more overall training steps but also may lead to more general and robust policy at the end of training.

Typical range: `5` - `30` | + +### Note on Reward Signals + +We make the assumption that the final reward in a trajectory corresponds to the +outcome of an episode. A final reward of +1 indicates winning, -1 indicates +losing and 0 indicates a draw. The ELO calculation (discussed below) depends on +this final reward being either +1, 0, -1. + +The reward signal should still be used as described in the documentation for the +other trainers. However, we encourage users to be a bit more conservative when +shaping reward functions due to the instability and non-stationarity of learning +in adversarial games. Specifically, we encourage users to begin with the +simplest possible reward function (+1 winning, -1 losing) and to allow for more +iterations of training to compensate for the sparsity of reward. + +### Note on Swap Steps + +As an example, in a 2v1 scenario, if we want the swap to occur x=4 times during +team-change=200000 steps, the swap_steps for the team of one agent is: + +swap_steps = (1 / 2) \* (200000 / 4) = 25000 The swap_steps for the team of two +agents is: + +swap_steps = (2 / 1) \* (200000 / 4) = 100000 Note, with equal team sizes, the +first term is equal to 1 and swap_steps can be calculated by just dividing the +total steps by the desired number of swaps. + +A larger value of swap_steps means that an agent will play against the same +fixed opponent for a longer number of training iterations. This results in a +more stable training scenario, but leaves the agent open to the risk of +overfitting it's behavior for this particular opponent. Thus, when a new +opponent is swapped, the agent may lose more often than expected. diff --git a/docs/Training-ML-Agents.md b/docs/Training-ML-Agents.md new file mode 100644 index 0000000000000000000000000000000000000000..2457963a96810c47feded2a15b3c619c9cf8158b --- /dev/null +++ b/docs/Training-ML-Agents.md @@ -0,0 +1,623 @@ +# Training ML-Agents + +**Table of Contents** + +- [Training ML-Agents](#training-ml-agents) + - [Training with mlagents-learn](#training-with-mlagents-learn) + - [Starting Training](#starting-training) + - [Observing Training](#observing-training) + - [Stopping and Resuming Training](#stopping-and-resuming-training) + - [Loading an Existing Model](#loading-an-existing-model) + - [Training Configurations](#training-configurations) + - [Adding CLI Arguments to the Training Configuration file](#adding-cli-arguments-to-the-training-configuration-file) + - [Environment settings](#environment-settings) + - [Engine settings](#engine-settings) + - [Checkpoint settings](#checkpoint-settings) + - [Torch settings:](#torch-settings) + - [Behavior Configurations](#behavior-configurations) + - [Default Behavior Settings](#default-behavior-settings) + - [Environment Parameters](#environment-parameters) + - [Environment Parameter Randomization](#environment-parameter-randomization) + - [Supported Sampler Types](#supported-sampler-types) + - [Training with Environment Parameter Randomization](#training-with-environment-parameter-randomization) + - [Curriculum](#curriculum) + - [Training with a Curriculum](#training-with-a-curriculum) + - [Training Using Concurrent Unity Instances](#training-using-concurrent-unity-instances) + +For a broad overview of reinforcement learning, imitation learning and all the +training scenarios, methods and options within the ML-Agents Toolkit, see +[ML-Agents Toolkit Overview](ML-Agents-Overview.md). + +Once your learning environment has been created and is ready for training, the +next step is to initiate a training run. Training in the ML-Agents Toolkit is +powered by a dedicated Python package, `mlagents`. This package exposes a +command `mlagents-learn` that is the single entry point for all training +workflows (e.g. reinforcement leaning, imitation learning, curriculum learning). +Its implementation can be found at +[ml-agents/mlagents/trainers/learn.py](../ml-agents/mlagents/trainers/learn.py). + +## Training with mlagents-learn + +### Starting Training + +`mlagents-learn` is the main training utility provided by the ML-Agents Toolkit. +It accepts a number of CLI options in addition to a YAML configuration file that +contains all the configurations and hyperparameters to be used during training. +The set of configurations and hyperparameters to include in this file depend on +the agents in your environment and the specific training method you wish to +utilize. Keep in mind that the hyperparameter values can have a big impact on +the training performance (i.e. your agent's ability to learn a policy that +solves the task). In this page, we will review all the hyperparameters for all +training methods and provide guidelines and advice on their values. + +To view a description of all the CLI options accepted by `mlagents-learn`, use +the `--help`: + +```sh +mlagents-learn --help +``` + +The basic command for training is: + +```sh +mlagents-learn --env= --run-id= +``` + +where + +- `` is the file path of the trainer configuration YAML. + This contains all the hyperparameter values. We offer a detailed guide on the + structure of this file and the meaning of the hyperparameters (and advice on + how to set them) in the dedicated + [Training Configurations](#training-configurations) section below. +- ``**(Optional)** is the name (including path) of your + [Unity executable](Learning-Environment-Executable.md) containing the agents + to be trained. If `` is not passed, the training will happen in the + Editor. Press the **Play** button in Unity when the message _"Start training + by pressing the Play button in the Unity Editor"_ is displayed on the screen. +- `` is a unique name you can use to identify the results of + your training runs. + +See the +[Getting Started Guide](Getting-Started.md#training-a-new-model-with-reinforcement-learning) +for a sample execution of the `mlagents-learn` command. + +#### Observing Training + +Regardless of which training methods, configurations or hyperparameters you +provide, the training process will always generate three artifacts, all found +in the `results/` folder: + +1. Summaries: these are training metrics that + are updated throughout the training process. They are helpful to monitor your + training performance and may help inform how to update your hyperparameter + values. See [Using TensorBoard](Using-Tensorboard.md) for more details on how + to visualize the training metrics. +1. Models: these contain the model checkpoints that + are updated throughout training and the final model file (`.onnx`). This final + model file is generated once either when training completes or is + interrupted. +1. Timers file (under `results//run_logs`): this contains aggregated + metrics on your training process, including time spent on specific code + blocks. See [Profiling in Python](Profiling-Python.md) for more information + on the timers generated. + +These artifacts are updated throughout the training +process and finalized when training is completed or is interrupted. + +#### Stopping and Resuming Training + +To interrupt training and save the current progress, hit `Ctrl+C` once and wait +for the model(s) to be saved out. + +To resume a previously interrupted or completed training run, use the `--resume` +flag and make sure to specify the previously used run ID. + +If you would like to re-run a previously interrupted or completed training run +and re-use the same run ID (in this case, overwriting the previously generated +artifacts), then use the `--force` flag. + +#### Loading an Existing Model + +You can also use this mode to run inference of an already-trained model in +Python by using both the `--resume` and `--inference` flags. Note that if you +want to run inference in Unity, you should use the +[Unity Inference Engine](Getting-Started.md#running-a-pre-trained-model). + +Additionally, if the network architecture changes, you may still load an existing model, +but ML-Agents will only load the parts of the model it can load and ignore all others. For instance, +if you add a new reward signal, the existing model will load but the new reward signal +will be initialized from scratch. If you have a model with a visual encoder (CNN) but +change the `hidden_units`, the CNN will be loaded but the body of the network will be +initialized from scratch. + +Alternatively, you might want to start a new training run but _initialize_ it +using an already-trained model. You may want to do this, for instance, if your +environment changed and you want a new model, but the old behavior is still +better than random. You can do this by specifying +`--initialize-from=`, where `` is the old run +ID. + +## Training Configurations + +The Unity ML-Agents Toolkit provides a wide range of training scenarios, methods +and options. As such, specific training runs may require different training +configurations and may generate different artifacts and TensorBoard statistics. +This section offers a detailed guide into how to manage the different training +set-ups withing the toolkit. + +More specifically, this section offers a detailed guide on the command-line +flags for `mlagents-learn` that control the training configurations: + +- ``: defines the training hyperparameters for each + Behavior in the scene, and the set-ups for the environment parameters + (Curriculum Learning and Environment Parameter Randomization) + +It is important to highlight that successfully training a Behavior in the +ML-Agents Toolkit involves tuning the training hyperparameters and +configuration. This guide contains some best practices for tuning the training +process when the default parameters don't seem to be giving the level of +performance you would like. We provide sample configuration files for our +example environments in the [config/](../config/) directory. The +`config/ppo/3DBall.yaml` was used to train the 3D Balance Ball in the +[Getting Started](Getting-Started.md) guide. That configuration file uses the +PPO trainer, but we also have configuration files for SAC and GAIL. + +Additionally, the set of configurations you provide depend on the training +functionalities you use (see [ML-Agents Toolkit Overview](ML-Agents-Overview.md) +for a description of all the training functionalities). Each functionality you +add typically has its own training configurations. For instance: + +- Use PPO or SAC? +- Use Recurrent Neural Networks for adding memory to your agents? +- Use the intrinsic curiosity module? +- Ignore the environment reward signal? +- Pre-train using behavioral cloning? (Assuming you have recorded + demonstrations.) +- Include the GAIL intrinsic reward signals? (Assuming you have recorded + demonstrations.) +- Use self-play? (Assuming your environment includes multiple agents.) + +The trainer config file, ``, determines the features you will +use during training, and the answers to the above questions will dictate its contents. +The rest of this guide breaks down the different sub-sections of the trainer config file +and explains the possible settings for each. If you need a list of all the trainer +configurations, please see [Training Configuration File](Training-Configuration-File.md). + +**NOTE:** The configuration file format has been changed between 0.17.0 and 0.18.0 and +between 0.18.0 and onwards. To convert +an old set of configuration files (trainer config, curriculum, and sampler files) to the new +format, a script has been provided. Run `python -m mlagents.trainers.upgrade_config -h` in your +console to see the script's usage. + +### Adding CLI Arguments to the Training Configuration file + +Additionally, within the training configuration YAML file, you can also add the +CLI arguments (such as `--num-envs`). + +Reminder that a detailed description of all the CLI arguments can be found by +using the help utility: + +```sh +mlagents-learn --help +``` + +These additional CLI arguments are grouped into environment, engine, checkpoint and torch. +The available settings and example values are shown below. + +#### Environment settings + +```yaml +env_settings: + env_path: FoodCollector + env_args: null + base_port: 5005 + num_envs: 1 + seed: -1 + max_lifetime_restarts: 10 + restarts_rate_limit_n: 1 + restarts_rate_limit_period_s: 60 +``` + +#### Engine settings + +```yaml +engine_settings: + width: 84 + height: 84 + quality_level: 5 + time_scale: 20 + target_frame_rate: -1 + capture_frame_rate: 60 + no_graphics: false +``` + +#### Checkpoint settings + +```yaml +checkpoint_settings: + run_id: foodtorch + initialize_from: null + load_model: false + resume: false + force: true + train_model: false + inference: false +``` + +#### Torch settings: + +```yaml +torch_settings: + device: cpu +``` + +### Behavior Configurations + +The primary section of the trainer config file is a +set of configurations for each Behavior in your scene. These are defined under +the sub-section `behaviors` in your trainer config file. Some of the +configurations are required while others are optional. To help us get started, +below is a sample file that includes all the possible settings if we're using a +PPO trainer with all the possible training functionalities enabled (memory, +behavioral cloning, curiosity, GAIL and self-play). You will notice that +curriculum and environment parameter randomization settings are not part of the `behaviors` +configuration, but in their own section called `environment_parameters`. + +```yaml +behaviors: + BehaviorPPO: + trainer_type: ppo + + hyperparameters: + # Hyperparameters common to PPO and SAC + batch_size: 1024 + buffer_size: 10240 + learning_rate: 3.0e-4 + learning_rate_schedule: linear + + # PPO-specific hyperparameters + beta: 5.0e-3 + beta_schedule: constant + epsilon: 0.2 + epsilon_schedule: linear + lambd: 0.95 + num_epoch: 3 + shared_critic: False + + # Configuration of the neural network (common to PPO/SAC) + network_settings: + vis_encode_type: simple + normalize: false + hidden_units: 128 + num_layers: 2 + # memory + memory: + sequence_length: 64 + memory_size: 256 + + # Trainer configurations common to all trainers + max_steps: 5.0e5 + time_horizon: 64 + summary_freq: 10000 + keep_checkpoints: 5 + checkpoint_interval: 50000 + threaded: false + init_path: null + + # behavior cloning + behavioral_cloning: + demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo + strength: 0.5 + steps: 150000 + batch_size: 512 + num_epoch: 3 + samples_per_update: 0 + + reward_signals: + # environment reward (default) + extrinsic: + strength: 1.0 + gamma: 0.99 + + # curiosity module + curiosity: + strength: 0.02 + gamma: 0.99 + encoding_size: 256 + learning_rate: 3.0e-4 + + # GAIL + gail: + strength: 0.01 + gamma: 0.99 + encoding_size: 128 + demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo + learning_rate: 3.0e-4 + use_actions: false + use_vail: false + + # self-play + self_play: + window: 10 + play_against_latest_model_ratio: 0.5 + save_steps: 50000 + swap_steps: 2000 + team_change: 100000 +``` + +Here is an equivalent file if we use an SAC trainer instead. Notice that the +configurations for the additional functionalities (memory, behavioral cloning, +curiosity and self-play) remain unchanged. + +```yaml +behaviors: + BehaviorSAC: + trainer_type: sac + + # Trainer configs common to PPO/SAC (excluding reward signals) + # same as PPO config + + # SAC-specific configs (replaces the hyperparameters section above) + hyperparameters: + # Hyperparameters common to PPO and SAC + # Same as PPO config + + # SAC-specific hyperparameters + # Replaces the "PPO-specific hyperparameters" section above + buffer_init_steps: 0 + tau: 0.005 + steps_per_update: 10.0 + save_replay_buffer: false + init_entcoef: 0.5 + reward_signal_steps_per_update: 10.0 + + # Configuration of the neural network (common to PPO/SAC) + network_settings: + # Same as PPO config + + # Trainer configurations common to all trainers + # + + # pre-training using behavior cloning + behavioral_cloning: + # same as PPO config + + reward_signals: + # environment reward + extrinsic: + # same as PPO config + + # curiosity module + curiosity: + # same as PPO config + + # GAIL + gail: + # same as PPO config + + # self-play + self_play: + # same as PPO config +``` + +We now break apart the components of the configuration file and describe what +each of these parameters mean and provide guidelines on how to set them. See +[Training Configuration File](Training-Configuration-File.md) for a detailed +description of all the configurations listed above, along with their defaults. +Unless otherwise specified, omitting a configuration will revert it to its default. + +### Default Behavior Settings + +In some cases, you may want to specify a set of default configurations for your Behaviors. +This may be useful, for instance, if your Behavior names are generated procedurally by +the environment and not known before runtime, or if you have many Behaviors with very similar +settings. To specify a default configuraton, insert a `default_settings` section in your YAML. +This section should be formatted exactly like a configuration for a Behavior. + +```yaml +default_settings: + # < Same as Behavior configuration > +behaviors: + # < Same as above > +``` + +Behaviors found in the environment that aren't specified in the YAML will now use the `default_settings`, +and unspecified settings in behavior configurations will default to the values in `default_settings` if +specified there. + +### Environment Parameters + +In order to control the `EnvironmentParameters` in the Unity simulation during training, +you need to add a section called `environment_parameters`. For example you can set the +value of an `EnvironmentParameter` called `my_environment_parameter` to `3.0` with +the following code : + +```yml +behaviors: + BehaviorY: + # < Same as above > + +# Add this section +environment_parameters: + my_environment_parameter: 3.0 +``` + +Inside the Unity simulation, you can access your Environment Parameters by doing : + +```csharp +Academy.Instance.EnvironmentParameters.GetWithDefault("my_environment_parameter", 0.0f); +``` + +#### Environment Parameter Randomization + +To enable environment parameter randomization, you need to edit the `environment_parameters` +section of your training configuration yaml file. Instead of providing a single float value +for your environment parameter, you can specify a sampler instead. Here is an example with +three environment parameters called `mass`, `length` and `scale`: + +```yml +behaviors: + BehaviorY: + # < Same as above > + +# Add this section +environment_parameters: + mass: + sampler_type: uniform + sampler_parameters: + min_value: 0.5 + max_value: 10 + + length: + sampler_type: multirangeuniform + sampler_parameters: + intervals: [[7, 10], [15, 20]] + + scale: + sampler_type: gaussian + sampler_parameters: + mean: 2 + st_dev: .3 +``` + + +| **Setting** | **Description** | +| :--------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sampler_type` | A string identifier for the type of sampler to use for this `Environment Parameter`. | +| `sampler_parameters` | The parameters for a given `sampler_type`. Samplers of different types can have different `sampler_parameters` | + +##### Supported Sampler Types + +Below is a list of the `sampler_type` values supported by the toolkit. + +- `uniform` - Uniform sampler + - Uniformly samples a single float value from a range with a given minimum + and maximum value (inclusive). + - **parameters** - `min_value`, `max_value` +- `gaussian` - Gaussian sampler + - Samples a single float value from a normal distribution with a given mean + and standard deviation. + - **parameters** - `mean`, `st_dev` +- `multirange_uniform` - Multirange uniform sampler + - First, samples an interval from a set of intervals in proportion to relative + length of the intervals. Then, uniformly samples a single float value from the + sampled interval (inclusive). This sampler can take an arbitrary number of + intervals in a list in the following format: + [[`interval_1_min`, `interval_1_max`], [`interval_2_min`, + `interval_2_max`], ...] + - **parameters** - `intervals` + +The implementation of the samplers can be found in the +[Samplers.cs file](https://github.com/Unity-Technologies/ml-agents/blob/main/com.unity.ml-agents/Runtime/Sampler.cs). + +##### Training with Environment Parameter Randomization + +After the sampler configuration is defined, we proceed by launching `mlagents-learn` +and specify trainer configuration with parameter randomization enabled. For example, +if we wanted to train the 3D ball agent with parameter randomization, we would run + +```sh +mlagents-learn config/ppo/3DBall_randomize.yaml --run-id=3D-Ball-randomize +``` + +We can observe progress and metrics via TensorBoard. + +#### Curriculum + +To enable curriculum learning, you need to add a `curriculum` sub-section to your environment +parameter. Here is one example with the environment parameter `my_environment_parameter` : + +```yml +behaviors: + BehaviorY: + # < Same as above > + +# Add this section +environment_parameters: + my_environment_parameter: + curriculum: + - name: MyFirstLesson # The '-' is important as this is a list + completion_criteria: + measure: progress + behavior: my_behavior + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.2 + value: 0.0 + - name: MySecondLesson # This is the start of the second lesson + completion_criteria: + measure: progress + behavior: my_behavior + signal_smoothing: true + min_lesson_length: 100 + threshold: 0.6 + require_reset: true + value: + sampler_type: uniform + sampler_parameters: + min_value: 4.0 + max_value: 7.0 + - name: MyLastLesson + value: 8.0 +``` + +Note that this curriculum __only__ applies to `my_environment_parameter`. The `curriculum` section +contains a list of `Lessons`. In the example, the lessons are named `MyFirstLesson`, `MySecondLesson` +and `MyLastLesson`. +Each `Lesson` has 3 fields : + + - `name` which is a user defined name for the lesson (The name of the lesson will be displayed in + the console when the lesson changes) + - `completion_criteria` which determines what needs to happen in the simulation before the lesson + can be considered complete. When that condition is met, the curriculum moves on to the next + `Lesson`. Note that you do not need to specify a `completion_criteria` for the last `Lesson` + - `value` which is the value the environment parameter will take during the lesson. Note that this + can be a float or a sampler. + + There are the different settings of the `completion_criteria` : + + +| **Setting** | **Description** | +| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `measure` | What to measure learning progress, and advancement in lessons by.

`reward` uses a measure of received reward, `progress` uses the ratio of steps/max_steps, while `Elo` is available only for self-play situations and uses Elo score as a curriculum completion measure. | +| `behavior` | Specifies which behavior is being tracked. There can be multiple behaviors with different names, each at different points of training. This setting allows the curriculum to track only one of them. | +| `threshold` | Determines at what point in value of `measure` the lesson should be increased. | +| `min_lesson_length` | The minimum number of episodes that should be completed before the lesson can change. If `measure` is set to `reward`, the average cumulative reward of the last `min_lesson_length` episodes will be used to determine if the lesson should change. Must be nonnegative.

**Important**: the average reward that is compared to the thresholds is different than the mean reward that is logged to the console. For example, if `min_lesson_length` is `100`, the lesson will increment after the average cumulative reward of the last `100` episodes exceeds the current threshold. The mean reward logged to the console is dictated by the `summary_freq` parameter defined above. | +| `signal_smoothing` | Whether to weight the current progress measure by previous values. | +| `require_reset` | Whether changing lesson requires the environment to reset (default: false) | +##### Training with a Curriculum + +Once we have specified our metacurriculum and curricula, we can launch +`mlagents-learn` to point to the config file containing +our curricula and PPO will train using Curriculum Learning. For example, to +train agents in the Wall Jump environment with curriculum learning, we can run: + +```sh +mlagents-learn config/ppo/WallJump_curriculum.yaml --run-id=wall-jump-curriculum +``` + +We can then keep track of the current lessons and progresses via TensorBoard. If you've terminated +the run, you can resume it using `--resume` and lesson progress will start off where it +ended. + + +### Training Using Concurrent Unity Instances + +In order to run concurrent Unity instances during training, set the number of +environment instances using the command line option `--num-envs=` when you +invoke `mlagents-learn`. Optionally, you can also set the `--base-port`, which +is the starting port used for the concurrent Unity instances. + +Some considerations: + +- **Buffer Size** - If you are having trouble getting an agent to train, even + with multiple concurrent Unity instances, you could increase `buffer_size` in + the trainer config file. A common practice is to multiply + `buffer_size` by `num-envs`. +- **Resource Constraints** - Invoking concurrent Unity instances is constrained + by the resources on the machine. Please use discretion when setting + `--num-envs=`. +- **Result Variation Using Concurrent Unity Instances** - If you keep all the + hyperparameters the same, but change `--num-envs=`, the results and model + would likely change. diff --git a/docs/Training-Plugins.md b/docs/Training-Plugins.md new file mode 100644 index 0000000000000000000000000000000000000000..24ba45d6a8d42b5d548444e4488329edebe3485a --- /dev/null +++ b/docs/Training-Plugins.md @@ -0,0 +1,59 @@ +# Customizing Training via Plugins + +ML-Agents provides support for running your own python implementations of specific interfaces during the training +process. These interfaces are currently fairly limited, but will be expanded in the future. + +**Note:** Plugin interfaces should currently be considered "in beta", and they may change in future releases. + +## How to Write Your Own Plugin +[This video](https://www.youtube.com/watch?v=fY3Y_xPKWNA) explains the basics of how to create a plugin system using +setuptools, and is the same approach that ML-Agents' plugin system is based on. + +The `ml-agents-plugin-examples` directory contains a reference implementation of each plugin interface, so it's a good +starting point. + +### setup.py +If you don't already have a `setup.py` file for your python code, you'll need to add one. `ml-agents-plugin-examples` +has a [minimal example](../ml-agents-plugin-examples/setup.py) of this. + +In the call to `setup()`, you'll need to add to the `entry_points` dictionary for each plugin interface that you +implement. The form of this is `{entry point name}={plugin module}:{plugin function}`. For example, in + `ml-agents-plugin-examples`: +```python +entry_points={ + ML_AGENTS_STATS_WRITER: [ + "example=mlagents_plugin_examples.example_stats_writer:get_example_stats_writer" + ] +} +``` +* `ML_AGENTS_STATS_WRITER` (which is a string constant, `mlagents.stats_writer`) is the name of the plugin interface. +This must be one of the provided interfaces ([see below](#plugin-interfaces)). +* `example` is the plugin implementation name. This can be anything. +* `mlagents_plugin_examples.example_stats_writer` is the plugin module. This points to the module where the +plugin registration function is defined. +* `get_example_stats_writer` is the plugin registration function. This is called when running `mlagents-learn`. The +arguments and expected return type for this are different for each plugin interface. + +### Local Installation +Once you've defined `entry_points` in your `setup.py`, you will need to run +``` +pip install -e [path to your plugin code] +``` +in the same python virtual environment that you have `mlagents` installed. + +## Plugin Interfaces + +### StatsWriter +The StatsWriter class receives various information from the training process, such as the average Agent reward in +each summary period. By default, we log this information to the console and write it to +[TensorBoard](Using-Tensorboard.md). + +#### Interface +The `StatsWriter.write_stats()` method must be implemented in any derived classes. It takes a "category" parameter, +which typically is the behavior name of the Agents being trained, and a dictionary of `StatSummary` values with +string keys. Additionally, `StatsWriter.on_add_stat()` may be extended to register a callback handler for each stat +emission. + +#### Registration +The `StatsWriter` registration function takes a `RunOptions` argument and returns a list of `StatsWriter`s. An +example implementation is provided in [`mlagents_plugin_examples`](../ml-agents-plugin-examples/mlagents_plugin_examples/example_stats_writer.py) diff --git a/docs/Training-on-Amazon-Web-Service.md b/docs/Training-on-Amazon-Web-Service.md new file mode 100644 index 0000000000000000000000000000000000000000..f220a5eec64be93520a8363a1fbac8eb71daa1a5 --- /dev/null +++ b/docs/Training-on-Amazon-Web-Service.md @@ -0,0 +1,328 @@ +# Training on Amazon Web Service + +:warning: **Note:** We no longer use this guide ourselves and so it may not work +correctly. We've decided to keep it up just in case it is helpful to you. + +This page contains instructions for setting up an EC2 instance on Amazon Web +Service for training ML-Agents environments. + +## Pre-configured AMI + +We've prepared a pre-configured AMI for you with the ID: `ami-016ff5559334f8619` +in the `us-east-1` region. It was created as a modification of +[Deep Learning AMI (Ubuntu)](https://aws.amazon.com/marketplace/pp/B077GCH38C). +The AMI has been tested with p2.xlarge instance. Furthermore, if you want to +train without headless mode, you need to enable X Server. + +After launching your EC2 instance using the ami and ssh into it, run the +following commands to enable it: + +```sh +# Start the X Server, press Enter to come to the command line +$ sudo /usr/bin/X :0 & + +# Check if Xorg process is running +# You will have a list of processes running on the GPU, Xorg should be in the +# list, as shown below +$ nvidia-smi + +# Thu Jun 14 20:27:26 2018 +# +-----------------------------------------------------------------------------+ +# | NVIDIA-SMI 390.67 Driver Version: 390.67 | +# |-------------------------------+----------------------+----------------------+ +# | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | +# | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | +# |===============================+======================+======================| +# | 0 Tesla K80 On | 00000000:00:1E.0 Off | 0 | +# | N/A 35C P8 31W / 149W | 9MiB / 11441MiB | 0% Default | +# +-------------------------------+----------------------+----------------------+ +# +# +-----------------------------------------------------------------------------+ +# | Processes: GPU Memory | +# | GPU PID Type Process name Usage | +# |=============================================================================| +# | 0 2331 G /usr/lib/xorg/Xorg 8MiB | +# +-----------------------------------------------------------------------------+ + +# Make the ubuntu use X Server for display +$ export DISPLAY=:0 +``` + +## Configuring your own instance + +You could also choose to configure your own instance. To begin with, you will +need an EC2 instance which contains the latest Nvidia drivers, CUDA9, and cuDNN. +In this tutorial we used the +[Deep Learning AMI (Ubuntu)](https://aws.amazon.com/marketplace/pp/B077GCH38C) +listed under AWS Marketplace with a p2.xlarge instance. + +### Installing the ML-Agents Toolkit on the instance + +After launching your EC2 instance using the ami and ssh into it: + +1. Activate the python3 environment + + ```sh + source activate python3 + ``` + +2. Clone the ML-Agents repo and install the required Python packages + + ```sh + git clone --branch release_20 https://github.com/Unity-Technologies/ml-agents.git + cd ml-agents/ml-agents/ + pip3 install -e . + ``` + +### Setting up X Server (optional) + +X Server setup is only necessary if you want to do training that requires visual +observation input. _Instructions here are adapted from this +[Medium post](https://medium.com/towards-data-science/how-to-run-unity-on-amazon-cloud-or-without-monitor-3c10ce022639) +on running general Unity applications in the cloud._ + +Current limitations of the Unity Engine require that a screen be available to +render to when using visual observations. In order to make this possible when +training on a remote server, a virtual screen is required. We can do this by +installing Xorg and creating a virtual screen. Once installed and created, we +can display the Unity environment in the virtual environment, and train as we +would on a local machine. Ensure that `headless` mode is disabled when building +linux executables which use visual observations. + +#### Install and setup Xorg: + + ```sh + # Install Xorg + $ sudo apt-get update + $ sudo apt-get install -y xserver-xorg mesa-utils + $ sudo nvidia-xconfig -a --use-display-device=None --virtual=1280x1024 + + # Get the BusID information + $ nvidia-xconfig --query-gpu-info + + # Add the BusID information to your /etc/X11/xorg.conf file + $ sudo sed -i 's/ BoardName "Tesla K80"/ BoardName "Tesla K80"\n BusID "0:30:0"/g' /etc/X11/xorg.conf + + # Remove the Section "Files" from the /etc/X11/xorg.conf file + # And remove two lines that contain Section "Files" and EndSection + $ sudo vim /etc/X11/xorg.conf + ``` + +#### Update and setup Nvidia driver: + + ```sh + # Download and install the latest Nvidia driver for ubuntu + # Please refer to http://download.nvidia.com/XFree86/Linux-#x86_64/latest.txt + $ wget http://download.nvidia.com/XFree86/Linux-x86_64/390.87/NVIDIA-Linux-x86_64-390.87.run + $ sudo /bin/bash ./NVIDIA-Linux-x86_64-390.87.run --accept-license --no-questions --ui=none + + # Disable Nouveau as it will clash with the Nvidia driver + $ sudo echo 'blacklist nouveau' | sudo tee -a /etc/modprobe.d/blacklist.conf + $ sudo echo 'options nouveau modeset=0' | sudo tee -a /etc/modprobe.d/blacklist.conf + $ sudo echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf + $ sudo update-initramfs -u + ``` + +#### Restart the EC2 instance: + + ```sh + sudo reboot now + ``` + +#### Make sure there are no Xorg processes running: + +```sh +# Kill any possible running Xorg processes +# Note that you might have to run this command multiple times depending on +# how Xorg is configured. +$ sudo killall Xorg + +# Check if there is any Xorg process left +# You will have a list of processes running on the GPU, Xorg should not be in +# the list, as shown below. +$ nvidia-smi + +# Thu Jun 14 20:21:11 2018 +# +-----------------------------------------------------------------------------+ +# | NVIDIA-SMI 390.67 Driver Version: 390.67 | +# |-------------------------------+----------------------+----------------------+ +# | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | +# | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | +# |===============================+======================+======================| +# | 0 Tesla K80 On | 00000000:00:1E.0 Off | 0 | +# | N/A 37C P8 31W / 149W | 0MiB / 11441MiB | 0% Default | +# +-------------------------------+----------------------+----------------------+ +# +# +-----------------------------------------------------------------------------+ +# | Processes: GPU Memory | +# | GPU PID Type Process name Usage | +# |=============================================================================| +# | No running processes found | +# +-----------------------------------------------------------------------------+ + +``` + +#### Start X Server and make the ubuntu use X Server for display: + + ```console + # Start the X Server, press Enter to come back to the command line + $ sudo /usr/bin/X :0 & + + # Check if Xorg process is running + # You will have a list of processes running on the GPU, Xorg should be in the list. + $ nvidia-smi + + # Make the ubuntu use X Server for display + $ export DISPLAY=:0 + ``` + +#### Ensure the Xorg is correctly configured: + + ```sh + # For more information on glxgears, see ftp://www.x.org/pub/X11R6.8.1/doc/glxgears.1.html. + $ glxgears + # If Xorg is configured correctly, you should see the following message + + # Running synchronized to the vertical refresh. The framerate should be + # approximately the same as the monitor refresh rate. + # 137296 frames in 5.0 seconds = 27459.053 FPS + # 141674 frames in 5.0 seconds = 28334.779 FPS + # 141490 frames in 5.0 seconds = 28297.875 FPS + + ``` + +## Training on EC2 instance + +1. In the Unity Editor, load a project containing an ML-Agents environment (you + can use one of the example environments if you have not created your own). +2. Open the Build Settings window (menu: File > Build Settings). +3. Select Linux as the Target Platform, and x86_64 as the target architecture + (the default x86 currently does not work). +4. Check Headless Mode if you have not setup the X Server. (If you do not use + Headless Mode, you have to setup the X Server to enable training.) +5. Click Build to build the Unity environment executable. +6. Upload the executable to your EC2 instance within `ml-agents` folder. +7. Change the permissions of the executable. + + ```sh + chmod +x .x86_64 + ``` + +8. (Without Headless Mode) Start X Server and use it for display: + + ```sh + # Start the X Server, press Enter to come back to the command line + $ sudo /usr/bin/X :0 & + + # Check if Xorg process is running + # You will have a list of processes running on the GPU, Xorg should be in the list. + $ nvidia-smi + + # Make the ubuntu use X Server for display + $ export DISPLAY=:0 + ``` + +9. Test the instance setup from Python using: + + ```python + from mlagents_envs.environment import UnityEnvironment + + env = UnityEnvironment() + ``` + + Where `` corresponds to the path to your environment executable. + + You should receive a message confirming that the environment was loaded + successfully. + +10. Train your models + + ```console + mlagents-learn --env= --train + ``` + +## FAQ + +### The \_Data folder hasn't been copied cover + +If you've built your Linux executable, but forget to copy over the corresponding +\_Data folder, you will see error message like the following: + +```sh +Set current directory to /home/ubuntu/ml-agents/ml-agents +Found path: /home/ubuntu/ml-agents/ml-agents/3dball_linux.x86_64 +no boot config - using default values + +(Filename: Line: 403) + +There is no data folder +``` + +### Unity Environment not responding + +If you didn't setup X Server or hasn't launched it properly, or your environment +somehow crashes, or you haven't `chmod +x` your Unity Environment, all of these +will cause connection between Unity and Python to fail. Then you will see +something like this: + +```console +Logging to /home/ubuntu/.config/unity3d//Player.log +Traceback (most recent call last): + File "", line 1, in + File "/home/ubuntu/ml-agents/ml-agents/mlagents_envs/environment.py", line 63, in __init__ + aca_params = self.send_academy_parameters(rl_init_parameters_in) + File "/home/ubuntu/ml-agents/ml-agents/mlagents_envs/environment.py", line 489, in send_academy_parameters + return self.communicator.initialize(inputs).rl_initialization_output + File "/home/ubuntu/ml-agents/ml-agents/mlagents_envs/rpc_communicator.py", line 60, in initialize +mlagents_envs.exception.UnityTimeOutException: The Unity environment took too long to respond. Make sure that : + The environment does not need user interaction to launch + The environment and the Python interface have compatible versions. +``` + +It would be also really helpful to check your +/home/ubuntu/.config/unity3d//Player.log to see what happens with +your Unity environment. + +### Could not launch X Server + +When you execute: + +```sh +sudo /usr/bin/X :0 & +``` + +You might see something like: + +```sh +X.Org X Server 1.18.4 +... +(==) Log file: "/var/log/Xorg.0.log", Time: Thu Oct 11 21:10:38 2018 +(==) Using config file: "/etc/X11/xorg.conf" +(==) Using system config directory "/usr/share/X11/xorg.conf.d" +(EE) +Fatal server error: +(EE) no screens found(EE) +(EE) +Please consult the X.Org Foundation support + at http://wiki.x.org + for help. +(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information. +(EE) +(EE) Server terminated with error (1). Closing log file. +``` + +And when you execute: + +```sh +nvidia-smi +``` + +You might see something like: + +```sh +NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. +``` + +This means the NVIDIA's driver needs to be updated. Refer to +[this section](Training-on-Amazon-Web-Service.md#update-and-setup-nvidia-driver) +for more information. diff --git a/docs/Training-on-Microsoft-Azure.md b/docs/Training-on-Microsoft-Azure.md new file mode 100644 index 0000000000000000000000000000000000000000..6e5fff8d77bca456fd1f35cbc2a9abdcbc7f95fc --- /dev/null +++ b/docs/Training-on-Microsoft-Azure.md @@ -0,0 +1,210 @@ +# Training on Microsoft Azure (works with ML-Agents Toolkit v0.3) + +:warning: **Note:** We no longer use this guide ourselves and so it may not work +correctly. We've decided to keep it up just in case it is helpful to you. + +This page contains instructions for setting up training on Microsoft Azure +through either +[Azure Container Instances](https://azure.microsoft.com/services/container-instances/) +or Virtual Machines. Non "headless" training has not yet been tested to verify +support. + +## Pre-Configured Azure Virtual Machine + +A pre-configured virtual machine image is available in the Azure Marketplace and +is nearly completely ready for training. You can start by deploying the +[Data Science Virtual Machine for Linux (Ubuntu)](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoft-dsvm.ubuntu-1804) +into your Azure subscription. + +Note that, if you choose to deploy the image to an +[N-Series GPU optimized VM](https://docs.microsoft.com/azure/virtual-machines/linux/sizes-gpu), +training will, by default, run on the GPU. If you choose any other type of VM, +training will run on the CPU. + +## Configuring your own Instance + +Setting up your own instance requires a number of package installations. Please +view the documentation for doing so [here](#custom-instances). + +## Installing ML-Agents + +1. [Move](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/copy-files-to-linux-vm-using-scp) + the `ml-agents` sub-folder of this ml-agents repo to the remote Azure + instance, and set it as the working directory. +2. Install the required packages: + Torch: `pip3 install torch==1.7.0 -f https://download.pytorch.org/whl/torch_stable.html` and + MLAgents: `python -m pip install mlagents==0.30.0` + +## Testing + +To verify that all steps worked correctly: + +1. In the Unity Editor, load a project containing an ML-Agents environment (you + can use one of the example environments if you have not created your own). +2. Open the Build Settings window (menu: File > Build Settings). +3. Select Linux as the Target Platform, and x86_64 as the target architecture. +4. Check Headless Mode. +5. Click Build to build the Unity environment executable. +6. Upload the resulting files to your Azure instance. +7. Test the instance setup from Python using: + +```python +from mlagents_envs.environment import UnityEnvironment + +env = UnityEnvironment(file_name="", seed=1, side_channels=[]) +``` + +Where `` corresponds to the path to your environment executable (i.e. `/home/UserName/Build/yourFile`). + +You should receive a message confirming that the environment was loaded +successfully. + +**Note:** When running your environment in headless mode, you must append `--no-graphics` to your mlagents-learn command, as it won't train otherwise. +You can test this simply by aborting a training and check if it says "Model Saved" or "Aborted", or see if it generated the .onnx in the result folder. + +## Running Training on your Virtual Machine + +To run your training on the VM: + +1. [Move](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/copy-files-to-linux-vm-using-scp) + your built Unity application to your Virtual Machine. +2. Set the directory where the ML-Agents Toolkit was installed to your working + directory. +3. Run the following command: + +```sh +mlagents-learn --env= --run-id= --train +``` + +Where `` is the path to your app (i.e. +`~/unity-volume/3DBallHeadless`) and `` is an identifier you would like +to identify your training run with. + +If you've selected to run on a N-Series VM with GPU support, you can verify that +the GPU is being used by running `nvidia-smi` from the command line. + +## Monitoring your Training Run with TensorBoard + +Once you have started training, you can +[use TensorBoard to observe the training](Using-Tensorboard.md). + +1. Start by + [opening the appropriate port for web traffic to connect to your VM](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/nsg-quickstart-portal). + + - Note that you don't need to generate a new `Network Security Group` but + instead, go to the **Networking** tab under **Settings** for your VM. + - As an example, you could use the following settings to open the Port with + the following Inbound Rule settings: + - Source: Any + - Source Port Ranges: \* + - Destination: Any + - Destination Port Ranges: 6006 + - Protocol: Any + - Action: Allow + - Priority: (Leave as default) + +2. Unless you started the training as a background process, connect to your VM + from another terminal instance. +3. Run the following command from your terminal + `tensorboard --logdir results --host 0.0.0.0` +4. You should now be able to open a browser and navigate to + `:6060` to view the TensorBoard report. + +## Running on Azure Container Instances + +[Azure Container Instances](https://azure.microsoft.com/services/container-instances/) +allow you to spin up a container, on demand, that will run your training and +then be shut down. This ensures you aren't leaving a billable VM running when it +isn't needed. Using ACI enables you to offload training of your models without +needing to install Python and TensorFlow on your own computer. + +## Custom Instances + +This page contains instructions for setting up a custom Virtual Machine on +Microsoft Azure so you can running ML-Agents training in the cloud. + +1. Start by + [deploying an Azure VM](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-portal) + with Ubuntu Linux (tests were done with 16.04 LTS). To use GPU support, use a + N-Series VM. +2. SSH into your VM. +3. Start with the following commands to install the Nvidia driver: + + ```sh + wget http://us.download.nvidia.com/tesla/375.66/nvidia-diag-driver-local-repo-ubuntu1604_375.66-1_amd64.deb + + sudo dpkg -i nvidia-diag-driver-local-repo-ubuntu1604_375.66-1_amd64.deb + + sudo apt-get update + + sudo apt-get install cuda-drivers + + sudo reboot + ``` + +4. After a minute you should be able to reconnect to your VM and install the + CUDA toolkit: + + ```sh + wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb + + sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb + + sudo apt-get update + + sudo apt-get install cuda-8-0 + ``` + +5. You'll next need to download cuDNN from the Nvidia developer site. This + requires a registered account. + +6. Navigate to [http://developer.nvidia.com](http://developer.nvidia.com) and + create an account and verify it. + +7. Download (to your own computer) cuDNN from + [this url](https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/Ubuntu16_04_x64/libcudnn6_6.0.20-1+cuda8.0_amd64-deb). + +8. Copy the deb package to your VM: + + ```sh + scp libcudnn6_6.0.21-1+cuda8.0_amd64.deb @:libcudnn6_6.0.21-1+cuda8.0_amd64.deb + ``` + +9. SSH back to your VM and execute the following: + + ```console + sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb + + export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH + . ~/.profile + + sudo reboot + ``` + +10. After a minute, you should be able to SSH back into your VM. After doing so, + run the following: + + ```sh + sudo apt install python-pip + sudo apt install python3-pip + ``` + +11. At this point, you need to install TensorFlow. The version you install + should be tied to if you are using GPU to train: + + ```sh + pip3 install tensorflow-gpu==1.4.0 keras==2.0.6 + ``` + + Or CPU to train: + + ```sh + pip3 install tensorflow==1.4.0 keras==2.0.6 + ``` + +12. You'll then need to install additional dependencies: + + ```sh + pip3 install pillow + pip3 install numpy + ``` diff --git a/docs/Tutorial-Custom-Trainer-Plugin.md b/docs/Tutorial-Custom-Trainer-Plugin.md new file mode 100644 index 0000000000000000000000000000000000000000..986030611f10b9d110e3a80aee4addf855666c28 --- /dev/null +++ b/docs/Tutorial-Custom-Trainer-Plugin.md @@ -0,0 +1,300 @@ +### Step 1: Write your custom trainer class +Before you start writing your code, make sure to use your favorite environment management tool(e.g. `venv` or `conda`) to create and activate a Python virtual environment. The following command uses `conda`, but other tools work similarly: +```shell +conda create -n trainer-env python=3.8.13 +conda activate trainer-env +``` + +Users of the plug-in system are responsible for implementing the trainer class subject to the API standard. Let us follow an example by implementing a custom trainer named "YourCustomTrainer". You can either extend `OnPolicyTrainer` or `OffPolicyTrainer` classes depending on the training strategies you choose. + +Please refer to the internal [PPO implementation](../ml-agents/mlagents/trainers/ppo/trainer.py) for a complete code example. We will not provide a workable code in the document. The purpose of the tutorial is to introduce you to the core components and interfaces of our plugin framework. We use code snippets and patterns to demonstrate the control and data flow. + +Your custom trainers are responsible for collecting experiences and training the models. Your custom trainer class acts like a co-ordinator to the policy and optimizer. To start implementing methods in the class, create a policy class objects from method `create_policy`: + + +```python +def create_policy( + self, parsed_behavior_id: BehaviorIdentifiers, behavior_spec: BehaviorSpec +) -> TorchPolicy: + + actor_cls: Union[Type[SimpleActor], Type[SharedActorCritic]] = SimpleActor + actor_kwargs: Dict[str, Any] = { + "conditional_sigma": False, + "tanh_squash": False, + } + if self.shared_critic: + reward_signal_configs = self.trainer_settings.reward_signals + reward_signal_names = [ + key.value for key, _ in reward_signal_configs.items() + ] + actor_cls = SharedActorCritic + actor_kwargs.update({"stream_names": reward_signal_names}) + + policy = TorchPolicy( + self.seed, + behavior_spec, + self.trainer_settings.network_settings, + actor_cls, + actor_kwargs, + ) + return policy + +``` + +Depending on whether you use shared or separate network architecture for your policy, we provide `SimpleActor` and `SharedActorCritic` from `mlagents.trainers.torch_entities.networks` that you can choose from. In our example above, we use a `SimpleActor`. + +Next, create an optimizer class object from `create_optimizer` method and connect it to the policy object you created above: + + +```python +def create_optimizer(self) -> TorchOptimizer: + return TorchPPOOptimizer( # type: ignore + cast(TorchPolicy, self.policy), self.trainer_settings # type: ignore + ) # type: ignore + +``` + +There are a couple of abstract methods(`_process_trajectory` and `_update_policy`) inherited from `RLTrainer` that you need to implement in your custom trainer class. `_process_trajectory` takes a trajectory and processes it, putting it into the update buffer. Processing involves calculating value and advantage targets for the model updating step. Given input `trajectory: Trajectory`, users are responsible for processing the data in the trajectory and append `agent_buffer_trajectory` to the back of the update buffer by calling `self._append_to_update_buffer(agent_buffer_trajectory)`, whose output will be used in updating the model in `optimizer` class. + +A typical `_process_trajectory` function(incomplete) will convert a trajectory object to an agent buffer then get all value estimates from the trajectory by calling `self.optimizer.get_trajectory_value_estimates`. From the returned dictionary of value estimates we extract reward signals keyed by their names: + +```python +def _process_trajectory(self, trajectory: Trajectory) -> None: + super()._process_trajectory(trajectory) + agent_id = trajectory.agent_id # All the agents should have the same ID + + agent_buffer_trajectory = trajectory.to_agentbuffer() + + # Get all value estimates + ( + value_estimates, + value_next, + value_memories, + ) = self.optimizer.get_trajectory_value_estimates( + agent_buffer_trajectory, + trajectory.next_obs, + trajectory.done_reached and not trajectory.interrupted, + ) + + for name, v in value_estimates.items(): + agent_buffer_trajectory[RewardSignalUtil.value_estimates_key(name)].extend( + v + ) + self._stats_reporter.add_stat( + f"Policy/{self.optimizer.reward_signals[name].name.capitalize()} Value Estimate", + np.mean(v), + ) + + # Evaluate all reward functions + self.collected_rewards["environment"][agent_id] += np.sum( + agent_buffer_trajectory[BufferKey.ENVIRONMENT_REWARDS] + ) + for name, reward_signal in self.optimizer.reward_signals.items(): + evaluate_result = ( + reward_signal.evaluate(agent_buffer_trajectory) * reward_signal.strength + ) + agent_buffer_trajectory[RewardSignalUtil.rewards_key(name)].extend( + evaluate_result + ) + # Report the reward signals + self.collected_rewards[name][agent_id] += np.sum(evaluate_result) + + self._append_to_update_buffer(agent_buffer_trajectory) + +``` + +A trajectory will be a list of dictionaries of strings mapped to `Anything`. When calling `forward` on a policy, the argument will include an “experience†dictionary from the last step. The `forward` method will generate an action and the next “experience†dictionary. Examples of fields in the “experience†dictionary include observation, action, reward, done status, group_reward, LSTM memory state, etc. + + + +### Step 2: implement your custom optimizer for the trainer. +We will show you an example we implemented - `class TorchPPOOptimizer(TorchOptimizer)`, which takes a Policy and a Dict of trainer parameters and creates an Optimizer that connects to the policy. Your optimizer should include a value estimator and a loss function in the `update` method. + +Before writing your optimizer class, first define setting class `class PPOSettings(OnPolicyHyperparamSettings)` for your custom optimizer: + + + +```python +class PPOSettings(OnPolicyHyperparamSettings): + beta: float = 5.0e-3 + epsilon: float = 0.2 + lambd: float = 0.95 + num_epoch: int = 3 + shared_critic: bool = False + learning_rate_schedule: ScheduleType = ScheduleType.LINEAR + beta_schedule: ScheduleType = ScheduleType.LINEAR + epsilon_schedule: ScheduleType = ScheduleType.LINEAR + +``` + +You should implement `update` function following interface: + + +```python +def update(self, batch: AgentBuffer, num_sequences: int) -> Dict[str, float]: + +``` + +In which losses and other metrics are calculated from an `AgentBuffer` that is generated from your trainer class, depending on which model you choose to implement the loss functions will be different. In our case we calculate value loss from critic and trust region policy loss. A typical pattern(incomplete) of the calculations will look like the following: + + +```python +run_out = self.policy.actor.get_stats( + current_obs, + actions, + masks=act_masks, + memories=memories, + sequence_length=self.policy.sequence_length, +) + +log_probs = run_out["log_probs"] +entropy = run_out["entropy"] + +values, _ = self.critic.critic_pass( + current_obs, + memories=value_memories, + sequence_length=self.policy.sequence_length, +) +policy_loss = ModelUtils.trust_region_policy_loss( + ModelUtils.list_to_tensor(batch[BufferKey.ADVANTAGES]), + log_probs, + old_log_probs, + loss_masks, + decay_eps, +) +loss = ( + policy_loss + + 0.5 * value_loss + - decay_bet * ModelUtils.masked_mean(entropy, loss_masks) +) + +``` + +Finally update the model and return the a dictionary including calculated losses and updated decay learning rate: + + +```python +ModelUtils.update_learning_rate(self.optimizer, decay_lr) +self.optimizer.zero_grad() +loss.backward() + +self.optimizer.step() +update_stats = { + "Losses/Policy Loss": torch.abs(policy_loss).item(), + "Losses/Value Loss": value_loss.item(), + "Policy/Learning Rate": decay_lr, + "Policy/Epsilon": decay_eps, + "Policy/Beta": decay_bet, +} + +``` + +### Step 3: Integrate your custom trainer into the plugin system + +By integrating a custom trainer into the plugin system, a user can use their published packages which have their implementations. To do that, you need to add a setup.py file. In the call to setup(), you'll need to add to the entry_points dictionary for each plugin interface that you implement. The form of this is {entry point name}={plugin module}:{plugin function}. For example: + + + +```python +entry_points={ + ML_AGENTS_TRAINER_TYPE: [ + "your_trainer_type=your_package.your_custom_trainer:get_type_and_setting" + ] + }, +``` + +Some key elements in the code: + +``` +ML_AGENTS_TRAINER_TYPE: a string constant for trainer type +your_trainer_type: name your trainer type, used in configuration file +your_package: your pip installable package containing custom trainer implementation +``` + +Also define `get_type_and_setting` method in `YourCustomTrainer` class: + + +```python +def get_type_and_setting(): + return {YourCustomTrainer.get_trainer_name(): YourCustomTrainer}, { + YourCustomTrainer.get_trainer_name(): YourCustomSetting + } + +``` + +Finally, specify trainer type in the config file: + + +```python +behaviors: + 3DBall: + trainer_type: your_trainer_type +... +``` + +### Step 4: Install your custom trainer and run training: +Before installing your custom trainer package, make sure you have `ml-agents-env` and `ml-agents` installed + +```shell +pip3 install -e ./ml-agents-envs && pip3 install -e ./ml-agents +``` + +Install your cutom trainer package(if your package is pip installable): +```shell +pip3 install your_custom_package +``` +Or follow our internal implementations: +```shell +pip3 install -e ./ml-agents-trainer-plugin +``` + +Following the previous installations your package is added as an entrypoint and you can use a config file with new +trainers: +```shell +mlagents-learn ml-agents-trainer-plugin/mlagents_trainer_plugin/a2c/a2c_3DBall.yaml --run-id +--env +``` + +### Validate your implementations: +Create a clean Python environment with Python 3.8+ and activate it before you start, if you haven't done so already: +```shell +conda create -n trainer-env python=3.8.13 +conda activate trainer-env +``` + +Make sure you follow previous steps and install all required packages. We are testing internal implementations in this tutorial, but ML-Agents users can run similar validations once they have their own implementations installed: +```shell +pip3 install -e ./ml-agents-envs && pip3 install -e ./ml-agents +pip3 install -e ./ml-agents-trainer-plugin +``` +Once your package is added as an `entrypoint`, you can add to the config file the new trainer type. Check if trainer type is specified in the config file `a2c_3DBall.yaml`: +``` +trainer_type: a2c +``` + +Test if custom trainer package is installed by running: +```shell +mlagents-learn ml-agents-trainer-plugin/mlagents_trainer_plugin/a2c/a2c_3DBall.yaml --run-id test-trainer +``` + +You can also list all trainers installed in the registry. Type `python` in your shell to open a REPL session. Run the python code below, you should be able to see all trainer types currently installed: +```python +>>> import pkg_resources +>>> for entry in pkg_resources.iter_entry_points('mlagents.trainer_type'): +... print(entry) +... +default = mlagents.plugins.trainer_type:get_default_trainer_types +a2c = mlagents_trainer_plugin.a2c.a2c_trainer:get_type_and_setting +dqn = mlagents_trainer_plugin.dqn.dqn_trainer:get_type_and_setting +``` + +If it is properly installed, you will see Unity logo and message indicating training will start: +``` +[INFO] Listening on port 5004. Start training by pressing the Play button in the Unity Editor. +``` + +If you see the following error message, it could be due to trainer type is wrong or the trainer type specified is not installed: +```shell +mlagents.trainers.exception.TrainerConfigError: Invalid trainer type a2c was found +``` + diff --git a/docs/Unity-Environment-Registry.md b/docs/Unity-Environment-Registry.md new file mode 100644 index 0000000000000000000000000000000000000000..c5caa68cbdea64d0c5b45c3f776bacbb4f23f7ae --- /dev/null +++ b/docs/Unity-Environment-Registry.md @@ -0,0 +1,60 @@ +# Unity Environment Registry [Experimental] + +The Unity Environment Registry is a database of pre-built Unity environments that can be easily used without having to install the Unity Editor. It is a great way to get started with our [UnityEnvironment API](Python-LLAPI.md). + +## Loading an Environment from the Registry + +To get started, you can access the default registry we provide with our [Example Environments](Learning-Environment-Examples.md). The Unity Environment Registry implements a _Mapping_, therefore, you can access an entry with its identifier with the square brackets `[ ]`. Use the following code to list all of the environment identifiers present in the default registry: + +```python +from mlagents_envs.registry import default_registry + +environment_names = list(default_registry.keys()) +for name in environment_names: + print(name) +``` + +The `make()` method on a registry value will return a `UnityEnvironment` ready to be used. All arguments passed to the make method will be passed to the constructor of the `UnityEnvironment` as well. Refer to the documentation on the [Python-API](Python-LLAPI.md) for more information about the arguments of the `UnityEnvironment` constructor. For example, the following code will create the environment under the identifier `"my-env"`, reset it, perform a few steps and finally close it: + +```python +from mlagents_envs.registry import default_registry + +env = default_registry["my-env"].make() +env.reset() +for _ in range(10): + env.step() +env.close() +``` + +## Create and share your own registry + +In order to share the `UnityEnvironemnt` you created, you must : + - [Create a Unity executable](Learning-Environment-Executable.md) of your environment for each platform (Linux, OSX and/or Windows) + - Place each executable in a `zip` compressed folder + - Upload each zip file online to your preferred hosting platform + - Create a `yaml` file that will contain the description and path to your environment + - Upload the `yaml` file online +The `yaml` file must have the following format : + +```yaml +environments: + - : + expected_reward: + description: + linux_url: + darwin_url: + win_url: + additional_args: + - + - ... +``` + +Your users can now use your environment with the following code : +```python +from mlagents_envs.registry import UnityEnvRegistry + +registry = UnityEnvRegistry() +registry.register_from_yaml("url-or-path-to-your-yaml-file") +``` + __Note__: The `"url-or-path-to-your-yaml-file"` can be either a url or a local path. + diff --git a/docs/Unity-Inference-Engine.md b/docs/Unity-Inference-Engine.md new file mode 100644 index 0000000000000000000000000000000000000000..31a7c137c8837fe99d4fe73316da3ee6ab0c2004 --- /dev/null +++ b/docs/Unity-Inference-Engine.md @@ -0,0 +1,47 @@ +# Unity Inference Engine + +The ML-Agents Toolkit allows you to use pre-trained neural network models inside +your Unity games. This support is possible thanks to the +[Unity Inference Engine](https://docs.unity3d.com/Packages/com.unity.barracuda@latest/index.html) +(codenamed Barracuda). The Unity Inference Engine uses +[compute shaders](https://docs.unity3d.com/Manual/class-ComputeShader.html) to +run the neural network within Unity. + +## Supported devices + +See the Unity Inference Engine documentation for a list of the +[supported platforms](https://docs.unity3d.com/Packages/com.unity.barracuda@latest/index.html#supported-platforms). + +Scripting Backends : The Unity Inference Engine is generally faster with +**IL2CPP** than with **Mono** for Standalone builds. In the Editor, It is not +possible to use the Unity Inference Engine with GPU device selected when Editor +Graphics Emulation is set to **OpenGL(ES) 3.0 or 2.0 emulation**. Also there +might be non-fatal build time errors when target platform includes Graphics API +that does not support **Unity Compute Shaders**. + +## Using the Unity Inference Engine + +When using a model, drag the model file into the **Model** field in the +Inspector of the Agent. Select the **Inference Device** : CPU or GPU you want to +use for Inference. + +**Note:** For most of the models generated with the ML-Agents Toolkit, CPU will +be faster than GPU. You should use the GPU only if you use the ResNet visual +encoder or have a large number of agents with visual observations. + +# Unsupported use cases +## Externally trained models +The ML-Agents Toolkit only supports the models created with our trainers. Model +loading expects certain conventions for constants and tensor names. While it is +possible to construct a model that follows these conventions, we don't provide +any additional help for this. More details can be found in +[TensorNames.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/com.unity.ml-agents/Runtime/Inference/TensorNames.cs) +and +[BarracudaModelParamLoader.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs). + +If you wish to run inference on an externally trained model, you should use +Barracuda directly, instead of trying to run it through ML-Agents. + +## Model inference outside of Unity +We do not provide support for inference anywhere outside of Unity. The `.onnx` files produced by training use the open format ONNX; if you wish to convert a `.onnx` file to another +format or run inference with them, refer to their documentation. diff --git a/docs/Using-Docker.md b/docs/Using-Docker.md new file mode 100644 index 0000000000000000000000000000000000000000..000478f3456ffe3cb4fbaf372efdefaa50702ffa --- /dev/null +++ b/docs/Using-Docker.md @@ -0,0 +1,177 @@ +# Using Docker For ML-Agents (Deprecated) + +:warning: **Note:** We no longer use this guide ourselves and so it may not work +correctly. We've decided to keep it up just in case it is helpful to you. + +We currently offer a solution for Windows and Mac users who would like to do +training or inference using Docker. This option may be appealing to those who +would like to avoid installing Python and TensorFlow themselves. The current +setup forces both TensorFlow and Unity to _only_ rely on the CPU for +computations. Consequently, our Docker simulation does not use a GPU and uses +[`Xvfb`](https://en.wikipedia.org/wiki/Xvfb) to do visual rendering. `Xvfb` is a +utility that enables `ML-Agents` (or any other application) to do rendering +virtually i.e. it does not assume that the machine running `ML-Agents` has a GPU +or a display attached to it. This means that rich environments which involve +agents using camera-based visual observations might be slower. + +## Requirements + +- [Docker](https://www.docker.com) +- Unity _Linux Build Support_ Component. Make sure to select the _Linux Build + Support_ component when installing Unity. + +

+ Linux Build Support +

+ +## Setup + +- [Download](https://unity3d.com/get-unity/download) the Unity Installer and add + the _Linux Build Support_ Component + +- [Download](https://www.docker.com/community-edition#/download) and install + Docker if you don't have it setup on your machine. + +- Since Docker runs a container in an environment that is isolated from the host + machine, a mounted directory in your host machine is used to share data, e.g. + the trainer configuration file, Unity executable and + TensorFlow graph. For convenience, we created an empty `unity-volume` + directory at the root of the repository for this purpose, but feel free to use + any other directory. The remainder of this guide assumes that the + `unity-volume` directory is the one used. + +## Usage + +Using Docker for ML-Agents involves three steps: building the Unity environment +with specific flags, building a Docker container and, finally, running the +container. If you are not familiar with building a Unity environment for +ML-Agents, please read through our +[Getting Started with the 3D Balance Ball Example](Getting-Started.md) guide +first. + +### Build the Environment (Optional) + +_If you want to used the Editor to perform training, you can skip this step._ + +Since Docker typically runs a container sharing a (linux) kernel with the host +machine, the Unity environment **has** to be built for the **linux platform**. +When building a Unity environment, please select the following options from the +the Build Settings window: + +- Set the _Target Platform_ to `Linux` +- Set the _Architecture_ to `x86_64` + +Then click `Build`, pick an environment name (e.g. `3DBall`) and set the output +directory to `unity-volume`. After building, ensure that the file +`.x86_64` and subdirectory `_Data/` are +created under `unity-volume`. + +![Build Settings For Docker](images/docker_build_settings.png) + +### Build the Docker Container + +First, make sure the Docker engine is running on your machine. Then build the +Docker container by calling the following command at the top-level of the +repository: + +```sh +docker build -t . +``` + +Replace `` with a name for the Docker image, e.g. +`balance.ball.v0.1`. + +### Run the Docker Container + +Run the Docker container by calling the following command at the top-level of +the repository: + +```sh +docker run -it --name \ + --mount type=bind,source="$(pwd)"/unity-volume,target=/unity-volume \ + -p 5005:5005 \ + -p 6006:6006 \ + :latest \ + \ + --env= \ + --train \ + --run-id= +``` + +Notes on argument values: + +- `` is used to identify the container (in case you want to + interrupt and terminate it). This is optional and Docker will generate a + random name if this is not set. _Note that this must be unique for every run + of a Docker image._ +- `` references the image name used when building the container. +- `` **(Optional)**: If you are training with a linux + executable, this is the name of the executable. If you are training in the + Editor, do not pass a `` argument and press the **Play** + button in Unity when the message _"Start training by pressing the Play button + in the Unity Editor"_ is displayed on the screen. +- `source`: Reference to the path in your host OS where you will store the Unity + executable. +- `target`: Tells Docker to mount the `source` path as a disk with this name. +- `trainer-config-file`, `train`, `run-id`: ML-Agents arguments passed to + `mlagents-learn`. `trainer-config-file` is the filename of the trainer config + file, `train` trains the algorithm, and `run-id` is used to tag each + experiment with a unique identifier. We recommend placing the trainer-config + file inside `unity-volume` so that the container has access to the file. + +To train with a `3DBall` environment executable, the command would be: + +```sh +docker run -it --name 3DBallContainer.first.trial \ + --mount type=bind,source="$(pwd)"/unity-volume,target=/unity-volume \ + -p 5005:5005 \ + -p 6006:6006 \ + balance.ball.v0.1:latest 3DBall \ + /unity-volume/trainer_config.yaml \ + --env=/unity-volume/3DBall \ + --train \ + --run-id=3dball_first_trial +``` + +For more detail on Docker mounts, check out +[these](https://docs.docker.com/storage/bind-mounts/) docs from Docker. + +**NOTE** If you are training using docker for environments that use visual +observations, you may need to increase the default memory that Docker allocates +for the container. For example, see +[here](https://docs.docker.com/docker-for-mac/#advanced) for instructions for +Docker for Mac. + +### Running Tensorboard + +You can run Tensorboard to monitor your training instance on +http://localhost:6006: + +```sh +docker exec -it tensorboard --logdir /unity-volume/results --host 0.0.0.0 +``` + +With our previous 3DBall example, this command would look like this: + +```sh +docker exec -it 3DBallContainer.first.trial tensorboard --logdir /unity-volume/results --host 0.0.0.0 +``` + +For more details on Tensorboard, check out the documentation about +[Using Tensorboard](Using-Tensorboard.md). + +### Stopping Container and Saving State + +If you are satisfied with the training progress, you can stop the Docker +container while saving state by either using `Ctrl+C` or `⌘+C` (Mac) or by using +the following command: + +```sh +docker kill --signal=SIGINT +``` + +`` is the name of the container specified in the earlier +`docker run` command. If you didn't specify one, you can find the randomly +generated identifier by running `docker container ls`. diff --git a/docs/Using-Tensorboard.md b/docs/Using-Tensorboard.md new file mode 100644 index 0000000000000000000000000000000000000000..feaf800fe8458c27950b45a7f9d37fa7a70fd3b5 --- /dev/null +++ b/docs/Using-Tensorboard.md @@ -0,0 +1,136 @@ +# Using TensorBoard to Observe Training + +The ML-Agents Toolkit saves statistics during learning session that you can view +with a TensorFlow utility named, +[TensorBoard](https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard). + +The `mlagents-learn` command saves training statistics to a folder named +`results`, organized by the `run-id` value you assign to a training session. + +In order to observe the training process, either during training or afterward, +start TensorBoard: + +1. Open a terminal or console window: +1. Navigate to the directory where the ML-Agents Toolkit is installed. +1. From the command line run: `tensorboard --logdir results --port 6006` +1. Open a browser window and navigate to + [localhost:6006](http://localhost:6006). + +**Note:** The default port TensorBoard uses is 6006. If there is an existing +session running on port 6006 a new session can be launched on an open port using +the --port option. + +**Note:** If you don't assign a `run-id` identifier, `mlagents-learn` uses the +default string, "ppo". You can delete the folders under the `results` directory +to clear out old statistics. + +On the left side of the TensorBoard window, you can select which of the training +runs you want to display. You can select multiple run-ids to compare statistics. +The TensorBoard window also provides options for how to display and smooth +graphs. + +## The ML-Agents Toolkit training statistics + +The ML-Agents training program saves the following statistics: + +![Example TensorBoard Run](images/mlagents-TensorBoard.png) + +### Environment Statistics + +- `Environment/Lesson` - Plots the progress from lesson to lesson. Only + interesting when performing curriculum training. + +- `Environment/Cumulative Reward` - The mean cumulative episode reward over all + agents. Should increase during a successful training session. + +- `Environment/Episode Length` - The mean length of each episode in the + environment for all agents. + +### Is Training + +- `Is Training` - A boolean indicating if the agent is updating its model. + +### Policy Statistics + +- `Policy/Entropy` (PPO; SAC) - How random the decisions of the model are. + Should slowly decrease during a successful training process. If it decreases + too quickly, the `beta` hyperparameter should be increased. + +- `Policy/Learning Rate` (PPO; SAC) - How large a step the training algorithm + takes as it searches for the optimal policy. Should decrease over time. + +- `Policy/Entropy Coefficient` (SAC) - Determines the relative importance of the + entropy term. This value is adjusted automatically so that the agent retains + some amount of randomness during training. + +- `Policy/Extrinsic Reward` (PPO; SAC) - This corresponds to the mean cumulative + reward received from the environment per-episode. + +- `Policy/Value Estimate` (PPO; SAC) - The mean value estimate for all states + visited by the agent. Should increase during a successful training session. + +- `Policy/Curiosity Reward` (PPO/SAC+Curiosity) - This corresponds to the mean + cumulative intrinsic reward generated per-episode. + +- `Policy/Curiosity Value Estimate` (PPO/SAC+Curiosity) - The agent's value + estimate for the curiosity reward. + +- `Policy/GAIL Reward` (PPO/SAC+GAIL) - This corresponds to the mean cumulative + discriminator-based reward generated per-episode. + +- `Policy/GAIL Value Estimate` (PPO/SAC+GAIL) - The agent's value estimate for + the GAIL reward. + +- `Policy/GAIL Policy Estimate` (PPO/SAC+GAIL) - The discriminator's estimate + for states and actions generated by the policy. + +- `Policy/GAIL Expert Estimate` (PPO/SAC+GAIL) - The discriminator's estimate + for states and actions drawn from expert demonstrations. + +### Learning Loss Functions + +- `Losses/Policy Loss` (PPO; SAC) - The mean magnitude of policy loss function. + Correlates to how much the policy (process for deciding actions) is changing. + The magnitude of this should decrease during a successful training session. + +- `Losses/Value Loss` (PPO; SAC) - The mean loss of the value function update. + Correlates to how well the model is able to predict the value of each state. + This should increase while the agent is learning, and then decrease once the + reward stabilizes. + +- `Losses/Forward Loss` (PPO/SAC+Curiosity) - The mean magnitude of the forward + model loss function. Corresponds to how well the model is able to predict the + new observation encoding. + +- `Losses/Inverse Loss` (PPO/SAC+Curiosity) - The mean magnitude of the inverse + model loss function. Corresponds to how well the model is able to predict the + action taken between two observations. + +- `Losses/Pretraining Loss` (BC) - The mean magnitude of the behavioral cloning + loss. Corresponds to how well the model imitates the demonstration data. + +- `Losses/GAIL Loss` (GAIL) - The mean magnitude of the GAIL discriminator loss. + Corresponds to how well the model imitates the demonstration data. + +### Self-Play + +- `Self-Play/ELO` (Self-Play) - + [ELO](https://en.wikipedia.org/wiki/Elo_rating_system) measures the relative + skill level between two players. In a proper training run, the ELO of the + agent should steadily increase. + +## Exporting Data from TensorBoard +To export timeseries data in CSV or JSON format, check the "Show data download +links" in the upper left. This will enable download links below each chart. + +![Example TensorBoard Run](images/TensorBoard-download.png) + +## Custom Metrics from Unity + +To get custom metrics from a C# environment into TensorBoard, you can use the +`StatsRecorder`: + +```csharp +var statsRecorder = Academy.Instance.StatsRecorder; +statsRecorder.Add("MyMetric", 1.0); +``` diff --git a/docs/Using-Virtual-Environment.md b/docs/Using-Virtual-Environment.md new file mode 100644 index 0000000000000000000000000000000000000000..5ec0592a54bb85f808917a7461197c4cc6644efe --- /dev/null +++ b/docs/Using-Virtual-Environment.md @@ -0,0 +1,69 @@ +# Using Virtual Environment + +## What is a Virtual Environment? + +A Virtual Environment is a self contained directory tree that contains a Python +installation for a particular version of Python, plus a number of additional +packages. To learn more about Virtual Environments see +[here](https://docs.python.org/3/library/venv.html). + +## Why should I use a Virtual Environment? + +A Virtual Environment keeps all dependencies for the Python project separate +from dependencies of other projects. This has a few advantages: + +1. It makes dependency management for the project easy. +1. It enables using and testing of different library versions by quickly + spinning up a new environment and verifying the compatibility of the code + with the different version. + +## Python Version Requirement (Required) +This guide has been tested with Python 3.8.13 through Python 3.10.x. Newer versions might not +have support for the dependent libraries, so are not recommended. + +## Installing Pip (Required) + +1. Download the `get-pip.py` file using the command + `curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py` +1. Run the following `python3 get-pip.py` +1. Check pip version using `pip3 -V` + +Note (for Ubuntu users): If the +`ModuleNotFoundError: No module named 'distutils.util'` error is encountered, +then python3-distutils needs to be installed. Install python3-distutils using +`sudo apt-get install python3-distutils` + +## Mac OS X Setup + +1. Create a folder where the virtual environments will reside + `$ mkdir ~/python-envs` +1. To create a new environment named `sample-env` execute + `$ python3 -m venv ~/python-envs/sample-env` +1. To activate the environment execute + `$ source ~/python-envs/sample-env/bin/activate` +1. Upgrade to the latest pip version using `$ pip3 install --upgrade pip` +1. Upgrade to the latest setuptools version using + `$ pip3 install --upgrade setuptools` +1. To deactivate the environment execute `$ deactivate` (you can reactivate the + environment using the same `activate` command listed above) + +## Ubuntu Setup + +1. Install the python3-venv package using `$ sudo apt-get install python3-venv` +1. Follow the steps in the Mac OS X installation. + +## Windows Setup + +1. Create a folder where the virtual environments will reside `md python-envs` +1. To create a new environment named `sample-env` execute + `python -m venv python-envs\sample-env` +1. To activate the environment execute `python-envs\sample-env\Scripts\activate` +1. Upgrade to the latest pip version using `pip install --upgrade pip` +1. To deactivate the environment execute `deactivate` (you can reactivate the + environment using the same `activate` command listed above) + +Note: +- Verify that you are using a Python version between 3.8.13 and 3.10.x. Launch a + command prompt using `cmd` and execute `python --version` to verify the version. +- Python3 installation may require admin privileges on Windows. +- This guide is for Windows 10 using a 64-bit architecture only. diff --git a/docs/Versioning.md b/docs/Versioning.md new file mode 100644 index 0000000000000000000000000000000000000000..0f1db0a06243b595122e0b3cb9936ede0cf0c42d --- /dev/null +++ b/docs/Versioning.md @@ -0,0 +1,95 @@ +# ML-Agents Versioning + +## Context +As the ML-Agents project evolves into a more mature product, we want to communicate the process +we use to version our packages and the data that flows into, through, and out of them clearly. +Our project now has four packages (1 Unity, 3 Python) along with artifacts that are produced as +well as consumed. This document covers the versioning for these packages and artifacts. + +## GitHub Releases +Up until now, all packages were in lockstep in-terms of versioning. As a result, the GitHub releases +were tagged with the version of all those packages (e.g. v0.15.0, v0.15.1) and labeled accordingly. +With the decoupling of package versions, we now need to revisit our GitHub release tagging. +The proposal is that we move towards an integer release numbering for our repo and each such +release will call out specific version upgrades of each package. For instance, with +[the April 30th release](https://github.com/Unity-Technologies/ml-agents/releases/tag/release_1), +we will have: +- GitHub Release 1 (branch name: *release_1_branch*) + - com.unity.ml-agents release 1.0.0 + - ml-agents release 0.16.0 + - ml-agents-envs release 0.16.0 + - gym-unity release 0.16.0 + +Our release cadence will not be affected by these versioning changes. We will keep having +monthly releases to fix bugs and release new features. + +## Packages +All of the software packages, and their generated artifacts will be versioned. Any automation +tools will not be versioned. + +### Unity package +Package name: com.unity.ml-agents +- Versioned following [Semantic Versioning Guidelines](https://www.semver.org) +- This package consumes an artifact of the training process: the `.nn` file. These files + are integer versioned and currently at version 2. The com.unity.ml-agents package + will need to support the version of `.nn` files which existed at its 1.0.0 release. + For example, consider that com.unity.ml-agents is at version 1.0.0 and the NN files + are at version 2. If the NN files change to version 3, the next release of + com.unity.ml-agents at version 1.1.0 guarantees it will be able to read both of these + formats. If the NN files were to change to version 4 and com.unity.ml-agents to + version 2.0.0, support for NN versions 2 and 3 could be dropped for com.unity.ml-agents + version 2.0.0. +- This package produces one artifact, the `.demo` files. These files will have integer + versioning. This means their version will increment by 1 at each change. The + com.unity.ml-agents package must be backward compatible with version changes + that occur between minor versions. +- To summarize, the artifacts produced and consumed by com.unity.ml-agents are guaranteed + to be supported for 1.x.x versions of com.unity.ml-agents. We intend to provide stability + for our users by moving to a 1.0.0 release of com.unity.ml-agents. + + +### Python Packages +Package names: ml-agents / ml-agents-envs / gym-unity +- The python packages remain in "Beta." This means that breaking changes to the public + API of the python packages can change without having to have a major version bump. + Historically, the python and C# packages were in version lockstep. This is no longer + the case. The python packages will remain in lockstep with each other for now, while the + C# package will follow its own versioning as is appropriate. However, the python package + versions may diverge in the future. +- While the python packages will remain in Beta for now, we acknowledge that the most + heavily used portion of our python interface is the `mlagents-learn` CLI and strive + to make this part of our API backward compatible. We are actively working on this and + expect to have a stable CLI in the next few weeks. + +## Communicator + +Packages which communicate: com.unity.ml-agents / ml-agents-envs + +Another entity of the ML-Agents Toolkit that requires versioning is the communication layer +between C# and Python, which will follow also semantic versioning. This guarantees a level of +backward compatibility between different versions of C# and Python packages which communicate. +Any Communicator version 1.x.x of the Unity package should be compatible with any 1.x.x +Communicator Version in Python. + +An RLCapabilities struct keeps track of which features exist. This struct is passed from C# to +Python, and another from Python to C#. With this feature level granularity, we can notify users +more specifically about feature limitations based on what's available in both C# and Python. +These notifications will be logged to the python terminal, or to the Unity Editor Console. + + +## Side Channels + +The communicator is what manages data transfer between Unity and Python for the core +training loop. Side Channels are another means of data transfer between Unity and Python. +Side Channels are not versioned, but have been designed to support backward compatibility +for what they are. As of today, we provide 4 side channels: +- FloatProperties: shared float data between Unity - Python (bidirectional) +- RawBytes: raw data that can be sent Unity - Python (bidirectional) +- EngineConfig: a set of numeric fields in a pre-defined order sent from Python to Unity +- Stats: (name, value, agg) messages sent from Unity to Python + +Aside from the specific implementations of side channels we provide (and use ourselves), +the Side Channel interface is made available for users to create their own custom side +channels. As such, we guarantee that the built in SideChannel interface between Unity and +Python is backward compatible in packages that share the same major version. + diff --git a/docs/com.unity.ml-agents.extensions.md b/docs/com.unity.ml-agents.extensions.md new file mode 100644 index 0000000000000000000000000000000000000000..48a1449efa645858fa8885a839dd7b676152f1d2 --- /dev/null +++ b/docs/com.unity.ml-agents.extensions.md @@ -0,0 +1 @@ +{!../com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md!} diff --git a/docs/com.unity.ml-agents.md b/docs/com.unity.ml-agents.md new file mode 100644 index 0000000000000000000000000000000000000000..3d3d8066876d35b51e7f90900cad1079411f3849 --- /dev/null +++ b/docs/com.unity.ml-agents.md @@ -0,0 +1 @@ +{!../com.unity.ml-agents/Documentation~/com.unity.ml-agents.md!} diff --git a/docs/dox-ml-agents.conf b/docs/dox-ml-agents.conf new file mode 100644 index 0000000000000000000000000000000000000000..bfdb11ead7966ea63bbe4f5d3382774ab04fafbe --- /dev/null +++ b/docs/dox-ml-agents.conf @@ -0,0 +1,2444 @@ +# Doxyfile 1.8.13 + +# To generate the C# API documentation, run: +# +# doxygen dox-ml-agents.conf +# +# from the ml-agents-docs directory + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "Unity ML-Agents Toolkit" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = doxygen/logo.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = YES + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = YES + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = YES + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = doxygen/doxlayout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ../com.unity.ml-agents/Runtime/ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.cs \ + *.md \ + *.py + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = images + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = Unity-Agents-Overview.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +#CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +#CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 2 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = ./html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = doxygen/header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = doxygen/footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = doxygen/doxygenbase.css + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = doxygen/unity.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /